コード例 #1
0
        public virtual void Handle(MigratingInstanceParseContext parseContext, EventSubscriptionEntity element)
        {
            MigratingProcessElementInstance migratingInstance;

            if (!ReferenceEquals(element.Configuration, null))
            {
                migratingInstance = CreateMigratingEventScopeInstance(parseContext, element);
            }
            else
            {
                migratingInstance = CreateMigratingEventSubscriptionInstance(parseContext, element);
            }


            ExecutionEntity        owningExecution = element.Execution;
            MigratingScopeInstance parentInstance  = null;

            if (owningExecution.IsEventScope)
            {
                parentInstance = parseContext.GetMigratingCompensationInstanceByExecutionId(owningExecution.Id);
            }
            else
            {
                parentInstance = parseContext.GetMigratingActivityInstanceById(owningExecution.ParentActivityInstanceId);
            }
            migratingInstance.Parent = parentInstance;
        }
コード例 #2
0
        public virtual void Handle(MigratingInstanceParseContext parseContext,
                                   MigratingTransitionInstance transitionInstance, IList <JobEntity> elements)
        {
            foreach (var job in elements)
            {
                if (!IsAsyncContinuation(job))
                {
                    continue;
                }

                var targetScope = transitionInstance.TargetScope;
                if (targetScope != null)
                {
                    var targetJobDefinitionEntity =
                        parseContext.GetTargetJobDefinition(transitionInstance.TargetScope.Id, job.JobHandlerType);

                    var migratingJobInstance = new MigratingAsyncJobInstance(job, targetJobDefinitionEntity,
                                                                             transitionInstance.TargetScope);

                    transitionInstance.DependentJobInstance = migratingJobInstance;
                    parseContext.Submit(migratingJobInstance);
                }

                parseContext.Consume(job);
            }
        }
コード例 #3
0
        public virtual void Handle(MigratingInstanceParseContext parseContext, ITransitionInstance transitionInstance)
        {
            throw new NotImplementedException();
            //if (!IsAsyncTransitionInstance(transitionInstance))
            //    return;

            //var applyingInstruction = parseContext.GetInstructionFor(transitionInstance.ActivityId);

            //ScopeImpl sourceScope = parseContext.SourceProcessDefinition.FindActivity(transitionInstance.ActivityId);
            //ScopeImpl targetScope = null;

            //if (applyingInstruction != null)
            //{
            //    var activityId = applyingInstruction.TargetActivityId;
            //    targetScope = parseContext.TargetProcessDefinition.FindActivity(activityId);
            //}

            //ExecutionEntity asyncExecution =
            //    Context.CommandContext.ExecutionManager.FindExecutionById(transitionInstance.ExecutionId);

            //var migratingTransitionInstance =
            //    parseContext.MigratingProcessInstance.AddTransitionInstance(applyingInstruction, transitionInstance,
            //        sourceScope, targetScope, asyncExecution);

            //var parentInstance =
            //    parseContext.GetMigratingActivityInstanceById(transitionInstance.ParentActivityInstanceId);
            //migratingTransitionInstance.setParent(parentInstance);

            //IList<JobEntity> jobs = asyncExecution.Jobs;
            //parseContext.handleDependentTransitionInstanceJobs(migratingTransitionInstance, jobs);

            //parseContext.handleDependentVariables(migratingTransitionInstance,
            //    collectTransitionInstanceVariables(migratingTransitionInstance));
        }
コード例 #4
0
 public virtual void ParseTransitionInstances(MigratingInstanceParseContext parseContext,
                                              MigratingActivityInstance migratingInstance)
 {
     foreach (var transitionInstance in migratingInstance.ActivityInstance.ChildTransitionInstances)
     {
         parseContext.HandleTransitionInstance(transitionInstance);
     }
 }
コード例 #5
0
        protected internal virtual void ParseDependentEntities(MigratingInstanceParseContext parseContext,
                                                               MigratingEventScopeInstance migratingInstance)
        {
            var representativeExecution = migratingInstance.ResolveRepresentativeExecution();

            //IList<VariableInstanceEntity> variables =
            //    new List<VariableInstanceEntity>(representativeExecution.VariablesInternal);
            //parseContext.handleDependentVariables(migratingInstance, variables);
        }
