Package org.jbpm.pvm.internal.migration

Source Code of org.jbpm.pvm.internal.migration.DefaultMigrationHandler

package org.jbpm.pvm.internal.migration;

import org.jbpm.api.Execution;
import org.jbpm.api.JbpmException;
import org.jbpm.api.ProcessDefinition;
import org.jbpm.api.ProcessInstance;
import org.jbpm.pvm.internal.history.HistoryEvent;
import org.jbpm.pvm.internal.history.events.ProcessInstanceMigration;
import org.jbpm.pvm.internal.model.Activity;
import org.jbpm.pvm.internal.model.ExecutionImpl;
import org.jbpm.pvm.internal.model.ProcessDefinitionImpl;


public class DefaultMigrationHandler implements MigrationHandler {

  public void migrateInstance(
          ProcessDefinition newProcessDefinition,
          ProcessInstance processInstance,
          MigrationDescriptor migrationDescriptor) {
    migrateExecutions(newProcessDefinition, processInstance, migrationDescriptor);
    logMigration(processInstance, newProcessDefinition);
  }

  private void migrateChildExecutions(
          ProcessDefinition processDefinition,
          Execution execution,
          MigrationDescriptor migrationDescriptor) {
    for (Execution child : execution.getExecutions()) {
      migrateExecutions(processDefinition, child, migrationDescriptor);
    }
  }

  private void migrateExecutions(ProcessDefinition processDefinition, Execution execution, MigrationDescriptor migrationDescriptor) {
    migrateChildExecutions(processDefinition, execution, migrationDescriptor);
    if (!(execution instanceof ExecutionImpl) || !(processDefinition instanceof ProcessDefinitionImpl))
      return;
    ((ExecutionImpl)execution).setProcessDefinition((ProcessDefinitionImpl)processDefinition);
    String oldName = ((ExecutionImpl) execution).getActivityName();
    if (oldName == null)
      return;
    String newName = migrationDescriptor.getNewName(MigrationDescriptor.ACTIVITY_TYPE, oldName);
    if (newName == null)
      newName = oldName;
    Activity newActivity = ((ProcessDefinitionImpl) processDefinition).getActivity(newName);
    if (newActivity != null) {
      ((ExecutionImpl) execution).setActivity(newActivity);
    } else {
      throw new JbpmException("the activity " + newActivity + " could not be found in the new process definition.");
    }
  }
 
  private static void logMigration(ProcessInstance processInstance, ProcessDefinition processDefinition) {
    ProcessInstanceMigration processInstanceMigrate = new ProcessInstanceMigration(processInstance, processDefinition);
    HistoryEvent.fire(processInstanceMigrate);
  }
 
}
TOP

Related Classes of org.jbpm.pvm.internal.migration.DefaultMigrationHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.