diff --git a/source/java/org/alfresco/repo/replication/script/ScriptReplicationDefinition.java b/source/java/org/alfresco/repo/replication/script/ScriptReplicationDefinition.java new file mode 100644 index 0000000000..1121112219 --- /dev/null +++ b/source/java/org/alfresco/repo/replication/script/ScriptReplicationDefinition.java @@ -0,0 +1,129 @@ +/* + * Copyright (C) 2005-2010 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.replication.script; + +import java.util.List; + +import org.alfresco.repo.jscript.ScriptAction; +import org.alfresco.repo.jscript.ScriptNode; +import org.alfresco.service.ServiceRegistry; +import org.alfresco.service.cmr.action.Action; +import org.alfresco.service.cmr.action.ActionDefinition; +import org.alfresco.service.cmr.replication.ReplicationDefinition; +import org.alfresco.service.cmr.replication.ReplicationService; +import org.alfresco.service.cmr.repository.NodeRef; +import org.mozilla.javascript.Scriptable; + +/** + * ReplicationDefinition JavaScript Object. This class is a JavaScript-friendly wrapper for + * the {@link ReplicationDefinition replicationDefinition} class. + * + * @author Nick Burch + * @see org.alfresco.service.cmr.replication.ReplicationDefinition + */ +public final class ScriptReplicationDefinition extends ScriptAction +{ + private static final long serialVersionUID = -6729144733846247372L; + + private ReplicationService replicationService; + + public ScriptReplicationDefinition(ServiceRegistry serviceRegistry, ReplicationService replicationService, + Scriptable scope, ReplicationDefinition replicationDefinition) + { + super(serviceRegistry, (Action)replicationDefinition, (ActionDefinition)replicationDefinition); + this.replicationService = replicationService; + } + + /** + * Returns the name of this replication definition + * + * @return the name which uniquely identifies this replication definition. + */ + public String getReplicationName() + { + return getReplicationDefinition().getReplicationName(); + } + + public String getDescription() + { + return getReplicationDefinition().getDescription(); + } + + public String getTargetName() + { + return getReplicationDefinition().getTargetName(); + } + public void setTargetName(String target) + { + getReplicationDefinition().setTargetName(target); + } + + public ScriptNode[] getPayload() + { + List payload = getReplicationDefinition().getPayload(); + ScriptNode[] nodes = new ScriptNode[payload.size()]; + + for(int i=0; i payload = getReplicationDefinition().getPayload(); + payload.clear(); + + for(ScriptNode payloadNode : payloadNodes) + { + payload.add(payloadNode.getNodeRef()); + } + } + + @Override + public String toString() + { + StringBuilder msg = new StringBuilder(); + msg.append(this.getClass().getSimpleName()) + .append("[").append(getReplicationName()).append("]"); + + return msg.toString(); + } + + ReplicationDefinition getReplicationDefinition() + { + return (ReplicationDefinition)action; + } + + /** + * Triggers the execution of the replication. + */ + public void replicate() + { + executeImpl(null); + } + + @Override + protected void executeImpl(ScriptNode node) + { + ReplicationDefinition replicationDefinition = getReplicationDefinition(); + replicationService.replicate(replicationDefinition); + } +} diff --git a/source/java/org/alfresco/repo/replication/script/ScriptReplicationService.java b/source/java/org/alfresco/repo/replication/script/ScriptReplicationService.java new file mode 100644 index 0000000000..ab94e6d67d --- /dev/null +++ b/source/java/org/alfresco/repo/replication/script/ScriptReplicationService.java @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2005-2010 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.repo.replication.script; + +import java.util.List; + +import org.alfresco.repo.jscript.BaseScopableProcessorExtension; +import org.alfresco.service.ServiceRegistry; +import org.alfresco.service.cmr.replication.ReplicationDefinition; +import org.alfresco.service.cmr.replication.ReplicationService; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Script object representing the replication service. + * + * @author Nick Burch + */ +public class ScriptReplicationService extends BaseScopableProcessorExtension +{ + private static Log logger = LogFactory.getLog(ScriptReplicationService.class); + + /** The Services registry */ + private ServiceRegistry serviceRegistry; + private ReplicationService replicationService; + + /** + * Set the service registry + * + * @param serviceRegistry the service registry. + */ + public void setServiceRegistry(ServiceRegistry serviceRegistry) + { + this.serviceRegistry = serviceRegistry; + } + + /** + * Set the replication service + * + * @param replicationService the replication service. + */ + public void setReplicationService(ReplicationService replicationService) + { + this.replicationService = replicationService; + } + + /** + * Creates a new {@link ScriptReplicationDefinition} and sets the replication name and + * the description to the specified values. + * + * @param replicationName A unique identifier used to specify the created + * {@link ScriptReplicationDefinition}. + * @param description A description of the replication + * @return the created {@link ScriptReplicationDefinition}. + * @see org.alfresco.service.cmr.replication.ReplicationService#createReplicationDefinition(String, String) + */ + public ScriptReplicationDefinition createReplicationDefinition(String replicationName, String description) + { + if (logger.isDebugEnabled()) + { + StringBuilder msg = new StringBuilder(); + msg.append("Creating ScriptReplicationDefinition [") + .append(replicationName).append(", ") + .append(description).append("]"); + logger.debug(msg.toString()); + } + + ReplicationDefinition replicationDefinition = replicationService.createReplicationDefinition(replicationName, description); + return new ScriptReplicationDefinition(serviceRegistry, replicationService, this.getScope(), replicationDefinition); + } + + public void saveReplicationDefinition(ScriptReplicationDefinition definition) + { + if (logger.isDebugEnabled()) + { + StringBuilder msg = new StringBuilder(); + msg.append("Saving ScriptReplicationDefinition [") + .append(definition.getReplicationName()).append(", ") + .append(definition.getDescription()).append("]"); + logger.debug(msg.toString()); + } + + ReplicationDefinition replicationDefinition = definition.getReplicationDefinition(); + replicationService.saveReplicationDefinition(replicationDefinition); + } + + public ScriptReplicationDefinition loadReplicationDefinition(String replicationName) + { + ReplicationDefinition replicationDefinition = replicationService.loadReplicationDefinition(replicationName); + return new ScriptReplicationDefinition(serviceRegistry, replicationService, this.getScope(), replicationDefinition); + } + + public ScriptReplicationDefinition[] loadReplicationDefinitions() + { + List definitions = replicationService.loadReplicationDefinitions(); + return toScriptReplicationDefinitions(definitions); + } + + public ScriptReplicationDefinition[] loadReplicationDefinitions(String targetName) + { + List definitions = replicationService.loadReplicationDefinitions(targetName); + return toScriptReplicationDefinitions(definitions); + } + + private ScriptReplicationDefinition[] toScriptReplicationDefinitions(List definitions) + { + ScriptReplicationDefinition[] scriptDefs = new ScriptReplicationDefinition[definitions.size()]; + for(int i=0; i