protected internal override void eventNotificationsCompleted(PvmExecutionImpl execution) { base.eventNotificationsCompleted(execution); execution.activityInstanceStarted(); ExecutionStartContext startContext = execution.ExecutionStartContext; InstantiationStack instantiationStack = startContext.InstantiationStack; PvmExecutionImpl propagatingExecution = execution; ActivityImpl activity = execution.getActivity(); if (activity.ActivityBehavior is ModificationObserverBehavior) { ModificationObserverBehavior behavior = (ModificationObserverBehavior)activity.ActivityBehavior; IList <ActivityExecution> concurrentExecutions = behavior.initializeScope(propagatingExecution, 1); propagatingExecution = (PvmExecutionImpl)concurrentExecutions[0]; } // if the stack has been instantiated if (instantiationStack.Activities.Count == 0 && instantiationStack.TargetActivity != null) { // as if we are entering the target activity instance id via a transition propagatingExecution.ActivityInstanceId = null; // execute the target activity with this execution startContext.applyVariables(propagatingExecution); propagatingExecution.setActivity(instantiationStack.TargetActivity); propagatingExecution.performOperation(PvmAtomicOperation_Fields.ACTIVITY_START_CREATE_SCOPE); } else if (instantiationStack.Activities.Count == 0 && instantiationStack.TargetTransition != null) { // as if we are entering the target activity instance id via a transition propagatingExecution.ActivityInstanceId = null; // execute the target transition with this execution PvmTransition transition = instantiationStack.TargetTransition; startContext.applyVariables(propagatingExecution); propagatingExecution.setActivity(transition.Source); propagatingExecution.setTransition((TransitionImpl)transition); propagatingExecution.performOperation(PvmAtomicOperation_Fields.TRANSITION_START_NOTIFY_LISTENER_TAKE); } else { // else instantiate the activity stack further propagatingExecution.setActivity(null); propagatingExecution.performOperation(PvmAtomicOperation_Fields.ACTIVITY_INIT_STACK); } }
public virtual void destroyAttachableExecution(ExecutionEntity execution) { if (outerInstance.currentScope.ActivityBehavior is ModificationObserverBehavior) { ModificationObserverBehavior behavior = (ModificationObserverBehavior)outerInstance.currentScope.ActivityBehavior; behavior.destroyInnerInstance(execution); } else { if (execution.Concurrent) { execution.remove(); execution.Parent.tryPruneLastConcurrentChild(); execution.Parent.forceUpdate(); } } }
public virtual ExecutionEntity createAttachableExecution() { ExecutionEntity scopeExecution = resolveRepresentativeExecution(); ExecutionEntity attachableExecution = scopeExecution; if (outerInstance.currentScope.ActivityBehavior is ModificationObserverBehavior) { ModificationObserverBehavior behavior = (ModificationObserverBehavior)outerInstance.currentScope.ActivityBehavior; attachableExecution = (ExecutionEntity)behavior.createInnerInstance(scopeExecution); } else { if (scopeExecution.NonEventScopeExecutions.Count > 0 || scopeExecution.getActivity() != null) { attachableExecution = (ExecutionEntity)scopeExecution.createConcurrentExecution(); attachableExecution.Active = false; scopeExecution.forceUpdate(); } } return(attachableExecution); }