Exemplo n.º 1
0
        protected internal virtual void updateAsyncBeforeTargetConfiguration()
        {
            AsyncContinuationConfiguration targetConfiguration  = new AsyncContinuationConfiguration();
            AsyncContinuationConfiguration currentConfiguration = (AsyncContinuationConfiguration)jobEntity.JobHandlerConfiguration;

            if (org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperation_Fields.PROCESS_START.CanonicalName.Equals(currentConfiguration.AtomicOperation))
            {
                // process start always stays process start
                targetConfiguration.AtomicOperation = org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperation_Fields.PROCESS_START.CanonicalName;
            }
            else
            {
                if (((ActivityImpl)targetScope).IncomingTransitions.Count == 0)
                {
                    targetConfiguration.AtomicOperation = org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperation_Fields.ACTIVITY_START_CREATE_SCOPE.CanonicalName;
                }
                else
                {
                    targetConfiguration.AtomicOperation = org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperation_Fields.TRANSITION_CREATE_SCOPE.CanonicalName;
                }
            }


            jobEntity.JobHandlerConfiguration = targetConfiguration;
        }
        public virtual IJobHandlerConfiguration NewConfiguration(string canonicalString)
        {
            var configParts = TokenizeJobConfiguration(canonicalString);

            var configuration = new AsyncContinuationConfiguration();

            configuration.AtomicOperation = configParts[0];
            configuration.TransitionId    = configParts[1];

            return(configuration);
        }
Exemplo n.º 3
0
        protected internal override void migrateJobHandlerConfiguration()
        {
            AsyncContinuationConfiguration configuration = (AsyncContinuationConfiguration)jobEntity.JobHandlerConfiguration;

            if (AsyncAfter)
            {
                updateAsyncAfterTargetConfiguration(configuration);
            }
            else
            {
                updateAsyncBeforeTargetConfiguration();
            }
        }
Exemplo n.º 4
0
        protected internal virtual void updateAsyncAfterTargetConfiguration(AsyncContinuationConfiguration currentConfiguration)
        {
            ActivityImpl          targetActivity      = (ActivityImpl)targetScope;
            IList <PvmTransition> outgoingTransitions = targetActivity.OutgoingTransitions;

            AsyncContinuationConfiguration targetConfiguration = new AsyncContinuationConfiguration();

            if (outgoingTransitions.Count == 0)
            {
                targetConfiguration.AtomicOperation = org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperation_Fields.ACTIVITY_END.CanonicalName;
            }
            else
            {
                targetConfiguration.AtomicOperation = org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperation_Fields.TRANSITION_NOTIFY_LISTENER_TAKE.CanonicalName;

                if (outgoingTransitions.Count == 1)
                {
                    targetConfiguration.TransitionId = outgoingTransitions[0].Id;
                }
                else
                {
                    TransitionImpl matchingTargetTransition = null;
                    string         currentTransitionId      = currentConfiguration.TransitionId;
                    if (!string.ReferenceEquals(currentTransitionId, null))
                    {
                        matchingTargetTransition = targetActivity.findOutgoingTransition(currentTransitionId);
                    }

                    if (matchingTargetTransition != null)
                    {
                        targetConfiguration.TransitionId = matchingTargetTransition.Id;
                    }
                    else
                    {
                        // should not happen since it is avoided by validation
                        throw new ProcessEngineException("Cannot determine matching outgoing sequence flow");
                    }
                }
            }

            jobEntity.JobHandlerConfiguration = targetConfiguration;
        }
Exemplo n.º 5
0
        protected internal override JobHandlerConfiguration resolveJobHandlerConfiguration(AtomicOperationInvocation context)
        {
            AsyncContinuationConfiguration configuration = new AsyncContinuationConfiguration();

            configuration.AtomicOperation = context.Operation.CanonicalName;

            ExecutionEntity execution = context.Execution;
            PvmActivity     activity  = execution.getActivity();

            if (activity != null && activity.AsyncAfter)
            {
                if (execution.Transition != null)
                {
                    // store id of selected transition in case this is async after.
                    // id is not serialized with the execution -> we need to remember it as
                    // job handler configuration.
                    configuration.TransitionId = execution.Transition.Id;
                }
            }

            return(configuration);
        }