public virtual void Validate(MigratingCompensationEventSubscriptionInstance migratingInstance,
                              MigratingProcessInstance migratingProcessInstance,
                              MigratingActivityInstanceValidationReportImpl ancestorInstanceReport)
 {
     // Compensation start event subscriptions are MigratingEventScopeInstances
     // because they reference an event scope execution
 }
Exemplo n.º 2
0
        public virtual void Validate(MigratingTransitionInstance migratingInstance,
                                     MigratingProcessInstance migratingProcessInstance,
                                     MigratingTransitionInstanceValidationReportImpl instanceReport)
        {
            var targetActivity = (ActivityImpl)migratingInstance.TargetScope;

            if ((targetActivity != null) && migratingInstance.AsyncAfter)
            {
                var jobInstance = migratingInstance.JobInstance;
                //var config =
                //    (AsyncContinuationJobHandler.AsyncContinuationConfiguration)
                //        jobInstance.JobEntity.JobHandlerConfiguration;
                //var sourceTransitionId = config.TransitionId;

                if (targetActivity.OutgoingTransitions.Count > 1)
                {
                    //if (ReferenceEquals(sourceTransitionId, null))
                    //{
                    //    instanceReport.addFailure("Transition instance is assigned to no sequence flow" +
                    //                              " and target activity has more than one outgoing sequence flow");
                    //}
                    //else
                    //{
                    //    var matchingOutgoingTransition = targetActivity.findOutgoingTransition(sourceTransitionId);
                    //    if (matchingOutgoingTransition == null)
                    //    {
                    //        instanceReport.addFailure("Transition instance is assigned to a sequence flow" +
                    //                                  " that cannot be matched in the target activity");
                    //    }
                    //}
                }
            }
        }
        public virtual void Validate(MigratingActivityInstance migratingInstance,
                                     MigratingProcessInstance migratingProcessInstance,
                                     MigratingActivityInstanceValidationReportImpl instanceReport)
        {
            var sourceScope = migratingInstance.SourceScope;
            var targetScope = migratingInstance.TargetScope;

            if (migratingInstance.Migrates())
            {
                var becomesNonScope = sourceScope.IsScope && !targetScope.IsScope;
                if (becomesNonScope)
                {
                    var dependentVariablesByName = GetMigratingVariableInstancesByName(migratingInstance);
                    foreach (var variableName in dependentVariablesByName.Keys)
                    {
                        if (dependentVariablesByName[variableName].Count > 1)
                        {
                            instanceReport.AddFailure("The variable '" + variableName +
                                                      "' exists in both, this scope and " +
                                                      "concurrent local in the parent scope. " +
                                                      "Migrating to a non-scope activity would overwrite one of them.");
                        }
                    }
                }
            }
        }
Exemplo n.º 4
0
 public MigratingInstanceParseContext(MigratingInstanceParser parser, MigrationPlan migrationPlan, ExecutionEntity processInstance, ProcessDefinitionEntity targetProcessDefinition)
 {
     this.parser = parser;
     this.sourceProcessDefinition  = processInstance.getProcessDefinition();
     this.targetProcessDefinition  = targetProcessDefinition;
     this.migratingProcessInstance = new MigratingProcessInstance(processInstance.Id, sourceProcessDefinition, targetProcessDefinition);
     this.mapping = new ActivityExecutionTreeMapping(Context.CommandContext, processInstance.Id);
     this.instructionsBySourceScope = organizeInstructionsBySourceScope(migrationPlan);
 }
