From a2bfafede51df16a4de9c0da057c808a954adddf Mon Sep 17 00:00:00 2001 From: tombaeyens Date: Wed, 13 Oct 2010 15:14:51 +0000 Subject: [PATCH] ACT-242 added getDeployedprocessDefinition to expose process definitions for introspection --- .../activiti/engine/RepositoryService.java | 5 ++- .../engine/impl/RepositoryServiceImpl.java | 6 +++ .../GetDeploymentProcessDefinitionCmd.java | 37 +++++++++++++++++++ .../db/ProcessDefinitionPersistenceTest.java | 35 ++++++++++++++++++ .../pvm/process/PvmProcessDefinition.java | 4 +- .../process/ReadOnlyProcessDefinition.java | 24 ++++++++++++ 6 files changed, 107 insertions(+), 4 deletions(-) create mode 100644 modules/activiti-engine/src/main/java/org/activiti/engine/impl/cmd/GetDeploymentProcessDefinitionCmd.java create mode 100644 modules/activiti-pvm/src/main/java/org/activiti/pvm/process/ReadOnlyProcessDefinition.java diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/RepositoryService.java b/modules/activiti-engine/src/main/java/org/activiti/engine/RepositoryService.java index 7514b846ff..784de98e17 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/RepositoryService.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/RepositoryService.java @@ -19,6 +19,7 @@ import java.util.List; import org.activiti.engine.repository.DeploymentBuilder; import org.activiti.engine.repository.DeploymentQuery; import org.activiti.engine.repository.ProcessDefinitionQuery; +import org.activiti.pvm.process.ReadOnlyProcessDefinition; /** Service providing access to the repository of process definitions and deployments. @@ -63,7 +64,9 @@ public interface RepositoryService { /** Query process definitions. */ ProcessDefinitionQuery createProcessDefinitionQuery(); + /** exposes a fully deployed process definition for introspection purposes. */ + ReadOnlyProcessDefinition getDeployedProcessDefinition(String processDefinitionId); + /** Query process definitions. */ DeploymentQuery createDeploymentQuery(); - } diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/RepositoryServiceImpl.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/RepositoryServiceImpl.java index 6b97bdf10d..a17c24d58c 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/RepositoryServiceImpl.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/RepositoryServiceImpl.java @@ -19,6 +19,7 @@ import java.util.List; import org.activiti.engine.RepositoryService; import org.activiti.engine.impl.cmd.DeleteDeploymentCmd; import org.activiti.engine.impl.cmd.DeployCmd; +import org.activiti.engine.impl.cmd.GetDeploymentProcessDefinitionCmd; import org.activiti.engine.impl.cmd.GetDeploymentResourceCmd; import org.activiti.engine.impl.cmd.GetDeploymentResourceNamesCmd; import org.activiti.engine.impl.repository.DeploymentBuilderImpl; @@ -26,6 +27,7 @@ import org.activiti.engine.repository.Deployment; import org.activiti.engine.repository.DeploymentBuilder; import org.activiti.engine.repository.DeploymentQuery; import org.activiti.engine.repository.ProcessDefinitionQuery; +import org.activiti.pvm.process.ReadOnlyProcessDefinition; /** @@ -65,5 +67,9 @@ public class RepositoryServiceImpl extends ServiceImpl implements RepositoryServ public DeploymentQuery createDeploymentQuery() { return new DeploymentQueryImpl(commandExecutor); } + + public ReadOnlyProcessDefinition getDeployedProcessDefinition(String processDefinitionId) { + return commandExecutor.execute(new GetDeploymentProcessDefinitionCmd(processDefinitionId)); + } } diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/cmd/GetDeploymentProcessDefinitionCmd.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/cmd/GetDeploymentProcessDefinitionCmd.java new file mode 100644 index 0000000000..b70f3b1eaa --- /dev/null +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/cmd/GetDeploymentProcessDefinitionCmd.java @@ -0,0 +1,37 @@ +/* Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.activiti.engine.impl.cmd; + +import org.activiti.engine.impl.cfg.RepositorySession; +import org.activiti.engine.impl.interceptor.Command; +import org.activiti.engine.impl.interceptor.CommandContext; +import org.activiti.pvm.process.ReadOnlyProcessDefinition; + + +/** + * @author Tom Baeyens + */ +public class GetDeploymentProcessDefinitionCmd implements Command { + + protected String processDefinitionId; + + public GetDeploymentProcessDefinitionCmd(String processDefinitionId) { + this.processDefinitionId = processDefinitionId; + } + + public ReadOnlyProcessDefinition execute(CommandContext commandContext) { + RepositorySession repositorySession = commandContext.getRepositorySession(); + return repositorySession.findDeployedProcessDefinitionById(processDefinitionId); + } +} diff --git a/modules/activiti-engine/src/test/java/org/activiti/engine/test/db/ProcessDefinitionPersistenceTest.java b/modules/activiti-engine/src/test/java/org/activiti/engine/test/db/ProcessDefinitionPersistenceTest.java index c30fadf20b..1aaec62738 100644 --- a/modules/activiti-engine/src/test/java/org/activiti/engine/test/db/ProcessDefinitionPersistenceTest.java +++ b/modules/activiti-engine/src/test/java/org/activiti/engine/test/db/ProcessDefinitionPersistenceTest.java @@ -13,10 +13,15 @@ package org.activiti.engine.test.db; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; import org.activiti.engine.impl.test.ActivitiInternalTestCase; import org.activiti.engine.repository.ProcessDefinition; +import org.activiti.pvm.process.PvmActivity; +import org.activiti.pvm.process.PvmTransition; +import org.activiti.pvm.process.ReadOnlyProcessDefinition; /** @@ -40,4 +45,34 @@ public class ProcessDefinitionPersistenceTest extends ActivitiInternalTestCase { repositoryService.deleteDeployment(deploymentId); } + + public void testProcessDefinitionIntrospection() { + String deploymentId = repositoryService + .createDeployment() + .addClasspathResource("org/activiti/engine/test/db/processOne.bpmn20.xml") + .deploy() + .getId(); + + ReadOnlyProcessDefinition processDefinition = repositoryService.getDeployedProcessDefinition("processOne:1"); + + assertEquals("processOne:1", processDefinition.getId()); + + PvmActivity start = processDefinition.findActivity("start"); + assertNotNull(start); + assertEquals("start", start.getId()); + assertEquals(Collections.EMPTY_LIST, start.getActivities()); + List outgoingTransitions = start.getOutgoingTransitions(); + assertEquals(1, outgoingTransitions.size()); + + PvmActivity end = processDefinition.findActivity("end"); + assertNotNull(end); + assertEquals("end", end.getId()); + + PvmTransition transition = outgoingTransitions.get(0); + assertEquals("flow1", transition.getId()); + assertSame(start, transition.getSource()); + assertSame(end, transition.getDestination()); + + repositoryService.deleteDeployment(deploymentId); + } } diff --git a/modules/activiti-pvm/src/main/java/org/activiti/pvm/process/PvmProcessDefinition.java b/modules/activiti-pvm/src/main/java/org/activiti/pvm/process/PvmProcessDefinition.java index be2645bbe2..7e4f34cd50 100644 --- a/modules/activiti-pvm/src/main/java/org/activiti/pvm/process/PvmProcessDefinition.java +++ b/modules/activiti-pvm/src/main/java/org/activiti/pvm/process/PvmProcessDefinition.java @@ -19,10 +19,8 @@ import org.activiti.pvm.runtime.PvmProcessInstance; /** * @author Tom Baeyens */ -public interface PvmProcessDefinition extends PvmScope { +public interface PvmProcessDefinition extends ReadOnlyProcessDefinition { PvmProcessInstance createProcessInstance(); - PvmActivity getInitial(); - } diff --git a/modules/activiti-pvm/src/main/java/org/activiti/pvm/process/ReadOnlyProcessDefinition.java b/modules/activiti-pvm/src/main/java/org/activiti/pvm/process/ReadOnlyProcessDefinition.java new file mode 100644 index 0000000000..a69a2a2c36 --- /dev/null +++ b/modules/activiti-pvm/src/main/java/org/activiti/pvm/process/ReadOnlyProcessDefinition.java @@ -0,0 +1,24 @@ +/* Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.activiti.pvm.process; + + +/** + * @author Tom Baeyens + */ +public interface ReadOnlyProcessDefinition extends PvmScope { + + PvmActivity getInitial(); + +} -- GitLab