public virtual void Validate(MigratingCompensationEventSubscriptionInstance migratingInstance, MigratingProcessInstance migratingProcessInstance, MigratingActivityInstanceValidationReportImpl ancestorInstanceReport) { // Compensation start event subscriptions are MigratingEventScopeInstances // because they reference an event scope execution }
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."); } } } } }
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); }
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"); } }
protected internal virtual void ValidateEventScopeInstance(MigratingEventScopeInstance eventScopeInstance, MigratingProcessInstance migratingProcessInstance, IList <IMigratingCompensationInstanceValidator> migratingTransitionInstanceValidators, MigratingActivityInstanceValidationReportImpl instanceReport) { foreach (var validator in migratingTransitionInstanceValidators) { validator.Validate(eventScopeInstance, migratingProcessInstance, instanceReport); } }
/// <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"); } }
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); }
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); }
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"); } } }
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); }
/// <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"); } }
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."); } } } } }
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); }
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"); } } } }
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); }
protected internal virtual void validateCompensateSubscriptionInstance(MigratingCompensationEventSubscriptionInstance eventSubscriptionInstance, MigratingProcessInstance migratingProcessInstance, IList <MigratingCompensationInstanceValidator> migratingTransitionInstanceValidators, MigratingActivityInstanceValidationReportImpl instanceReport) { foreach (MigratingCompensationInstanceValidator validator in migratingTransitionInstanceValidators) { validator.validate(eventSubscriptionInstance, migratingProcessInstance, instanceReport); } }