[jbpm-commits] JBoss JBPM SVN: r5698 - in jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal: migration and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Mon Oct 5 14:41:15 EDT 2009


Author: koen.aers at jboss.com
Date: 2009-10-05 14:41:14 -0400 (Mon, 05 Oct 2009)
New Revision: 5698

Added:
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/migration/
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/migration/InstanceMigrator.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/migration/MigrationDescriptor.java
Log:
instance migrator and migration descriptor

Added: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/migration/InstanceMigrator.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/migration/InstanceMigrator.java	                        (rev 0)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/migration/InstanceMigrator.java	2009-10-05 18:41:14 UTC (rev 5698)
@@ -0,0 +1,84 @@
+package org.jbpm.pvm.internal.migration;
+
+import java.util.List;
+
+import org.jbpm.api.Execution;
+import org.jbpm.api.ExecutionService;
+import org.jbpm.api.HistoryService;
+import org.jbpm.api.ProcessDefinition;
+import org.jbpm.api.ProcessDefinitionQuery;
+import org.jbpm.api.ProcessInstance;
+import org.jbpm.api.ProcessInstanceQuery;
+import org.jbpm.api.history.HistoryProcessInstance;
+import org.jbpm.pvm.internal.env.EnvironmentImpl;
+import org.jbpm.pvm.internal.history.model.HistoryProcessInstanceImpl;
+import org.jbpm.pvm.internal.history.model.HistoryProcessInstanceMigrationImpl;
+import org.jbpm.pvm.internal.model.Activity;
+import org.jbpm.pvm.internal.model.ExecutionImpl;
+import org.jbpm.pvm.internal.model.ProcessDefinitionImpl;
+import org.jbpm.pvm.internal.session.RepositorySession;
+
+public class InstanceMigrator {
+
+  public static void migrateAll(ProcessDefinition processDefinition, MigrationDescriptor migrationDescriptor) {
+    String oldVersionId = getOldVersionId(processDefinition.getName());
+    ExecutionService executionService = (ExecutionService) EnvironmentImpl.getFromCurrent(ExecutionService.class);
+    ProcessInstanceQuery processInstanceQuery = executionService
+      .createProcessInstanceQuery()
+      .processDefinitionId(oldVersionId);
+    List<ProcessInstance> processInstances = processInstanceQuery.list();
+    for (ProcessInstance processInstance : processInstances) {
+      migrateInstance(processDefinition, processInstance, migrationDescriptor);
+    }
+  }
+
+  public static void migrateInstance(
+          ProcessDefinition processDefinition, 
+          ProcessInstance processInstance, 
+          MigrationDescriptor migrationDescriptor) {
+    migrateExecutions(processDefinition, processInstance, migrationDescriptor);
+    // migrateSwimlanes(processInstance, migrationDescriptor);
+    // migrateVariables(processInstance, migrationDescriptor);
+    logMigration(processInstance, processDefinition.getVersion());
+  }
+
+  private static void migrateExecutions(ProcessDefinition processDefinition, Execution execution, MigrationDescriptor migrationDescriptor) {
+    for (Execution child : execution.getExecutions()) {
+      migrateExecutions(processDefinition, child, 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)
+      return;
+    Activity newActivity = ((ProcessDefinitionImpl) processDefinition).getActivity(newName);
+    if (newActivity != null) {
+      ((ExecutionImpl) execution).setActivity(newActivity);
+    }
+  }
+
+  private static void logMigration(ProcessInstance processInstance, int lastVersion) {
+    HistoryService historyService = (HistoryService)EnvironmentImpl.getFromCurrent(HistoryService.class);
+    HistoryProcessInstance historyProcessInstance = historyService
+      .createHistoryProcessInstanceQuery()
+      .processInstanceId(processInstance.getId())
+      .uniqueResult();
+    if (!(historyProcessInstance instanceof HistoryProcessInstanceImpl)) return;
+    ((HistoryProcessInstanceImpl)historyProcessInstance).addDetail(new HistoryProcessInstanceMigrationImpl(lastVersion - 1, lastVersion));
+  }
+
+  private static String getOldVersionId(String processDefinitionName) {
+    RepositorySession repositorySession = EnvironmentImpl.getFromCurrent(RepositorySession.class);
+    ProcessDefinition process = repositorySession.createProcessDefinitionQuery().processDefinitionName(processDefinitionName).orderDesc(
+            ProcessDefinitionQuery.PROPERTY_VERSION).page(1, 1).uniqueResult();
+    if (process != null) {
+      return process.getId();
+    }
+    return null;
+  }
+
+}


Property changes on: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/migration/InstanceMigrator.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/migration/MigrationDescriptor.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/migration/MigrationDescriptor.java	                        (rev 0)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/migration/MigrationDescriptor.java	2009-10-05 18:41:14 UTC (rev 5698)
@@ -0,0 +1,32 @@
+package org.jbpm.pvm.internal.migration;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class MigrationDescriptor {
+
+  public static final String ACTIVITY_TYPE = "org.jbpm.pvm.internal.migration.activity";
+  public static final String VARIABLE_TYPE = "org.jbpm.pvm.internal.migration.variable";
+  public static final String SWIMLANE_TYPE = "org.jbpm.pvm.internal.migration.swimlane";
+
+  private Map<String, Map<String, String>> migrationMap = new HashMap<String, Map<String, String>>();
+
+  public void addMigrationElement(String type, String oldName, String newName) {
+    Map<String, String> typeMap = migrationMap.get(type);
+    if (typeMap == null) {
+      typeMap = new HashMap<String, String>();
+      migrationMap.put(type, typeMap);
+    }
+    typeMap.put(oldName, newName);
+  }
+
+  public String getNewName(String type, String oldName) {
+    String result = null;
+    Map<String, String> typeMap = migrationMap.get(type);
+    if (typeMap != null) {
+      result = typeMap.get(oldName);
+    }
+    return result;
+  }
+
+}


Property changes on: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/migration/MigrationDescriptor.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain



More information about the jbpm-commits mailing list