Exemplo n.º 5
0
        protected internal virtual void ValidateInstructions(CommandContext commandContext,
                                                             MigratingProcessInstance migratingProcessInstance,
                                                             MigratingProcessInstanceValidationReportImpl processInstanceReport)
        {
            var migratingActivityInstanceValidators =
                commandContext.ProcessEngineConfiguration.MigratingActivityInstanceValidators;
            var migratingTransitionInstanceValidators =
                commandContext.ProcessEngineConfiguration.MigratingTransitionInstanceValidators;
            var migratingCompensationInstanceValidators =
                commandContext.ProcessEngineConfiguration.MigratingCompensationInstanceValidators;

            IDictionary <MigratingActivityInstance, MigratingActivityInstanceValidationReportImpl> instanceReports =
                new Dictionary <MigratingActivityInstance, MigratingActivityInstanceValidationReportImpl>();

            foreach (var migratingActivityInstance in migratingProcessInstance.MigratingActivityInstances)
            {
                var instanceReport = ValidateActivityInstance(migratingActivityInstance, migratingProcessInstance,
                                                              migratingActivityInstanceValidators);
                instanceReports[migratingActivityInstance] = instanceReport;
            }

            foreach (var migratingEventScopeInstance in migratingProcessInstance.MigratingEventScopeInstances)
            {
                var ancestorInstance = migratingEventScopeInstance.ClosestAncestorActivityInstance;

                ValidateEventScopeInstance(migratingEventScopeInstance, migratingProcessInstance,
                                           migratingCompensationInstanceValidators, instanceReports[ancestorInstance]);
            }

            foreach (
                var migratingEventSubscriptionInstance in
                migratingProcessInstance.MigratingCompensationSubscriptionInstances)
            {
                var ancestorInstance = migratingEventSubscriptionInstance.ClosestAncestorActivityInstance;

                ValidateCompensateSubscriptionInstance(migratingEventSubscriptionInstance, migratingProcessInstance,
                                                       migratingCompensationInstanceValidators, instanceReports[ancestorInstance]);
            }

            foreach (var instanceReport in instanceReports.Values)
            {
                if (instanceReport.HasFailures())
                {
                    processInstanceReport.AddActivityInstanceReport(instanceReport);
                }
            }

            foreach (var migratingTransitionInstance in migratingProcessInstance.MigratingTransitionInstances)
            {
                var instanceReport = ValidateTransitionInstance(migratingTransitionInstance, migratingProcessInstance,
                                                                migratingTransitionInstanceValidators);
                if (instanceReport.HasFailures())
                {
                    processInstanceReport.AddTransitionInstanceReport(instanceReport);
                }
            }
        }
 public virtual void Validate(MigratingActivityInstance migratingInstance,
                              MigratingProcessInstance migratingProcessInstance,
                              MigratingActivityInstanceValidationReportImpl instanceReport)
 {
     if (IsInvalid(migratingInstance))
     {
         instanceReport.AddFailure("There is no migration instruction for this instance's activity");
     }
 }
Exemplo n.º 7
0
 protected internal virtual void ValidateEventScopeInstance(MigratingEventScopeInstance eventScopeInstance,
                                                            MigratingProcessInstance migratingProcessInstance,
                                                            IList <IMigratingCompensationInstanceValidator> migratingTransitionInstanceValidators,
                                                            MigratingActivityInstanceValidationReportImpl instanceReport)
 {
     foreach (var validator in migratingTransitionInstanceValidators)
     {
         validator.Validate(eventScopeInstance, migratingProcessInstance, instanceReport);
     }
 }
Exemplo n.º 8
0
        /// <summary>
        /// Migrate activity instances to their new activities and process definition. Creates new
        /// scope instances as necessary.
        /// </summary>
        protected internal virtual void migrateProcessInstance(MigratingProcessInstance migratingProcessInstance)
        {
            MigratingActivityInstance rootActivityInstance = migratingProcessInstance.RootInstance;

            MigratingProcessElementInstanceTopDownWalker walker = new MigratingProcessElementInstanceTopDownWalker(rootActivityInstance);

            walker.addPreVisitor(new MigratingActivityInstanceVisitor(executionBuilder.SkipCustomListeners, executionBuilder.SkipIoMappings));
            walker.addPreVisitor(new MigrationCompensationInstanceVisitor());

            walker.walkUntil();
        }
 public virtual void Validate(MigratingEventScopeInstance migratingInstance,
                              MigratingProcessInstance migratingProcessInstance,
                              MigratingActivityInstanceValidationReportImpl ancestorInstanceReport)
 {
     if (IsInvalid(migratingInstance))
     {
         ancestorInstanceReport.AddFailure("Cannot migrate subscription for compensation handler '" +
                                           migratingInstance.EventSubscription.SourceScope.Id + "'. " +
                                           "There is no migration instruction for the compensation start event");
     }
 }
Exemplo n.º 10
0
 public MigratingInstanceParseContext(MigratingInstanceParser parser, IMigrationPlan migrationPlan,
                                      ExecutionEntity processInstance, ProcessDefinitionEntity targetProcessDefinition)
 {
     this.Parser                  = parser;
     sourceProcessDefinition      = processInstance.GetProcessDefinition();//.ProcessDefinition;
     this.targetProcessDefinition = targetProcessDefinition;
     migratingProcessInstance     = new MigratingProcessInstance(processInstance.Id, sourceProcessDefinition,
                                                                 targetProcessDefinition);
     mapping = new ActivityExecutionTreeMapping(context.Impl.Context.CommandContext, processInstance.Id);
     InstructionsBySourceScope = OrganizeInstructionsBySourceScope(migrationPlan);
 }