コード例 #6
0
 public virtual void ParseDependentInstances(MigratingInstanceParseContext parseContext,
                                             MigratingActivityInstance migratingInstance)
 {
     parseContext.HandleDependentVariables(migratingInstance, CollectActivityInstanceVariables(migratingInstance));
     parseContext.HandleDependentActivityInstanceJobs(migratingInstance,
                                                      CollectActivityInstanceJobs(migratingInstance));
     parseContext.HandleDependentEventSubscriptions(migratingInstance,
                                                    CollectActivityInstanceEventSubscriptions(migratingInstance));
 }
コード例 #7
0
        public virtual void Handle(MigratingInstanceParseContext parseContext,
                                   MigratingProcessElementInstance owningInstance, IList <VariableInstanceEntity> variables)
        {
            var representativeExecution = owningInstance.ResolveRepresentativeExecution();

            foreach (var variable in variables)
            {
                parseContext.Consume(variable);
            }
        }
コード例 #8
0
 protected internal virtual void HandleCallActivityIncident(MigratingInstanceParseContext parseContext,
                                                            IncidentEntity incident)
 {
     //var owningInstance = parseContext.getMigratingActivityInstanceById(incident.Execution.ActivityInstanceId);
     //if (owningInstance != null)
     //{
     //    parseContext.consume(incident);
     //    var migratingIncident = new MigratingIncident(incident, owningInstance.TargetScope);
     //    owningInstance.addMigratingDependentInstance(migratingIncident);
     //}
 }
コード例 #9
0
        protected internal virtual void HandleExternalTaskIncident(MigratingInstanceParseContext parseContext,
                                                                   IncidentEntity incident)
        {
            var owningInstance = parseContext.GetMigratingExternalTaskInstanceById(incident.Configuration);

            if (owningInstance != null)
            {
                parseContext.Consume(incident);
                var migratingIncident = new MigratingIncident(incident, owningInstance.TargetScope);
                owningInstance.AddMigratingDependentInstance(migratingIncident);
            }
        }
コード例 #10
0
        public virtual void Handle(MigratingInstanceParseContext parseContext, IActivityInstance element)
        {
            MigratingActivityInstance migratingInstance = null;

            var       applyingInstruction     = parseContext.GetInstructionFor(element.ActivityId);
            ScopeImpl sourceScope             = null;
            ScopeImpl targetScope             = null;
            var       representativeExecution = parseContext.Mapping.GetExecution(element);

            if (element.Id.Equals(element.ProcessInstanceId))
            {
                sourceScope = parseContext.SourceProcessDefinition;
                targetScope = parseContext.TargetProcessDefinition;
            }
            else
            {
                sourceScope = (ScopeImpl)parseContext.SourceProcessDefinition.FindActivity(element.ActivityId);

                if (applyingInstruction != null)
                {
                    var activityId = applyingInstruction.TargetActivityId;
                    targetScope = (ScopeImpl)parseContext.TargetProcessDefinition.FindActivity(activityId);
                }
            }

            migratingInstance = parseContext.MigratingProcessInstance.AddActivityInstance(applyingInstruction, element,
                                                                                          sourceScope, targetScope, representativeExecution);

            var parentInstance = parseContext.GetMigratingActivityInstanceById(element.ParentActivityInstanceId);

            if (parentInstance != null)
            {
                //migratingInstance.setParent(parentInstance);
            }

            //JAVA TO C# CONVERTER WARNING: Java wildcard generics have no direct equivalent in .NET:
            //ORIGINAL LINE: org.camunda.bpm.engine.impl.core.delegate.CoreActivityBehavior<object> sourceActivityBehavior = sourceScope.getActivityBehavior();
            var sourceActivityBehavior = sourceScope.ActivityBehavior;

            if (sourceActivityBehavior is IMigrationObserverBehavior)
            {
                ((IMigrationObserverBehavior)sourceActivityBehavior).OnParseMigratingInstance(parseContext,
                                                                                              migratingInstance);
            }

            parseContext.Submit(migratingInstance);

            ParseTransitionInstances(parseContext, migratingInstance);

            ParseDependentInstances(parseContext, migratingInstance);
        }
