Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
* under one or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information regarding copyright
* ownership. Camunda licenses this file to you under the Apache License,
* Version 2.0; you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.camunda.bpm.engine.impl.migration.instance.parser;
import java.util.List;
import org.camunda.bpm.engine.ProcessEngine;
import org.camunda.bpm.engine.impl.context.Context;
import org.camunda.bpm.engine.impl.interceptor.CommandContext;
import org.camunda.bpm.engine.impl.migration.instance.MigratingActivityInstance;
import org.camunda.bpm.engine.impl.migration.instance.MigratingProcessElementInstance;
import org.camunda.bpm.engine.impl.migration.instance.MigratingProcessInstance;
import org.camunda.bpm.engine.impl.migration.instance.MigratingTransitionInstance;
import org.camunda.bpm.engine.impl.migration.validation.instance.MigratingProcessInstanceValidationReportImpl;
import org.camunda.bpm.engine.impl.persistence.entity.EventSubscriptionEntity;
import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity;
import org.camunda.bpm.engine.impl.persistence.entity.ExternalTaskEntity;
import org.camunda.bpm.engine.impl.persistence.entity.IncidentEntity;
import org.camunda.bpm.engine.impl.persistence.entity.JobDefinitionEntity;
import org.camunda.bpm.engine.impl.persistence.entity.JobEntity;
import org.camunda.bpm.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.camunda.bpm.engine.impl.persistence.entity.TaskEntity;
import org.camunda.bpm.engine.impl.persistence.entity.VariableInstanceEntity;
import org.camunda.bpm.engine.impl.tree.TreeVisitor;
import org.camunda.bpm.engine.migration.MigrationPlan;
import org.camunda.bpm.engine.runtime.ActivityInstance;
import org.camunda.bpm.engine.runtime.TransitionInstance;
/**
* Builds a {@link MigratingProcessInstance}, a data structure that contains meta-data for the activity
* instances that are migrated.
*
* @author Thorben Lindhauer
*/
public class MigratingInstanceParser {
protected ProcessEngine engine;
protected MigratingInstanceParseHandler activityInstanceHandler =
new ActivityInstanceHandler();
protected MigratingInstanceParseHandler transitionInstanceHandler =
new TransitionInstanceHandler();
protected MigratingInstanceParseHandler compensationInstanceHandler =
new CompensationInstanceHandler();
protected MigratingDependentInstanceParseHandler> dependentActivityInstanceJobHandler =
new ActivityInstanceJobHandler();
protected MigratingDependentInstanceParseHandler> dependentTransitionInstanceJobHandler =
new TransitionInstanceJobHandler();
protected MigratingDependentInstanceParseHandler> dependentEventSubscriptionHandler =
new EventSubscriptionInstanceHandler();
protected MigratingDependentInstanceParseHandler> dependentVariableHandler =
new VariableInstanceHandler();
protected MigratingInstanceParseHandler incidentHandler =
new IncidentInstanceHandler();
public MigratingInstanceParser(ProcessEngine engine) {
this.engine = engine;
}
public MigratingProcessInstance parse(String processInstanceId, MigrationPlan migrationPlan, MigratingProcessInstanceValidationReportImpl processInstanceReport) {
CommandContext commandContext = Context.getCommandContext();
List eventSubscriptions = fetchEventSubscriptions(commandContext, processInstanceId);
List executions = fetchExecutions(commandContext, processInstanceId);
List externalTasks = fetchExternalTasks(commandContext, processInstanceId);
List incidents = fetchIncidents(commandContext, processInstanceId);
List jobs = fetchJobs(commandContext, processInstanceId);
List tasks = fetchTasks(commandContext, processInstanceId);
List variables = fetchVariables(commandContext, processInstanceId);
ExecutionEntity processInstance = commandContext.getExecutionManager().findExecutionById(processInstanceId);
processInstance.restoreProcessInstance(executions, eventSubscriptions, variables, tasks, jobs, incidents, externalTasks);
ProcessDefinitionEntity targetProcessDefinition = Context
.getProcessEngineConfiguration()
.getDeploymentCache()
.findDeployedProcessDefinitionById(migrationPlan.getTargetProcessDefinitionId());
List targetJobDefinitions = fetchJobDefinitions(commandContext, targetProcessDefinition.getId());
final MigratingInstanceParseContext parseContext = new MigratingInstanceParseContext(this, migrationPlan, processInstance, targetProcessDefinition)
.eventSubscriptions(eventSubscriptions)
.externalTasks(externalTasks)
.incidents(incidents)
.jobs(jobs)
.tasks(tasks)
.targetJobDefinitions(targetJobDefinitions)
.variables(variables);
ActivityInstance activityInstance = engine.getRuntimeService().getActivityInstance(processInstanceId);
ActivityInstanceWalker activityInstanceWalker = new ActivityInstanceWalker(activityInstance);
activityInstanceWalker.addPreVisitor(new TreeVisitor() {
@Override
public void visit(ActivityInstance obj) {
activityInstanceHandler.handle(parseContext, obj);
}
});
activityInstanceWalker.walkWhile();
CompensationEventSubscriptionWalker compensateSubscriptionsWalker = new CompensationEventSubscriptionWalker(
parseContext.getMigratingActivityInstances());
compensateSubscriptionsWalker.addPreVisitor(new TreeVisitor() {
@Override
public void visit(EventSubscriptionEntity obj) {
compensationInstanceHandler.handle(parseContext, obj);
}
});
compensateSubscriptionsWalker.walkWhile();
for (IncidentEntity incidentEntity : incidents) {
incidentHandler.handle(parseContext, incidentEntity);
}
parseContext.validateNoEntitiesLeft(processInstanceReport);
return parseContext.getMigratingProcessInstance();
}
public MigratingInstanceParseHandler getActivityInstanceHandler() {
return activityInstanceHandler;
}
public MigratingInstanceParseHandler getTransitionInstanceHandler() {
return transitionInstanceHandler;
}
public MigratingDependentInstanceParseHandler> getDependentEventSubscriptionHandler() {
return dependentEventSubscriptionHandler;
}
public MigratingDependentInstanceParseHandler> getDependentActivityInstanceJobHandler() {
return dependentActivityInstanceJobHandler;
}
public MigratingDependentInstanceParseHandler> getDependentTransitionInstanceJobHandler() {
return dependentTransitionInstanceJobHandler;
}
public MigratingInstanceParseHandler getIncidentHandler() {
return incidentHandler;
}
public MigratingDependentInstanceParseHandler> getDependentVariablesHandler() {
return dependentVariableHandler;
}
protected List fetchExecutions(CommandContext commandContext, String processInstanceId) {
return commandContext.getExecutionManager().findExecutionsByProcessInstanceId(processInstanceId);
}
protected List fetchEventSubscriptions(CommandContext commandContext, String processInstanceId) {
return commandContext.getEventSubscriptionManager().findEventSubscriptionsByProcessInstanceId(processInstanceId);
}
protected List fetchExternalTasks(CommandContext commandContext, String processInstanceId) {
return commandContext.getExternalTaskManager().findExternalTasksByProcessInstanceId(processInstanceId);
}
protected List fetchJobs(CommandContext commandContext, String processInstanceId) {
return commandContext.getJobManager().findJobsByProcessInstanceId(processInstanceId);
}
protected List fetchIncidents(CommandContext commandContext, String processInstanceId) {
return commandContext.getIncidentManager().findIncidentsByProcessInstance(processInstanceId);
}
protected List fetchTasks(CommandContext commandContext, String processInstanceId) {
return commandContext.getTaskManager().findTasksByProcessInstanceId(processInstanceId);
}
protected List fetchJobDefinitions(CommandContext commandContext, String processDefinitionId) {
return commandContext.getJobDefinitionManager().findByProcessDefinitionId(processDefinitionId);
}
protected List fetchVariables(CommandContext commandContext, String processInstanceId) {
return commandContext.getVariableInstanceManager().findVariableInstancesByProcessInstanceId(processInstanceId);
}
}