Exemplo n.º 11
0
        protected internal virtual MigratingTransitionInstanceValidationReportImpl ValidateTransitionInstance(
            MigratingTransitionInstance migratingTransitionInstance, MigratingProcessInstance migratingProcessInstance,
            IList <IMigratingTransitionInstanceValidator> migratingTransitionInstanceValidators)
        {
            var instanceReport = new MigratingTransitionInstanceValidationReportImpl(migratingTransitionInstance);

            foreach (var migratingTransitionInstanceValidator in migratingTransitionInstanceValidators)
            {
                migratingTransitionInstanceValidator.Validate(migratingTransitionInstance, migratingProcessInstance,
                                                              instanceReport);
            }
            return(instanceReport);
        }
Exemplo n.º 12
0
        public virtual void Validate(MigratingTransitionInstance migratingInstance,
                                     MigratingProcessInstance migratingProcessInstance,
                                     MigratingTransitionInstanceValidationReportImpl instanceReport)
        {
            var targetActivity = (ActivityImpl)migratingInstance.TargetScope;

            if (targetActivity != null)
            {
                if (IsProcessStartJob(migratingInstance.JobInstance.JobEntity) && !IsTopLevelActivity(targetActivity))
                {
                    instanceReport.AddFailure(
                        "A transition instance that instantiates the process can only be migrated to a process-level flow node");
                }
            }
        }
Exemplo n.º 13
0
        protected internal virtual ISet <MigratingScopeInstance> CollectLeafInstances(
            MigratingProcessInstance migratingProcessInstance)
        {
            ISet <MigratingScopeInstance> leafInstances = new HashSet <MigratingScopeInstance>();

            foreach (var migratingScopeInstance in migratingProcessInstance.MigratingScopeInstances)
            {
                if (migratingScopeInstance.ChildScopeInstances.Count == 0)
                {
                    leafInstances.Add(migratingScopeInstance);
                }
            }

            return(leafInstances);
        }
Exemplo n.º 14
0
        /// <summary>
        /// delete unmapped instances in a bottom-up fashion (similar to deleteCascade and regular BPMN execution)
        /// </summary>
        protected internal virtual void deleteUnmappedActivityInstances(MigratingProcessInstance migratingProcessInstance)
        {
            ISet <MigratingScopeInstance> leafInstances = collectLeafInstances(migratingProcessInstance);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.camunda.bpm.engine.impl.migration.instance.DeleteUnmappedInstanceVisitor visitor = new org.camunda.bpm.engine.impl.migration.instance.DeleteUnmappedInstanceVisitor(executionBuilder.isSkipCustomListeners(), executionBuilder.isSkipIoMappings());
            DeleteUnmappedInstanceVisitor visitor = new DeleteUnmappedInstanceVisitor(executionBuilder.SkipCustomListeners, executionBuilder.SkipIoMappings);

            foreach (MigratingScopeInstance leafInstance in leafInstances)
            {
                MigratingScopeInstanceBottomUpWalker walker = new MigratingScopeInstanceBottomUpWalker(leafInstance);

                walker.addPreVisitor(visitor);

                walker.walkUntil(new WalkConditionAnonymousInnerClass(this, visitor));
            }
        }
        public virtual void Validate(MigratingActivityInstance migratingInstance,
                                     MigratingProcessInstance migratingProcessInstance,
                                     MigratingActivityInstanceValidationReportImpl instanceReport)
        {
            var sourceScope = migratingInstance.SourceScope;

            if (sourceScope != sourceScope.ProcessDefinition)
            {
                var sourceActivity = (ActivityImpl)migratingInstance.SourceScope;

                if (!SupportedActivityValidator.Instance.IsSupportedActivity(sourceActivity))
                {
                    instanceReport.AddFailure(
                        "The type of the source activity is not supported for activity instance migration");
                }
            }
        }
        public virtual void Validate(MigratingEventScopeInstance migratingInstance,
                                     MigratingProcessInstance migratingProcessInstance,
                                     MigratingActivityInstanceValidationReportImpl ancestorInstanceReport)
        {
            var eventSubscription = migratingInstance.EventSubscription;

            var eventHandlerActivity = (ActivityImpl)eventSubscription.SourceScope;

            // note: compensation event scopes without children are already handled by NoUnmappedLeafInstanceValidator
            if (eventHandlerActivity.TriggeredByEvent && (eventSubscription.TargetScope == null) &&
                (migratingInstance.Children.Count > 0))
            {
                ancestorInstanceReport.AddFailure("Cannot migrate subscription for compensation handler '" +
                                                  eventSubscription.SourceScope.Id + "'. " +
                                                  "There is no migration instruction for the compensation start event");
            }
        }
