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 virtual void handle(MigratingInstanceParseContext parseContext, TransitionInstance transitionInstance) { if (!isAsyncTransitionInstance(transitionInstance)) { return; } MigrationInstruction applyingInstruction = parseContext.getInstructionFor(transitionInstance.ActivityId); ScopeImpl sourceScope = parseContext.SourceProcessDefinition.findActivity(transitionInstance.ActivityId); ScopeImpl targetScope = null; if (applyingInstruction != null) { string activityId = applyingInstruction.TargetActivityId; targetScope = parseContext.TargetProcessDefinition.findActivity(activityId); } ExecutionEntity asyncExecution = Context.CommandContext.ExecutionManager.findExecutionById(transitionInstance.ExecutionId); MigratingTransitionInstance migratingTransitionInstance = parseContext.MigratingProcessInstance.addTransitionInstance(applyingInstruction, transitionInstance, sourceScope, targetScope, asyncExecution); MigratingActivityInstance parentInstance = parseContext.getMigratingActivityInstanceById(transitionInstance.ParentActivityInstanceId); migratingTransitionInstance.setParent(parentInstance); IList <JobEntity> jobs = asyncExecution.Jobs; parseContext.handleDependentTransitionInstanceJobs(migratingTransitionInstance, jobs); parseContext.handleDependentVariables(migratingTransitionInstance, collectTransitionInstanceVariables(migratingTransitionInstance)); }
public virtual void ParseTransitionInstances(MigratingInstanceParseContext parseContext, MigratingActivityInstance migratingInstance) { foreach (var transitionInstance in migratingInstance.ActivityInstance.ChildTransitionInstances) { parseContext.HandleTransitionInstance(transitionInstance); } }
protected internal virtual void AddEmergingTimerJobs(MigratingActivityInstance owningInstance, ICollection <TimerDeclarationImpl> emergingDeclarations) { foreach (var timerDeclaration in emergingDeclarations) { owningInstance.AddEmergingDependentInstance(new EmergingJobInstance(timerDeclaration)); } }
public virtual ProcessEngineException CannotDestroySubordinateInNonScope( MigratingActivityInstance activityInstance) { return (new ProcessEngineException(ExceptionMessage("006", "{}", "Cannot destroy a subordinate of activity instance '{}'. Activity '{}' is not a scope", activityInstance.ActivityInstance.Id, activityInstance.ActivityInstance.ActivityId))); }
public virtual ProcessEngineException CannotBecomeSubordinateInNonScope( MigratingActivityInstance activityInstance) { return (new ProcessEngineException(ExceptionMessage("005", "{}", "Cannot attach a subordinate to activity instance '{}'. Activity '{}' is not a scope", activityInstance.ActivityInstance.Id, activityInstance.ActivityInstance.ActivityId))); }
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"); } }
public virtual void ParseDependentInstances(MigratingInstanceParseContext parseContext, MigratingActivityInstance migratingInstance) { parseContext.HandleDependentVariables(migratingInstance, CollectActivityInstanceVariables(migratingInstance)); parseContext.HandleDependentActivityInstanceJobs(migratingInstance, CollectActivityInstanceJobs(migratingInstance)); parseContext.HandleDependentEventSubscriptions(migratingInstance, CollectActivityInstanceEventSubscriptions(migratingInstance)); }
protected internal virtual void AddEmergingEventSubscriptions(MigratingActivityInstance owningInstance, ICollection <EventSubscriptionDeclaration> emergingDeclarations) { foreach (var eventSubscriptionDeclaration in emergingDeclarations) { owningInstance.AddEmergingDependentInstance( new MigratingEventSubscriptionInstance(eventSubscriptionDeclaration)); } }
protected internal virtual IList <JobEntity> CollectActivityInstanceJobs( MigratingActivityInstance migratingInstance) { if (migratingInstance.SourceScope.IsScope) { //return migratingInstance.resolveRepresentativeExecution().Jobs; } return(null); }
public virtual HistoryEvent CreateActivityInstanceMigrateEvt(MigratingActivityInstance actInstance) { // create event instance HistoricActivityInstanceEventEntity evt = LoadActivityInstanceEventEntity(actInstance.ResolveRepresentativeExecution()); // initialize event InitActivityInstanceEvent(evt, actInstance, HistoryEventTypes.ActivityInstanceMigrate); return(evt); }
protected internal virtual IList <JobEntity> collectActivityInstanceJobs(MigratingActivityInstance migratingInstance) { if (migratingInstance.SourceScope.Scope) { return(migratingInstance.resolveRepresentativeExecution().Jobs); } else { return(Collections.emptyList()); } }
protected internal virtual void handleIncident(MigratingInstanceParseContext parseContext, IncidentEntity incident) { MigratingActivityInstance owningInstance = parseContext.getMigratingActivityInstanceById(incident.Execution.ActivityInstanceId); if (owningInstance != null) { parseContext.consume(incident); MigratingIncident migratingIncident = new MigratingIncident(incident, owningInstance.TargetScope); owningInstance.addMigratingDependentInstance(migratingIncident); } }
/// <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(); }
protected internal virtual void addEmergingEventSubscriptions(MigratingActivityInstance owningInstance, IDictionary <string, EventSubscriptionDeclaration> targetDeclarations) { foreach (string key in targetDeclarations.Keys) { // the event subscription will be created EventSubscriptionDeclaration declaration = targetDeclarations[key]; if (!declaration.StartEvent) { owningInstance.addEmergingDependentInstance(new MigratingEventSubscriptionInstance(declaration)); } } }
protected internal virtual MigratingActivityInstanceValidationReportImpl ValidateActivityInstance( MigratingActivityInstance migratingActivityInstance, MigratingProcessInstance migratingProcessInstance, IList <IMigratingActivityInstanceValidator> migratingActivityInstanceValidators) { var instanceReport = new MigratingActivityInstanceValidationReportImpl(migratingActivityInstance); foreach (var migratingActivityInstanceValidator in migratingActivityInstanceValidators) { migratingActivityInstanceValidator.Validate(migratingActivityInstance, migratingProcessInstance, instanceReport); } return(instanceReport); }
public virtual void OnParseMigratingInstance(MigratingInstanceParseContext parseContext, MigratingActivityInstance migratingInstance) { var execution = migratingInstance.ResolveRepresentativeExecution(); foreach (ExternalTaskEntity task in execution.ExternalTasks) { var migratingTask = new MigratingExternalTaskInstance(task, migratingInstance); migratingInstance.AddMigratingDependentInstance(migratingTask); parseContext.Consume(task); parseContext.Submit(migratingTask); } }
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); }
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"); } } }
protected internal virtual void InitActivityInstanceEvent(HistoricActivityInstanceEventEntity evt, MigratingActivityInstance migratingActivityInstance, IHistoryEventType eventType) { IPvmScope eventSource = migratingActivityInstance.TargetScope; string activityInstanceId = migratingActivityInstance.ActivityInstanceId; MigratingActivityInstance parentInstance = (MigratingActivityInstance)migratingActivityInstance.Parent; string parentActivityInstanceId = null; if (parentInstance != null) { parentActivityInstanceId = parentInstance.ActivityInstanceId; } ExecutionEntity execution = migratingActivityInstance.ResolveRepresentativeExecution(); InitActivityInstanceEvent(evt, execution, eventSource, activityInstanceId, parentActivityInstanceId, eventType); }
public virtual void OnParseMigratingInstance(MigratingInstanceParseContext parseContext, MigratingActivityInstance migratingInstance) { var callActivity = (ActivityImpl)migratingInstance.SourceScope; // A call activity is typically scope and since we guarantee stability of scope executions during migration, // the superExecution link does not have to be maintained during migration. // There are some exceptions, though: A multi-instance call activity is not scope and therefore // does not have a dedicated scope execution. In this case, the link to the super execution // must be maintained throughout migration if (!callActivity.IsScope) { var callActivityExecution = migratingInstance.ResolveRepresentativeExecution(); //CaseExecutionEntity calledCaseInstance = callActivityExecution.getSubCaseInstance(); //migratingInstance.addMigratingDependentInstance(new MigratingCalledCaseInstance(calledCaseInstance)); } }
GetMigratingVariableInstancesByName(MigratingActivityInstance activityInstance) { IDictionary <string, IList <MigratingVariableInstance> > result = new Dictionary <string, IList <MigratingVariableInstance> >(); foreach (var migratingInstance in activityInstance.MigratingDependentInstances) { if (migratingInstance is MigratingVariableInstance) { var migratingVariableInstance = (MigratingVariableInstance)migratingInstance; CollectionUtil.AddToMapOfLists(result, migratingVariableInstance.VariableName, migratingVariableInstance); } } return(result); }
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); } }
protected internal virtual void validateInstructions(CommandContext commandContext, MigratingProcessInstance migratingProcessInstance, MigratingProcessInstanceValidationReportImpl processInstanceReport) { IList <MigratingActivityInstanceValidator> migratingActivityInstanceValidators = commandContext.ProcessEngineConfiguration.MigratingActivityInstanceValidators; IList <MigratingTransitionInstanceValidator> migratingTransitionInstanceValidators = commandContext.ProcessEngineConfiguration.MigratingTransitionInstanceValidators; IList <MigratingCompensationInstanceValidator> migratingCompensationInstanceValidators = commandContext.ProcessEngineConfiguration.MigratingCompensationInstanceValidators; IDictionary <MigratingActivityInstance, MigratingActivityInstanceValidationReportImpl> instanceReports = new Dictionary <MigratingActivityInstance, MigratingActivityInstanceValidationReportImpl>(); foreach (MigratingActivityInstance migratingActivityInstance in migratingProcessInstance.MigratingActivityInstances) { MigratingActivityInstanceValidationReportImpl instanceReport = validateActivityInstance(migratingActivityInstance, migratingProcessInstance, migratingActivityInstanceValidators); instanceReports[migratingActivityInstance] = instanceReport; } foreach (MigratingEventScopeInstance migratingEventScopeInstance in migratingProcessInstance.MigratingEventScopeInstances) { MigratingActivityInstance ancestorInstance = migratingEventScopeInstance.ClosestAncestorActivityInstance; validateEventScopeInstance(migratingEventScopeInstance, migratingProcessInstance, migratingCompensationInstanceValidators, instanceReports[ancestorInstance]); } foreach (MigratingCompensationEventSubscriptionInstance migratingEventSubscriptionInstance in migratingProcessInstance.MigratingCompensationSubscriptionInstances) { MigratingActivityInstance ancestorInstance = migratingEventSubscriptionInstance.ClosestAncestorActivityInstance; validateCompensateSubscriptionInstance(migratingEventSubscriptionInstance, migratingProcessInstance, migratingCompensationInstanceValidators, instanceReports[ancestorInstance]); } foreach (MigratingActivityInstanceValidationReportImpl instanceReport in instanceReports.Values) { if (instanceReport.hasFailures()) { processInstanceReport.addActivityInstanceReport(instanceReport); } } foreach (MigratingTransitionInstance migratingTransitionInstance in migratingProcessInstance.MigratingTransitionInstances) { MigratingTransitionInstanceValidationReportImpl instanceReport = validateTransitionInstance(migratingTransitionInstance, migratingProcessInstance, migratingTransitionInstanceValidators); if (instanceReport.hasFailures()) { processInstanceReport.addTransitionInstanceReport(instanceReport); } } }
public virtual void OnParseMigratingInstance(MigratingInstanceParseContext parseContext, MigratingActivityInstance migratingInstance) { ExecutionEntity scopeExecution = migratingInstance.ResolveRepresentativeExecution(); IList <IActivityExecution> concurrentInActiveExecutions = scopeExecution.FindInactiveChildExecutions(GetInnerActivity((ActivityImpl)migratingInstance.SourceScope)); //variables on ended inner instance executions need not be migrated anywhere //since they are also not represented in the tree of migrating instances, we remove // them from the parse context here to avoid a validation exception foreach (IActivityExecution execution in concurrentInActiveExecutions) { foreach (VariableInstanceEntity variable in ((ExecutionEntity)execution).VariablesInternal) { parseContext.Consume(variable); } } }
public virtual void handle(MigratingInstanceParseContext parseContext, MigratingActivityInstance activityInstance, IList <JobEntity> elements) { IDictionary <string, TimerDeclarationImpl> sourceTimerDeclarationsInEventScope = getTimerDeclarationsByTriggeringActivity(activityInstance.SourceScope); IDictionary <string, TimerDeclarationImpl> targetTimerDeclarationsInEventScope = getTimerDeclarationsByTriggeringActivity(activityInstance.TargetScope); foreach (JobEntity job in elements) { if (!isTimerJob(job)) { // skip non timer jobs continue; } MigrationInstruction migrationInstruction = parseContext.findSingleMigrationInstruction(job.ActivityId); ActivityImpl 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 = targetTimerDeclarationsInEventScope.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(parseContext, activityInstance, sourceTimerDeclarationsInEventScope, targetTimerDeclarationsInEventScope); } }
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."); } } } } }
protected internal virtual IList <VariableInstanceEntity> CollectActivityInstanceVariables( MigratingActivityInstance instance) { throw new NotImplementedException(); IList <VariableInstanceEntity> variables = new List <VariableInstanceEntity>(); var representativeExecution = instance.ResolveRepresentativeExecution(); //ExecutionEntity parentExecution = representativeExecution.Parent; // decide for representative execution and parent execution whether to none/all/concurrentLocal variables // belong to this activity instance //var addAllRepresentativeExecutionVariables = instance.SourceScope.Scope || // representativeExecution.Concurrent; //if (addAllRepresentativeExecutionVariables) //{ // ((List<VariableInstanceEntity>) variables).AddRange(representativeExecution.VariablesInternal); //} //else //{ // ((List<VariableInstanceEntity>) variables).AddRange(getConcurrentLocalVariables(representativeExecution)); //} //var addAnyParentExecutionVariables = parentExecution != null && instance.SourceScope.Scope; //if (addAnyParentExecutionVariables) //{ // bool addAllParentExecutionVariables = parentExecution.Concurrent; // if (addAllParentExecutionVariables) // { // ((List<VariableInstanceEntity>) variables).AddRange(parentExecution.VariablesInternal); // } // else // { // ((List<VariableInstanceEntity>) variables).AddRange(getConcurrentLocalVariables(parentExecution)); // } //} return(variables); }
public virtual void OnParseMigratingInstance(MigratingInstanceParseContext parseContext, MigratingActivityInstance migratingInstance) { ExecutionEntity execution = migratingInstance.ResolveRepresentativeExecution(); foreach (TaskEntity task in execution.Tasks) { migratingInstance.AddMigratingDependentInstance(new MigratingUserTaskInstance(task, migratingInstance)); parseContext.Consume(task); ICollection <ICoreVariableInstance> variables = task.VariablesInternal; if (variables != null) { foreach (VariableInstanceEntity variable in variables) { // we don't need to represent ITask variables in the migrating instance structure because // they are migrated by the MigratingTaskInstance as well parseContext.Consume(variable); } } } }
public virtual void handle(MigratingInstanceParseContext parseContext, MigratingActivityInstance owningInstance, IList <EventSubscriptionEntity> elements) { IDictionary <string, EventSubscriptionDeclaration> targetDeclarations = getDeclarationsByTriggeringActivity(owningInstance.TargetScope); foreach (EventSubscriptionEntity eventSubscription in elements) { if (!SupportedEventTypes.Contains(eventSubscription.EventType)) { // ignore unsupported event subscriptions continue; } MigrationInstruction migrationInstruction = parseContext.findSingleMigrationInstruction(eventSubscription.ActivityId); ActivityImpl targetActivity = parseContext.getTargetActivity(migrationInstruction); if (targetActivity != null && owningInstance.migratesTo(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); } }