示例#1
0
        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);
            }
        }
示例#2
0
 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();
         }
     }
 }
示例#3
0
            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);
            }