コード例 #11
0
 public virtual void Handle(MigratingInstanceParseContext parseContext, IncidentEntity incident)
 {
     if (ReferenceEquals(incident.Configuration, null) &&
         (IsFailedJobIncident(incident) || IsExternalTaskIncident(incident)))
     {
         HandleCallActivityIncident(parseContext, incident);
     }
     else if (IsFailedJobIncident(incident))
     {
         HandleFailedJobIncident(parseContext, incident);
     }
     else if (IsExternalTaskIncident(incident))
     {
         HandleExternalTaskIncident(parseContext, incident);
     }
 }
コード例 #12
0
        protected internal virtual IMigrationInstruction GetMigrationInstruction(
            MigratingInstanceParseContext parseContext, ActivityImpl activity)
        {
            if (activity.CompensationHandler)
            {
                var compensationHandlerProperties = activity.Properties;
                var eventTrigger = compensationHandlerProperties.Get(BpmnProperties.CompensationBoundaryEvent);
                if (eventTrigger == null)
                {
                    eventTrigger = compensationHandlerProperties.Get(BpmnProperties.InitialActivity);
                }

                return(parseContext.FindSingleMigrationInstruction(eventTrigger.ActivityId));
            }
            return(parseContext.FindSingleMigrationInstruction(activity.ActivityId));
        }
コード例 #13
0
        public virtual void Handle(MigratingInstanceParseContext parseContext,
                                   MigratingActivityInstance activityInstance, IList <JobEntity> elements)
        {
            var timerDeclarationsInEventScope = GetTimerDeclarationsByTriggeringActivity(activityInstance.TargetScope);

            foreach (var job in elements)
            {
                if (!IsTimerJob(job))
                {
                    continue;
                }

                //var migrationInstruction = parseContext.findSingleMigrationInstruction(job.ActivityId);
                //var targetActivity = parseContext.getTargetActivity(migrationInstruction);

                //if (targetActivity != null && activityInstance.migratesTo(targetActivity.EventScope))
                //{
                //    // the timer job is migrated
                //    JobDefinitionEntity targetJobDefinitionEntity =
                //        parseContext.getTargetJobDefinition(targetActivity.ActivityId, job.JobHandlerType);

                //    TimerDeclarationImpl targetTimerDeclaration = timerDeclarationsInEventScope.Remove(targetActivity.Id);

                //    MigratingJobInstance migratingTimerJobInstance = new MigratingTimerJobInstance(job,
                //        targetJobDefinitionEntity, targetActivity, migrationInstruction.UpdateEventTrigger,
                //        targetTimerDeclaration);
                //    activityInstance.addMigratingDependentInstance(migratingTimerJobInstance);
                //    parseContext.submit(migratingTimerJobInstance);
                //}
                //else
                //{
                //    // the timer job is removed
                //    MigratingJobInstance removingJobInstance = new MigratingTimerJobInstance(job);
                //    activityInstance.addRemovingDependentInstance(removingJobInstance);
                //    parseContext.submit(removingJobInstance);
                //}

                parseContext.Consume(job);
            }

            if (activityInstance.Migrates())
            {
                AddEmergingTimerJobs(activityInstance, timerDeclarationsInEventScope.Values);
            }
        }
コード例 #14
0
        protected internal virtual void HandleFailedJobIncident(MigratingInstanceParseContext parseContext,
                                                                IncidentEntity incident)
        {
            var owningInstance = parseContext.GetMigratingJobInstanceById(incident.Configuration);

            if (owningInstance != null)
            {
                parseContext.Consume(incident);
                if (owningInstance.Migrates())
                {
                    var migratingIncident         = new MigratingIncident(incident, owningInstance.TargetScope);
                    var targetJobDefinitionEntity = owningInstance.TargetJobDefinitionEntity;
                    if (targetJobDefinitionEntity != null)
                    {
                        migratingIncident.TargetJobDefinitionId = targetJobDefinitionEntity.Id;
                    }
                    owningInstance.AddMigratingDependentInstance(migratingIncident);
                }
            }
        }
