use of org.activiti.engine.impl.pvm.process.ActivityImpl in project Activiti by Activiti.
the class TransactionParseHandler method executeParse.
protected void executeParse(BpmnParse bpmnParse, Transaction transaction) {
ActivityImpl activity = createActivityOnCurrentScope(bpmnParse, transaction, BpmnXMLConstants.ELEMENT_TRANSACTION);
activity.setAsync(transaction.isAsynchronous());
activity.setExclusive(!transaction.isNotExclusive());
activity.setScope(true);
activity.setActivityBehavior(bpmnParse.getActivityBehaviorFactory().createTransactionActivityBehavior(transaction));
bpmnParse.setCurrentScope(activity);
bpmnParse.processFlowElements(transaction.getFlowElements());
processArtifacts(bpmnParse, transaction.getArtifacts(), activity);
bpmnParse.removeCurrentScope();
if (transaction.getIoSpecification() != null) {
IOSpecification ioSpecification = createIOSpecification(bpmnParse, transaction.getIoSpecification());
activity.setIoSpecification(ioSpecification);
}
}
use of org.activiti.engine.impl.pvm.process.ActivityImpl in project Activiti by Activiti.
the class ErrorPropagation method executeCatch.
private static void executeCatch(String errorHandlerId, ActivityExecution execution, String errorCode) {
ProcessDefinitionImpl processDefinition = ((ExecutionEntity) execution).getProcessDefinition();
ActivityImpl errorHandler = processDefinition.findActivity(errorHandlerId);
if (errorHandler == null) {
throw new ActivitiException(errorHandlerId + " not found in process definition");
}
boolean matchingParentFound = false;
ActivityExecution leavingExecution = execution;
ActivityImpl currentActivity = (ActivityImpl) execution.getActivity();
ScopeImpl catchingScope = errorHandler.getParent();
if (catchingScope instanceof ActivityImpl) {
ActivityImpl catchingScopeActivity = (ActivityImpl) catchingScope;
if (!catchingScopeActivity.isScope()) {
// event subprocesses
catchingScope = catchingScopeActivity.getParent();
}
}
if (catchingScope instanceof PvmProcessDefinition) {
executeEventHandler(errorHandler, ((ExecutionEntity) execution).getProcessInstance(), errorCode);
} else {
if (currentActivity.getId().equals(catchingScope.getId())) {
matchingParentFound = true;
} else {
currentActivity = (ActivityImpl) currentActivity.getParent();
// and matches the activity the boundary event is defined on
while (!matchingParentFound && leavingExecution != null && currentActivity != null) {
if (!leavingExecution.isConcurrent() && currentActivity.getId().equals(catchingScope.getId())) {
matchingParentFound = true;
} else if (leavingExecution.isConcurrent()) {
leavingExecution = leavingExecution.getParent();
} else {
currentActivity = currentActivity.getParentActivity();
leavingExecution = leavingExecution.getParent();
}
}
// Follow parents up until matching scope can't be found anymore (needed to support for multi-instance)
while (leavingExecution != null && leavingExecution.getParent() != null && leavingExecution.getParent().getActivity() != null && leavingExecution.getParent().getActivity().getId().equals(catchingScope.getId())) {
leavingExecution = leavingExecution.getParent();
}
}
if (matchingParentFound && leavingExecution != null) {
executeEventHandler(errorHandler, leavingExecution, errorCode);
} else {
throw new ActivitiException("No matching parent execution for activity " + errorHandlerId + " found");
}
}
}
use of org.activiti.engine.impl.pvm.process.ActivityImpl in project Activiti by Activiti.
the class ScopeUtil method findScopeExecutionForScope.
/**
* returns the top-most execution sitting in an activity part of the scope defined by 'scopeActivitiy'.
*/
public static ExecutionEntity findScopeExecutionForScope(ExecutionEntity execution, PvmScope scopeActivity) {
if (scopeActivity instanceof PvmProcessDefinition) {
return execution.getProcessInstance();
} else {
ActivityImpl currentActivity = execution.getActivity();
ExecutionEntity candiadateExecution = null;
ExecutionEntity originalExecution = execution;
while (execution != null) {
currentActivity = execution.getActivity();
if (scopeActivity.getActivities().contains(currentActivity) || /* does not search rec*/
scopeActivity.equals(currentActivity)) {
// found a candidate execution; lets still check whether we find an
// execution which is also sitting in an activity part of this scope
// higher up the hierarchy
candiadateExecution = execution;
} else if (currentActivity != null && currentActivity.contains((ActivityImpl) scopeActivity)) /*searches rec*/
{
// now we're too "high", the candidate execution is the one.
break;
}
execution = execution.getParent();
}
// if activity is scope, we need to get the parent at least:
if (originalExecution == candiadateExecution && originalExecution.getActivity().isScope() && !originalExecution.getActivity().equals(scopeActivity)) {
candiadateExecution = originalExecution.getParent();
}
return candiadateExecution;
}
}
use of org.activiti.engine.impl.pvm.process.ActivityImpl in project Activiti by Activiti.
the class ManualTaskParseHandler method executeParse.
protected void executeParse(BpmnParse bpmnParse, ManualTask manualTask) {
ActivityImpl activity = createActivityOnCurrentScope(bpmnParse, manualTask, BpmnXMLConstants.ELEMENT_TASK_MANUAL);
activity.setActivityBehavior(bpmnParse.getActivityBehaviorFactory().createManualTaskActivityBehavior(manualTask));
activity.setAsync(manualTask.isAsynchronous());
activity.setExclusive(!manualTask.isNotExclusive());
}
use of org.activiti.engine.impl.pvm.process.ActivityImpl in project Activiti by Activiti.
the class ReceiveTaskParseHandler method executeParse.
protected void executeParse(BpmnParse bpmnParse, ReceiveTask receiveTask) {
ActivityImpl activity = createActivityOnCurrentScope(bpmnParse, receiveTask, BpmnXMLConstants.ELEMENT_TASK_RECEIVE);
activity.setActivityBehavior(bpmnParse.getActivityBehaviorFactory().createReceiveTaskActivityBehavior(receiveTask));
activity.setAsync(receiveTask.isAsynchronous());
activity.setExclusive(!receiveTask.isNotExclusive());
}
Aggregations