Author: koen.aers(a)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