Exemplo n.º 17
0
        public virtual void validate(MigratingActivityInstance migratingInstance, MigratingProcessInstance migratingProcessInstance, MigratingActivityInstanceValidationReportImpl instanceReport)
        {
            ScopeImpl sourceScope = migratingInstance.SourceScope;
            ScopeImpl targetScope = migratingInstance.TargetScope;

            if (migratingInstance.migrates())
            {
                bool becomesNonScope = sourceScope.Scope && !targetScope.Scope;
                if (becomesNonScope)
                {
                    IDictionary <string, IList <MigratingVariableInstance> > dependentVariablesByName = getMigratingVariableInstancesByName(migratingInstance);
                    foreach (string variableName in dependentVariablesByName.Keys)
                    {
                        if (dependentVariablesByName[variableName].Count > 1)
                        {
                            instanceReport.addFailure("The variable '" + variableName + "' exists in both, this scope and " + "concurrent local in the parent scope. " + "Migrating to a non-scope activity would overwrite one of them.");
                        }
                    }
                }
            }
        }
Exemplo n.º 18
0
        public virtual Void migrateProcessInstance(CommandContext commandContext, string processInstanceId, MigrationPlan migrationPlan, ProcessDefinitionEntity targetProcessDefinition)
        {
            ensureNotNull(typeof(BadUserRequestException), "Process instance id cannot be null", "process instance id", processInstanceId);

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity processInstance = commandContext.getExecutionManager().findExecutionById(processInstanceId);
            ExecutionEntity processInstance = commandContext.ExecutionManager.findExecutionById(processInstanceId);

            ensureProcessInstanceExist(processInstanceId, processInstance);
            ensureOperationAllowed(commandContext, processInstance, targetProcessDefinition);
            ensureSameProcessDefinition(processInstance, migrationPlan.SourceProcessDefinitionId);

            MigratingProcessInstanceValidationReportImpl processInstanceReport = new MigratingProcessInstanceValidationReportImpl();

            // Initialize migration: match migration instructions to activity instances and collect required entities
            MigratingInstanceParser migratingInstanceParser = new MigratingInstanceParser(Context.ProcessEngineConfiguration.ProcessEngine);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.camunda.bpm.engine.impl.migration.instance.MigratingProcessInstance migratingProcessInstance = migratingInstanceParser.parse(processInstance.getId(), migrationPlan, processInstanceReport);
            MigratingProcessInstance migratingProcessInstance = migratingInstanceParser.parse(processInstance.Id, migrationPlan, processInstanceReport);

            validateInstructions(commandContext, migratingProcessInstance, processInstanceReport);

            if (processInstanceReport.hasFailures())
            {
                throw LOGGER.failingMigratingProcessInstanceValidation(processInstanceReport);
            }

            executeInContext(() =>
            {
                deleteUnmappedActivityInstances(migratingProcessInstance);
            }, migratingProcessInstance.SourceDefinition);

            executeInContext(() =>
            {
                migrateProcessInstance(migratingProcessInstance);
            }, migratingProcessInstance.TargetDefinition);

            return(null);
        }
Exemplo n.º 19
0
        public virtual void Validate(MigratingTransitionInstance migratingInstance,
                                     MigratingProcessInstance migratingProcessInstance,
                                     MigratingTransitionInstanceValidationReportImpl instanceReport)
        {
            var targetActivity = (ActivityImpl)migratingInstance.TargetScope;

            if (targetActivity != null)
            {
                if (migratingInstance.AsyncAfter)
                {
                    if (!targetActivity.AsyncAfter)
                    {
                        instanceReport.AddFailure("Target activity is not asyncAfter");
                    }
                }
                else
                {
                    if (!targetActivity.AsyncBefore)
                    {
                        instanceReport.AddFailure("Target activity is not asyncBefore");
                    }
                }
            }
        }
Exemplo n.º 20
0
        protected internal virtual MigratingActivityInstanceValidationReportImpl validateActivityInstance(MigratingActivityInstance migratingActivityInstance, MigratingProcessInstance migratingProcessInstance, IList <MigratingActivityInstanceValidator> migratingActivityInstanceValidators)
        {
            MigratingActivityInstanceValidationReportImpl instanceReport = new MigratingActivityInstanceValidationReportImpl(migratingActivityInstance);

            foreach (MigratingActivityInstanceValidator migratingActivityInstanceValidator in migratingActivityInstanceValidators)
            {
                migratingActivityInstanceValidator.validate(migratingActivityInstance, migratingProcessInstance, instanceReport);
            }
            return(instanceReport);
        }
Exemplo n.º 21
0
 protected internal virtual void validateCompensateSubscriptionInstance(MigratingCompensationEventSubscriptionInstance eventSubscriptionInstance, MigratingProcessInstance migratingProcessInstance, IList <MigratingCompensationInstanceValidator> migratingTransitionInstanceValidators, MigratingActivityInstanceValidationReportImpl instanceReport)
 {
     foreach (MigratingCompensationInstanceValidator validator in migratingTransitionInstanceValidators)
     {
         validator.validate(eventSubscriptionInstance, migratingProcessInstance, instanceReport);
     }
 }