[jbpm-commits] JBoss JBPM SVN: r6470 - jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity.
do-not-reply at jboss.org
do-not-reply at jboss.org
Wed Jul 7 04:37:01 EDT 2010
Author: rebody
Date: 2010-07-07 04:37:01 -0400 (Wed, 07 Jul 2010)
New Revision: 6470
Modified:
jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessActivity.java
Log:
if cannot find sub process definition, throw a meanful exception, not a meanless NullPointException.
Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessActivity.java 2010-07-07 01:56:58 UTC (rev 6469)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/SubProcessActivity.java 2010-07-07 08:37:01 UTC (rev 6470)
@@ -1,202 +1,211 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This 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 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software 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 this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jbpm.jpdl.internal.activity;
-
-import java.util.List;
-import java.util.Map;
-
-import javax.el.PropertyNotFoundException;
-
-import org.jbpm.api.JbpmException;
-import org.jbpm.api.activity.ActivityExecution;
-import org.jbpm.api.model.Activity;
-import org.jbpm.pvm.internal.client.ClientProcessDefinition;
-import org.jbpm.pvm.internal.el.Expression;
-import org.jbpm.pvm.internal.env.Context;
-import org.jbpm.pvm.internal.env.EnvironmentImpl;
-import org.jbpm.pvm.internal.env.ExecutionContext;
-import org.jbpm.pvm.internal.model.ExecutionImpl;
-import org.jbpm.pvm.internal.session.RepositorySession;
-import org.jbpm.pvm.internal.task.SwimlaneImpl;
-
-/**
- * @author Tom Baeyens
- */
-public class SubProcessActivity extends JpdlExternalActivity {
-
- private static final long serialVersionUID = 1L;
-
- protected String subProcessKey;
- protected String subProcessId;
- protected Map<String, String> swimlaneMappings;
-
- protected List<SubProcessInParameterImpl> inParameters;
- protected List<SubProcessOutParameterImpl> outParameters;
-
- protected Expression outcomeExpression;
- protected Map<Object, String> outcomeVariableMappings;
-
- public void execute(ActivityExecution execution) {
- ExecutionImpl executionImpl = (ExecutionImpl) execution;
-
- RepositorySession repositorySession = EnvironmentImpl.getFromCurrent(RepositorySession.class);
-
- ClientProcessDefinition processDefinition = null;
-
- if (subProcessId!=null) {
- Expression subProcessKeyExpression = Expression.create(subProcessId, Expression.LANGUAGE_UEL_VALUE);
- String subProcessIdEval = (String) subProcessKeyExpression.evaluate(execution);
- processDefinition = repositorySession.findProcessDefinitionById(subProcessIdEval);
- } else {
- String subProcessKeyEval = null;
- try {
- Expression subProcessKeyExpression = Expression.create(subProcessKey, Expression.LANGUAGE_UEL_VALUE);
- subProcessKeyEval = (String) subProcessKeyExpression.evaluate(execution);
- if (subProcessKeyEval == null) {
- throw new JbpmException("Subprocess key '" + subProcessKey +"' resolved to null.");
- }
- } catch (PropertyNotFoundException e) {
- throw new JbpmException("Subprocess key '" + subProcessKey +"' could not be resolved.");
- }
-
- processDefinition = repositorySession.findProcessDefinitionByKey(subProcessKeyEval);
- if (processDefinition == null) {
- throw new JbpmException("Subprocess '" + subProcessKeyEval + "' could not be found.");
- }
-
- }
-
- ExecutionImpl subProcessInstance = (ExecutionImpl) processDefinition.createProcessInstance(null, execution);
-
- for (String swimlaneName: swimlaneMappings.keySet()) {
- String subSwimlaneName = swimlaneMappings.get(swimlaneName);
- SwimlaneImpl subSwimlane = subProcessInstance.createSwimlane(subSwimlaneName);
- SwimlaneImpl swimlane = executionImpl.getSwimlane(swimlaneName);
- if (swimlane!=null) {
- subSwimlane.initialize(swimlane);
- }
- }
-
- for (SubProcessInParameterImpl inParameter: inParameters) {
- inParameter.produce(executionImpl, subProcessInstance);
- }
-
- executionImpl.historyActivityStart();
-
- subProcessInstance.start();
-
- execution.waitForSignal();
- }
-
- public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) throws Exception {
- signal((ExecutionImpl)execution, signalName, parameters);
- }
-
- public void signal(ExecutionImpl execution, String signalName, Map<String, ?> parameters) throws Exception {
- ExecutionImpl subProcessInstance = execution.getSubProcessInstance();
-
- String transitionName = null;
-
- ExecutionContext originalExecutionContext = null;
- ExecutionContext subProcessExecutionContext = null;
- EnvironmentImpl environment = EnvironmentImpl.getCurrent();
- if (environment!=null) {
- originalExecutionContext = (ExecutionContext) environment.removeContext(Context.CONTEXTNAME_EXECUTION);
- subProcessExecutionContext = new ExecutionContext(subProcessInstance);
- environment.setContext(subProcessExecutionContext);
- }
-
- try {
- subProcessInstance.setSuperProcessExecution(null);
- execution.setSubProcessInstance(null);
-
-
- for (SubProcessOutParameterImpl outParameter: outParameters) {
- outParameter.consume(execution, subProcessInstance);
- }
-
- Activity activity = execution.getActivity();
- String subProcessActivityName = subProcessInstance.getActivityName();
-
- if (outcomeExpression!=null) {
- Object value = outcomeExpression.evaluate(execution);
- // if the value is a String and matches the name of an outgoing transition
- if ( (value instanceof String)
- && (activity.hasOutgoingTransition(((String) value)))
- ) {
- // then take that one
- transitionName = (String) value;
- } else {
- // else see if there is a value mapping
- transitionName = outcomeVariableMappings.get(value);
- }
-
- } else if (activity.hasOutgoingTransition(subProcessActivityName)) {
- transitionName = subProcessActivityName;
- }
-
- } finally {
- if (subProcessExecutionContext!=null) {
- environment.removeContext(subProcessExecutionContext);
- }
- if (originalExecutionContext!=null) {
- environment.setContext(originalExecutionContext);
- }
- }
-
- execution.historyActivityEnd();
-
- if (transitionName!=null) {
- execution.take(transitionName);
- } else {
- execution.takeDefaultTransition();
- }
- }
-
- public void setSwimlaneMappings(Map<String, String> swimlaneMappings) {
- this.swimlaneMappings = swimlaneMappings;
- }
- public void setOutcomeVariableMappings(Map<Object, String> outcomeVariableMappings) {
- this.outcomeVariableMappings = outcomeVariableMappings;
- }
- public void setSubProcessKey(String subProcessKey) {
- this.subProcessKey = subProcessKey;
- }
- public void setSubProcessId(String subProcessId) {
- this.subProcessId = subProcessId;
- }
- public void setOutcomeExpression(Expression outcomeExpression) {
- this.outcomeExpression = outcomeExpression;
- }
- public List<SubProcessInParameterImpl> getInParameters() {
- return inParameters;
- }
- public void setInParameters(List<SubProcessInParameterImpl> inParameters) {
- this.inParameters = inParameters;
- }
- public List<SubProcessOutParameterImpl> getOutParameters() {
- return outParameters;
- }
- public void setOutParameters(List<SubProcessOutParameterImpl> outParameters) {
- this.outParameters = outParameters;
- }
-}
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This 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 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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 this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.jpdl.internal.activity;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.el.PropertyNotFoundException;
+
+import org.jbpm.api.JbpmException;
+import org.jbpm.api.activity.ActivityExecution;
+import org.jbpm.api.model.Activity;
+import org.jbpm.pvm.internal.client.ClientProcessDefinition;
+import org.jbpm.pvm.internal.el.Expression;
+import org.jbpm.pvm.internal.env.Context;
+import org.jbpm.pvm.internal.env.EnvironmentImpl;
+import org.jbpm.pvm.internal.env.ExecutionContext;
+import org.jbpm.pvm.internal.model.ExecutionImpl;
+import org.jbpm.pvm.internal.session.RepositorySession;
+import org.jbpm.pvm.internal.task.SwimlaneImpl;
+
+/**
+ * @author Tom Baeyens
+ */
+public class SubProcessActivity extends JpdlExternalActivity {
+
+ private static final long serialVersionUID = 1L;
+
+ protected String subProcessKey;
+ protected String subProcessId;
+ protected Map<String, String> swimlaneMappings;
+
+ protected List<SubProcessInParameterImpl> inParameters;
+ protected List<SubProcessOutParameterImpl> outParameters;
+
+ protected Expression outcomeExpression;
+ protected Map<Object, String> outcomeVariableMappings;
+
+ public void execute(ActivityExecution execution) {
+ ExecutionImpl executionImpl = (ExecutionImpl) execution;
+
+ RepositorySession repositorySession = EnvironmentImpl.getFromCurrent(RepositorySession.class);
+
+ ClientProcessDefinition processDefinition = null;
+
+ if (subProcessId != null) {
+ Expression subProcessKeyExpression = Expression.create(subProcessId, Expression.LANGUAGE_UEL_VALUE);
+ String subProcessIdEval = (String) subProcessKeyExpression.evaluate(execution);
+ processDefinition = repositorySession.findProcessDefinitionById(subProcessIdEval);
+
+ if (processDefinition == null) {
+ throw new JbpmException("cannot find process definition by id: ["
+ + subProcessId + "(" + subProcessIdEval + ")" + "]");
+ }
+ } else {
+ String subProcessKeyEval = null;
+ try {
+ Expression subProcessKeyExpression = Expression.create(subProcessKey, Expression.LANGUAGE_UEL_VALUE);
+ subProcessKeyEval = (String) subProcessKeyExpression.evaluate(execution);
+ if (subProcessKeyEval == null) {
+ throw new JbpmException("Subprocess key '" + subProcessKey +"' resolved to null.");
+ }
+ } catch (PropertyNotFoundException e) {
+ throw new JbpmException("Subprocess key '" + subProcessKey +"' could not be resolved.");
+ }
+
+ processDefinition = repositorySession.findProcessDefinitionByKey(subProcessKeyEval);
+ if (processDefinition == null) {
+ throw new JbpmException("Subprocess '" + subProcessKeyEval + "' could not be found.");
+ }
+
+ if (processDefinition == null) {
+ throw new JbpmException("cannot find process definition by key: ["
+ + subProcessKey + "(" + subProcessKeyEval + ")" + "]");
+ }
+ }
+
+ ExecutionImpl subProcessInstance = (ExecutionImpl) processDefinition.createProcessInstance(null, execution);
+
+ for (String swimlaneName: swimlaneMappings.keySet()) {
+ String subSwimlaneName = swimlaneMappings.get(swimlaneName);
+ SwimlaneImpl subSwimlane = subProcessInstance.createSwimlane(subSwimlaneName);
+ SwimlaneImpl swimlane = executionImpl.getSwimlane(swimlaneName);
+ if (swimlane!=null) {
+ subSwimlane.initialize(swimlane);
+ }
+ }
+
+ for (SubProcessInParameterImpl inParameter: inParameters) {
+ inParameter.produce(executionImpl, subProcessInstance);
+ }
+
+ executionImpl.historyActivityStart();
+
+ subProcessInstance.start();
+
+ execution.waitForSignal();
+ }
+
+ public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) throws Exception {
+ signal((ExecutionImpl)execution, signalName, parameters);
+ }
+
+ public void signal(ExecutionImpl execution, String signalName, Map<String, ?> parameters) throws Exception {
+ ExecutionImpl subProcessInstance = execution.getSubProcessInstance();
+
+ String transitionName = null;
+
+ ExecutionContext originalExecutionContext = null;
+ ExecutionContext subProcessExecutionContext = null;
+ EnvironmentImpl environment = EnvironmentImpl.getCurrent();
+ if (environment!=null) {
+ originalExecutionContext = (ExecutionContext) environment.removeContext(Context.CONTEXTNAME_EXECUTION);
+ subProcessExecutionContext = new ExecutionContext(subProcessInstance);
+ environment.setContext(subProcessExecutionContext);
+ }
+
+ try {
+ subProcessInstance.setSuperProcessExecution(null);
+ execution.setSubProcessInstance(null);
+
+
+ for (SubProcessOutParameterImpl outParameter: outParameters) {
+ outParameter.consume(execution, subProcessInstance);
+ }
+
+ Activity activity = execution.getActivity();
+ String subProcessActivityName = subProcessInstance.getActivityName();
+
+ if (outcomeExpression!=null) {
+ Object value = outcomeExpression.evaluate(execution);
+ // if the value is a String and matches the name of an outgoing transition
+ if ( (value instanceof String)
+ && (activity.hasOutgoingTransition(((String) value)))
+ ) {
+ // then take that one
+ transitionName = (String) value;
+ } else {
+ // else see if there is a value mapping
+ transitionName = outcomeVariableMappings.get(value);
+ }
+
+ } else if (activity.hasOutgoingTransition(subProcessActivityName)) {
+ transitionName = subProcessActivityName;
+ }
+
+ } finally {
+ if (subProcessExecutionContext!=null) {
+ environment.removeContext(subProcessExecutionContext);
+ }
+ if (originalExecutionContext!=null) {
+ environment.setContext(originalExecutionContext);
+ }
+ }
+
+ execution.historyActivityEnd();
+
+ if (transitionName!=null) {
+ execution.take(transitionName);
+ } else {
+ execution.takeDefaultTransition();
+ }
+ }
+
+ public void setSwimlaneMappings(Map<String, String> swimlaneMappings) {
+ this.swimlaneMappings = swimlaneMappings;
+ }
+ public void setOutcomeVariableMappings(Map<Object, String> outcomeVariableMappings) {
+ this.outcomeVariableMappings = outcomeVariableMappings;
+ }
+ public void setSubProcessKey(String subProcessKey) {
+ this.subProcessKey = subProcessKey;
+ }
+ public void setSubProcessId(String subProcessId) {
+ this.subProcessId = subProcessId;
+ }
+ public void setOutcomeExpression(Expression outcomeExpression) {
+ this.outcomeExpression = outcomeExpression;
+ }
+ public List<SubProcessInParameterImpl> getInParameters() {
+ return inParameters;
+ }
+ public void setInParameters(List<SubProcessInParameterImpl> inParameters) {
+ this.inParameters = inParameters;
+ }
+ public List<SubProcessOutParameterImpl> getOutParameters() {
+ return outParameters;
+ }
+ public void setOutParameters(List<SubProcessOutParameterImpl> outParameters) {
+ this.outParameters = outParameters;
+ }
+}
More information about the jbpm-commits
mailing list