[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