diff --git a/modules/activiti-cycle/src/main/java/org/activiti/cycle/RepositoryArtifactLink.java b/modules/activiti-cycle/src/main/java/org/activiti/cycle/RepositoryArtifactLink.java index 6b1e319d7c7c1e91f98bfb70f4fceba6da990114..63c57e432119ac0751cf05f1e5b8e3c150f4e071 100644 --- a/modules/activiti-cycle/src/main/java/org/activiti/cycle/RepositoryArtifactLink.java +++ b/modules/activiti-cycle/src/main/java/org/activiti/cycle/RepositoryArtifactLink.java @@ -1,9 +1,9 @@ package org.activiti.cycle; -import org.activiti.cycle.impl.db.entity.CycleLink; +import org.activiti.cycle.impl.db.entity.RepositoryArtifactLinkImpl; /** - * Object given back by the {@link CycleService} for a {@link CycleLink} where + * Object given back by the {@link CycleService} for a {@link RepositoryArtifactLinkImpl} where * the {@link RepositoryArtifact}s are already resolved. * * @author polenz diff --git a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/CycleServiceImpl.java b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/CycleServiceImpl.java index bf765e6af286e0b689deaeaa496bc782dc39c71c..d14fbf19cefa9561111462e6917348e780d75a47 100644 --- a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/CycleServiceImpl.java +++ b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/CycleServiceImpl.java @@ -28,7 +28,7 @@ import org.activiti.cycle.impl.connector.view.TagConnectorConfiguration; import org.activiti.cycle.impl.db.CycleConfigurationService; import org.activiti.cycle.impl.db.CycleDAO; import org.activiti.cycle.impl.db.entity.CycleArtifactTagEntity; -import org.activiti.cycle.impl.db.entity.CycleLink; +import org.activiti.cycle.impl.db.entity.RepositoryArtifactLinkImpl; import org.activiti.cycle.impl.db.impl.CycleConfigurationServiceImpl; import org.activiti.cycle.impl.db.impl.CycleDaoMyBatisImpl; import org.activiti.cycle.impl.plugin.PluginFinder; @@ -47,10 +47,8 @@ public class CycleServiceImpl implements CycleService { private List repositoryConnectors; - /** - * TODO: Check if list roots can return an empty array - */ - private static final File fsBaseDir = File.listRoots()[0]; + // private static ThreadLocal currentCycleService = new + // ThreadLocal(); public CycleServiceImpl(List repositoryConnectors) { @@ -59,6 +57,10 @@ public class CycleServiceImpl implements CycleService { this.repositoryConnectors = repositoryConnectors; + for (RepositoryConnector repositoryConnector : repositoryConnectors) { + repositoryConnector.getConfiguration().setCycleService(this); + } + // add tag connector hard coded for the moment this.repositoryConnectors.add(new TagConnectorConfiguration(this).createConnector()); } @@ -116,7 +118,7 @@ public class CycleServiceImpl implements CycleService { ConfigurationContainer configuration = new ConfigurationContainer(currentUserId); configuration.addRepositoryConnectorConfiguration(new DemoConnectorConfiguration("demo")); configuration.addRepositoryConnectorConfiguration(new SignavioConnectorConfiguration("signavio", "http://localhost:8080/activiti-modeler/")); - configuration.addRepositoryConnectorConfiguration(new FileSystemConnectorConfiguration("files", fsBaseDir)); + configuration.addRepositoryConnectorConfiguration(new FileSystemConnectorConfiguration("files", File.listRoots()[0])); return configuration; } @@ -250,10 +252,10 @@ public class CycleServiceImpl implements CycleService { // RepositoryArtifactLink specific methods public void addArtifactLink(RepositoryArtifactLink repositoryArtifactLink) { - if (repositoryArtifactLink instanceof CycleLink) { - cycleDAO.insertCycleLink((CycleLink) repositoryArtifactLink); + if (repositoryArtifactLink instanceof RepositoryArtifactLinkImpl) { + cycleDAO.insertCycleLink((RepositoryArtifactLinkImpl) repositoryArtifactLink); } else { - CycleLink cycleLink = new CycleLink(); + RepositoryArtifactLinkImpl cycleLink = new RepositoryArtifactLinkImpl(); cycleLink.setId(repositoryArtifactLink.getId()); @@ -282,8 +284,8 @@ public class CycleServiceImpl implements CycleService { public List getArtifactLinks(String sourceConnectorId, String sourceArtifactId) { List artifactLinks = new ArrayList(); - List linkResultList = cycleDAO.getOutgoingCycleLinks(sourceConnectorId, sourceArtifactId); - for (CycleLink entity : linkResultList) { + List linkResultList = cycleDAO.getOutgoingCycleLinks(sourceConnectorId, sourceArtifactId); + for (RepositoryArtifactLinkImpl entity : linkResultList) { entity.resolveArtifacts(this); artifactLinks.add(entity); } diff --git a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/conf/RepositoryConnectorConfiguration.java b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/conf/RepositoryConnectorConfiguration.java index b464e6f2e50975f4810af188174cee19593e24bd..bdb1ad1072557f1d9b394f6270118bb5c57e3e73 100644 --- a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/conf/RepositoryConnectorConfiguration.java +++ b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/conf/RepositoryConnectorConfiguration.java @@ -7,6 +7,7 @@ import java.util.Map; import java.util.Properties; import org.activiti.cycle.ArtifactType; +import org.activiti.cycle.CycleService; import org.activiti.cycle.RepositoryConnector; import org.activiti.cycle.RepositoryException; import org.activiti.cycle.impl.plugin.ActivitiCyclePluginDefinition; @@ -39,13 +40,17 @@ public abstract class RepositoryConnectorConfiguration { */ private String configurationScope; - private static Map, List> registeredArtifactTypesPerConnector = new HashMap, List>(); + private static Map, List> registeredArtifactTypesPerConnector = new HashMap, List>(); + + private CycleService cycleService; /** * TODO: Decide if we want to keep that here + * + * @param cycleService */ public abstract RepositoryConnector createConnector(); - + public static void addPluginDefinition(ActivitiCyclePluginDefinition definition) { List registeredArtifactTypes = new ArrayList(); definition.addArtifactTypes(registeredArtifactTypes); @@ -154,6 +159,16 @@ public abstract class RepositoryConnectorConfiguration { this.loginHelp = loginHelp; } + + public CycleService getCycleService() { + return cycleService; + } + + + public void setCycleService(CycleService cycleService) { + this.cycleService = cycleService; + } + // @Override // public String toString() { // return "RepositoryConnectorConfiguration '" + diff --git a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/SignavioConnector.java b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/SignavioConnector.java index 4c865bb2c32b348d9f8e34124264375ee5530b84..89b83d04defa2eb1d73e6a29f20b8d7210ab6775 100644 --- a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/SignavioConnector.java +++ b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/SignavioConnector.java @@ -14,6 +14,7 @@ package org.activiti.cycle.impl.connector.signavio; import java.io.IOException; import java.util.ArrayList; +import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; @@ -480,7 +481,6 @@ public class SignavioConnector extends AbstractRepositoryConnector"); modelForm.add("type", "BPMN 2.0"); + // Signavio generates a new id for POSTed models, so we don't have to set + // this ID ourself. + // But anyway, then we don't know the id and cannot load the artifact down + // to return it correctly, so we generate one ourself + String id = UUID.randomUUID().toString(); + modelForm.add("id", id); + // modelForm.add("views", new JSONArray().toString()); Representation modelRep = modelForm.getWebRepresentation(); @@ -506,7 +513,7 @@ public class SignavioConnector extends AbstractRepositoryConnector parameters) throws Exception { String targetFolderId = (String) getParameter(parameters, PARAM_TARGET_FOLDER, true, null, String.class); String targetName = (String) getParameter(parameters, PARAM_TARGET_NAME, false, artifact.getMetadata().getName(), String.class); - String comment = (String) getParameter(parameters, PARAM_COMMENT, false, null, String.class); + String comment = (String) getParameter(parameters, PARAM_COMMENT_NAME, false, null, String.class); RepositoryConnector targetConnector = (RepositoryConnector) getParameter(parameters, PARAM_TARGET_CONNECTOR, true, null, RepositoryConnector.class); + + boolean createLink = (Boolean) getParameter(parameters, CREATE_LINK_NAME, true, Boolean.TRUE, Boolean.class); String contentAsString = connector.getContent(artifact.getNodeId(), getContentRepresentationIdToUse()).asString(); Content content = new Content(); content.setValue(contentAsString); - targetConnector.createArtifact(targetFolderId, targetName, artifact.getArtifactType().getId(), content); + RepositoryArtifact targetArtifact = targetConnector.createArtifact(targetFolderId, targetName, artifact.getArtifactType().getId(), content); // TODO: Think about that more, does it make sense like this? targetConnector.commitPendingChanges(comment); + + if (createLink) { + RepositoryArtifactLink link = new RepositoryArtifactLinkImpl(); + link.setSourceArtifact(artifact); + link.setTargetArtifact(targetArtifact); + link.setComment(comment); + link.setLinkType(RepositoryArtifactLinkImpl.TYPE_COPY); + connector.getConfiguration().getCycleService().addArtifactLink(link); + } } public abstract String getContentRepresentationIdToUse(); diff --git a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/action/CreateTechnicalBpmnXmlAction.java b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/action/CreateTechnicalBpmnXmlAction.java index ab1d29c2890d070c6e5ac93e5ea5d49242dec059..24468e653c3d8c1f523e28f92e4a9bf93615471a 100644 --- a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/action/CreateTechnicalBpmnXmlAction.java +++ b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/action/CreateTechnicalBpmnXmlAction.java @@ -6,6 +6,7 @@ import java.util.Map; import org.activiti.cycle.Content; import org.activiti.cycle.RepositoryArtifact; +import org.activiti.cycle.RepositoryArtifactLink; import org.activiti.cycle.RepositoryConnector; import org.activiti.cycle.RepositoryException; import org.activiti.cycle.RepositoryFolder; @@ -13,6 +14,7 @@ import org.activiti.cycle.impl.ParameterizedHtmlFormTemplateAction; import org.activiti.cycle.impl.connector.fs.FileSystemPluginDefinition; import org.activiti.cycle.impl.connector.signavio.SignavioConnector; import org.activiti.cycle.impl.connector.signavio.SignavioPluginDefinition; +import org.activiti.cycle.impl.db.entity.RepositoryArtifactLinkImpl; import org.activiti.cycle.impl.transform.JsonTransformation; import org.activiti.cycle.impl.transform.signavio.AdjustShapeNamesTransformation; import org.activiti.cycle.impl.transform.signavio.BpmnPoolExtraction; @@ -37,6 +39,7 @@ public class CreateTechnicalBpmnXmlAction extends ParameterizedHtmlFormTemplateA public static final String PARAM_TARGET_CONNECTOR = "targetConnectorId"; public static final String PARAM_TARGET_NAME = "targetName"; public static final String PARAM_COMMENT = "comment"; + public static final String CREATE_LINK_NAME = "createLink"; /** * Where do we get the transformations from? How are they registered? @@ -75,14 +78,35 @@ public class CreateTechnicalBpmnXmlAction extends ParameterizedHtmlFormTemplateA String targetName = (String) getParameter(parameters, PARAM_TARGET_NAME, false, getProcessName(artifact), String.class); String comment = (String) getParameter(parameters, PARAM_COMMENT, false, null, String.class); RepositoryConnector targetConnector = (RepositoryConnector) getParameter(parameters, PARAM_TARGET_CONNECTOR, true, null, RepositoryConnector.class); - - String sourceJson = getBpmn20Json((SignavioConnector) connector, artifact); - String transformedJson = applyJsonTransformations(sourceJson); - String bpmnXml = transformToBpmn20((SignavioConnector) connector, transformedJson); - createTargetArtifact(targetConnector, targetFolderId, targetName + ".bpmn20.xml", bpmnXml, FileSystemPluginDefinition.ARTIFACT_TYPE_BPMN_20_XML); + boolean createLink = (Boolean) getParameter(parameters, CREATE_LINK_NAME, true, Boolean.TRUE, Boolean.class); + + RepositoryArtifact targetArtifact = createArtifact(connector, artifact, targetFolderId, targetName, targetConnector); // TODO: Think about that more, does it make sense like this? targetConnector.commitPendingChanges(comment); + + if (createLink) { + RepositoryArtifactLink link = new RepositoryArtifactLinkImpl(); + link.setSourceArtifact(artifact); + link.setTargetArtifact(targetArtifact); + link.setComment(comment); + link.setLinkType(getLinkType()); + connector.getConfiguration().getCycleService().addArtifactLink(link); + } + } + + public String getLinkType() { + return RepositoryArtifactLinkImpl.TYPE_IMPLEMENTS; + } + + public RepositoryArtifact createArtifact(RepositoryConnector connector, RepositoryArtifact artifact, String targetFolderId, String targetName, + RepositoryConnector targetConnector) throws Exception { + String sourceJson = getBpmn20Json((SignavioConnector) connector, artifact); + String transformedJson = applyJsonTransformations(sourceJson); + String bpmnXml = transformToBpmn20((SignavioConnector) connector, transformedJson); + RepositoryArtifact targetArtifact = createTargetArtifact(targetConnector, targetFolderId, targetName + ".bpmn20.xml", bpmnXml, + FileSystemPluginDefinition.ARTIFACT_TYPE_BPMN_20_XML); + return targetArtifact; } protected String getBpmn20Json(RepositoryConnector connector, RepositoryArtifact artifact) { @@ -109,10 +133,11 @@ public class CreateTechnicalBpmnXmlAction extends ParameterizedHtmlFormTemplateA return bpmnXml; } - public void createTargetArtifact(RepositoryConnector targetConnector, String targetFolderId, String artifactId, String bpmnXml, String artifactTypeId) { + public RepositoryArtifact createTargetArtifact(RepositoryConnector targetConnector, String targetFolderId, String artifactId, String bpmnXml, + String artifactTypeId) { Content content = new Content(); content.setValue(bpmnXml); - targetConnector.createArtifact(targetFolderId, artifactId, artifactTypeId, content); + return targetConnector.createArtifact(targetFolderId, artifactId, artifactTypeId, content); } public String getProcessName(RepositoryArtifact artifact) { diff --git a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/action/ValidateActivitiDeployment.java b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/action/ValidateActivitiDeployment.java index 5874ce9537e987e896069e7e522a31c4e86fb784..6daa45b1efd5d97377dbe78cd2f94d0ea99d21cb 100644 --- a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/action/ValidateActivitiDeployment.java +++ b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/action/ValidateActivitiDeployment.java @@ -10,6 +10,7 @@ import org.activiti.engine.impl.ProcessEngineImpl; import org.activiti.engine.impl.bpmn.parser.BpmnParser; import org.activiti.engine.impl.cfg.ProcessEngineConfiguration; import org.activiti.engine.impl.el.ExpressionManager; +import org.activiti.engine.impl.repository.DeploymentEntity; public class ValidateActivitiDeployment extends CreateTechnicalBpmnXmlAction { @@ -38,8 +39,14 @@ public class ValidateActivitiDeployment extends CreateTechnicalBpmnXmlAction { String bpmnXml = transformToBpmn20((SignavioConnector) connector, transformedJson); BpmnParser bpmnParser = new BpmnParser(expressionManager); + + // Unfortunately the deployment id is requested while parsing, so we have to + // set a DeploymentEntity to avoid a NPE + DeploymentEntity deployment = new DeploymentEntity(); + deployment.setId("VALIDATION_DEPLOYMENT"); + // parse to validate - bpmnParser.createParse().sourceString(bpmnXml).name(artifact.getNodeId()).execute(); + bpmnParser.createParse().deployment(deployment).sourceString(bpmnXml).name(artifact.getNodeId()).execute(); // That's it, now we get an exception is the file is invalid } diff --git a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/db/CycleDAO.java b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/db/CycleDAO.java index 0116604ec26fd2607177b62e6deec4ec054a34b3..eeb0f6346dabca0555aa791b8d06b437f2f539be 100644 --- a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/db/CycleDAO.java +++ b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/db/CycleDAO.java @@ -4,18 +4,18 @@ import java.util.List; import org.activiti.cycle.impl.CycleTagContentImpl; import org.activiti.cycle.impl.db.entity.CycleArtifactTagEntity; -import org.activiti.cycle.impl.db.entity.CycleLink; +import org.activiti.cycle.impl.db.entity.RepositoryArtifactLinkImpl; public interface CycleDAO { - public List getOutgoingCycleLinks(String sourceConnectorId, String sourceArtifactId); - public List getIncomingCycleLinks(String targetConnectorId, String targetArtifactId); + public List getOutgoingCycleLinks(String sourceConnectorId, String sourceArtifactId); + public List getIncomingCycleLinks(String targetConnectorId, String targetArtifactId); // public CycleLink findCycleLinkById(String id); // public void updateCycleLink(CycleLink cycleLink); - public void insertCycleLink(CycleLink cycleLink); + public void insertCycleLink(RepositoryArtifactLinkImpl cycleLink); public void deleteCycleLink(String id); public List getTagsGroupedByName(); diff --git a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/db/entity/CycleLink.java b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/db/entity/RepositoryArtifactLinkImpl.java similarity index 90% rename from modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/db/entity/CycleLink.java rename to modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/db/entity/RepositoryArtifactLinkImpl.java index 6f393a0683edd820bd0d2427a231c49b23213ced..a69cf0e92af44d82d34f393925f575a1741ca7da 100644 --- a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/db/entity/CycleLink.java +++ b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/db/entity/RepositoryArtifactLinkImpl.java @@ -14,15 +14,16 @@ import org.activiti.engine.impl.db.PersistentObject; * * @author ruecker, polenz */ -public class CycleLink implements PersistentObject, RepositoryArtifactLink { +public class RepositoryArtifactLinkImpl implements PersistentObject, RepositoryArtifactLink { /** * TODO: Add own mini repository for types incling names for forward and * reverse direction (like "is implemented by" in this case) */ - public static String TYPE_IMPLEMENTS = "implements"; - public static String TYPE_REFINES = "refines"; - public static String TYPE_UNSPECIFIED = "unspecified link"; + public static final String TYPE_IMPLEMENTS = "implements"; + public static final String TYPE_REFINES = "refines"; + public static final String TYPE_UNSPECIFIED = "unspecified link"; + public static final String TYPE_COPY = "copy"; /** * artificial id used as primary key to identify this link diff --git a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/db/impl/CycleConfigurationServiceImpl.java b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/db/impl/CycleConfigurationServiceImpl.java index ecb447a1884ec52d7cc118ca4e2d4fa7fc7e9ae1..211103f05a25baa0dbb804ea03678a5895711105 100644 --- a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/db/impl/CycleConfigurationServiceImpl.java +++ b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/db/impl/CycleConfigurationServiceImpl.java @@ -9,7 +9,6 @@ import org.apache.ibatis.session.SqlSessionFactory; import com.thoughtworks.xstream.XStream; public class CycleConfigurationServiceImpl extends AbstractCycleDaoMyBatisImpl implements CycleConfigurationService { - private XStream xStream = new XStream(); diff --git a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/db/impl/CycleDaoMyBatisImpl.java b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/db/impl/CycleDaoMyBatisImpl.java index 2ad1cad0c5a355aa80e014c52bf8da7e8db39975..1bdc2a4d5b6cf805aca5c4ed74d02b152050e617 100644 --- a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/db/impl/CycleDaoMyBatisImpl.java +++ b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/db/impl/CycleDaoMyBatisImpl.java @@ -7,46 +7,46 @@ import java.util.List; import org.activiti.cycle.impl.CycleTagContentImpl; import org.activiti.cycle.impl.db.CycleDAO; import org.activiti.cycle.impl.db.entity.CycleArtifactTagEntity; -import org.activiti.cycle.impl.db.entity.CycleLink; +import org.activiti.cycle.impl.db.entity.RepositoryArtifactLinkImpl; import org.apache.ibatis.session.SqlSession; public class CycleDaoMyBatisImpl extends AbstractCycleDaoMyBatisImpl implements CycleDAO { @SuppressWarnings("unchecked") - public List getOutgoingCycleLinks(String sourceConnectorId, String sourceArtifactId) { + public List getOutgoingCycleLinks(String sourceConnectorId, String sourceArtifactId) { SqlSession session = openSession(); try { HashMap parameters = new HashMap(); parameters.put("connectorId", sourceConnectorId); parameters.put("artifactId", sourceArtifactId); - List linkResultList = session.selectList("org.activiti.cycle.impl.db.entity.CycleLink.selectArtifactLinkForSourceArtifact", parameters); + List linkResultList = session.selectList("org.activiti.cycle.impl.db.entity.CycleLink.selectArtifactLinkForSourceArtifact", parameters); if (linkResultList != null) { return linkResultList; } - return new ArrayList(); + return new ArrayList(); } finally { session.close(); } } @SuppressWarnings("unchecked") - public List getIncomingCycleLinks(String targetConnectorId, String targetArtifactId) { + public List getIncomingCycleLinks(String targetConnectorId, String targetArtifactId) { SqlSession session = openSession(); try { HashMap parameters = new HashMap(); parameters.put("connectorId", targetConnectorId); parameters.put("artifactId", targetArtifactId); - List linkResultList = session.selectList("org.activiti.cycle.impl.db.entity.CycleLink.selectArtifactLinkForTargetArtifact", parameters); + List linkResultList = session.selectList("org.activiti.cycle.impl.db.entity.CycleLink.selectArtifactLinkForTargetArtifact", parameters); if (linkResultList != null) { return linkResultList; } - return new ArrayList(); + return new ArrayList(); } finally { session.close(); } } - public void insertCycleLink(CycleLink cycleLink) { + public void insertCycleLink(RepositoryArtifactLinkImpl cycleLink) { SqlSession session = openSession(); try { session.insert("org.activiti.cycle.impl.db.entity.CycleLink.insertCycleLink", cycleLink); diff --git a/modules/activiti-cycle/src/main/resources/org/activiti/cycle/impl/connector/signavio/action/CopySignavioModelAction.html b/modules/activiti-cycle/src/main/resources/org/activiti/cycle/impl/connector/signavio/action/CopySignavioModelAction.html index 5c61fc6dfb0d6bffe58609915b70b223f4cbac31..3742b777f382f089b594476d2f9f734547349f46 100644 --- a/modules/activiti-cycle/src/main/resources/org/activiti/cycle/impl/connector/signavio/action/CopySignavioModelAction.html +++ b/modules/activiti-cycle/src/main/resources/org/activiti/cycle/impl/connector/signavio/action/CopySignavioModelAction.html @@ -22,6 +22,16 @@ + + +
+ + + + +
+ +