コード例 #15
0
        protected internal virtual MigratingProcessElementInstance CreateMigratingEventScopeInstance(
            MigratingInstanceParseContext parseContext, EventSubscriptionEntity element)
        {
            var compensatingActivity =
                (ActivityImpl)parseContext.SourceProcessDefinition.FindActivity(element.ActivityId);

            var migrationInstruction = GetMigrationInstruction(parseContext, compensatingActivity);

            ActivityImpl eventSubscriptionTargetScope = null;

            if (migrationInstruction != null)
            {
                if (compensatingActivity.CompensationHandler)
                {
                    var targetEventScope =
                        (ActivityImpl)parseContext.GetTargetActivity(migrationInstruction).EventScope;
                    eventSubscriptionTargetScope = targetEventScope.findCompensationHandler();
                }
                else
                {
                    eventSubscriptionTargetScope = parseContext.GetTargetActivity(migrationInstruction);
                }
            }

            var eventScopeExecution   = CompensationUtil.GetCompensatingExecution(element);
            var eventScopeInstruction = parseContext.FindSingleMigrationInstruction(eventScopeExecution.ActivityId);
            var targetScope           = parseContext.GetTargetActivity(eventScopeInstruction);

            //var migratingCompensationInstance =
            //    parseContext.MigratingProcessInstance.addEventScopeInstance(eventScopeInstruction, eventScopeExecution,
            //        eventScopeExecution.getActivity(), targetScope, migrationInstruction, element, compensatingActivity,
            //        eventSubscriptionTargetScope);

            //parseContext.consume(element);
            //parseContext.submit(migratingCompensationInstance);

            //parseDependentEntities(parseContext, migratingCompensationInstance);

            //return migratingCompensationInstance;
            return(null);
        }
コード例 #16
0
        protected internal virtual MigratingProcessElementInstance CreateMigratingEventSubscriptionInstance(
            MigratingInstanceParseContext parseContext, EventSubscriptionEntity element)
        {
            var compensationHandler =
                (ActivityImpl)parseContext.SourceProcessDefinition.FindActivity(element.ActivityId);

            var migrationInstruction = GetMigrationInstruction(parseContext, compensationHandler);

            ActivityImpl targetScope = null;

            if (migrationInstruction != null)
            {
                var targetEventScope = (ActivityImpl)parseContext.GetTargetActivity(migrationInstruction).EventScope;
                targetScope = targetEventScope.findCompensationHandler();
            }

            var migratingCompensationInstance =
                parseContext.MigratingProcessInstance.AddCompensationSubscriptionInstance(migrationInstruction, element,
                                                                                          compensationHandler, targetScope);

            parseContext.Consume(element);

            return(migratingCompensationInstance);
        }
コード例 #17
0
        public virtual void Handle(MigratingInstanceParseContext parseContext, MigratingActivityInstance owningInstance,
                                   IList <EventSubscriptionEntity> elements)
        {
            var targetDeclarations = GetDeclarationsByTriggeringActivity(owningInstance.TargetScope);

            foreach (var eventSubscription in elements)
            {
                if (!SupportedEventTypes.Contains(eventSubscription.EventType))
                {
                    continue;
                }

                var migrationInstruction = parseContext.FindSingleMigrationInstruction(eventSubscription.ActivityId);
                var targetActivity       = parseContext.GetTargetActivity(migrationInstruction);

                if ((targetActivity != null) && owningInstance.MigratesTo((ScopeImpl)targetActivity.EventScope))
                {
                    // the event subscription is migrated
                    //EventSubscriptionDeclaration targetDeclaration = targetDeclarations.Remove(targetActivity.Id);

                    //owningInstance.addMigratingDependentInstance(new MigratingEventSubscriptionInstance(eventSubscription, targetActivity, migrationInstruction.UpdateEventTrigger, targetDeclaration));
                }
                else
                {
                    // the event subscription will be removed
                    owningInstance.AddRemovingDependentInstance(new MigratingEventSubscriptionInstance(eventSubscription));
                }

                //parseContext.consume(eventSubscription);
            }

            if (owningInstance.Migrates())
            {
                AddEmergingEventSubscriptions(owningInstance, targetDeclarations.Values);
            }
        }
コード例 #18
0
 public TreeVisitorAnonymousInnerClass2(MigratingInstanceParser outerInstance,
                                        MigratingInstanceParseContext parseContext)
 {
     this._outerInstance = outerInstance;
     this._parseContext  = parseContext;
 }