[jboss-svn-commits] JBL Code SVN: r24904 - labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jan 23 14:48:12 EST 2009


Author: salaboy21
Date: 2009-01-23 14:48:12 -0500 (Fri, 23 Jan 2009)
New Revision: 24904

Modified:
   labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java
Log:
adding the variables to the ProcessInstanceInfo

Modified: labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java
===================================================================
--- labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java	2009-01-23 19:46:52 UTC (rev 24903)
+++ labs/jbossrules/branches/salaboy_VariablePersistenceStrategy/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java	2009-01-23 19:48:12 UTC (rev 24904)
@@ -3,16 +3,25 @@
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
+import javax.persistence.CascadeType;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
+import javax.persistence.JoinColumn;
 import javax.persistence.Lob;
+import javax.persistence.OneToMany;
+import javax.persistence.PrePersist;
 import javax.persistence.PreUpdate;
 import javax.persistence.Transient;
 
@@ -20,6 +29,8 @@
 import org.drools.marshalling.MarshallerReaderContext;
 import org.drools.marshalling.MarshallerWriteContext;
 import org.drools.marshalling.OutputMarshaller;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.instance.context.variable.VariableScopeInstance;
 import org.drools.ruleflow.instance.RuleFlowProcessInstance;
 import org.drools.runtime.process.ProcessInstance;
 import org.hibernate.annotations.CollectionOfElements;
@@ -39,7 +50,12 @@
 	@CollectionOfElements
 	private Set<String> eventTypes = new HashSet<String>();
 	private @Transient ProcessInstance processInstance;
-	
+
+    @OneToMany(cascade=CascadeType.ALL)
+    @JoinColumn(name="process_instance")
+    private List<PersistedVariable> variables = new ArrayList<PersistedVariable>();
+
+
 	ProcessInstanceInfo() {
 	}
 	
@@ -47,6 +63,25 @@
 		this.processInstance = processInstance;
 		this.processId = processInstance.getProcessId();
 		startDate = new Date();
+        VariableScopeInstance variableScopeInstance = (VariableScopeInstance) ((RuleFlowProcessInstance)processInstance).getContextInstance( VariableScope.VARIABLE_SCOPE );
+        Map<String, Object> processVariables = variableScopeInstance.getVariables();
+
+        List<String> keys = new ArrayList<String>( processVariables.keySet() );
+            Collections.sort( keys,
+                              new Comparator<String>() {
+                                  public int compare(String o1,
+                                                     String o2) {
+                                      return o1.compareTo( o2 );
+                                  }
+                              } );
+        VariablePersistenceStrategy persistenceStrategy = VariablePersistenceStrategyFactory.getVariablePersistenceStrategyFactory();
+        clearVariables();
+        for ( String key : keys ) {
+            PersistedVariable variable = persistenceStrategy.persistVariable(key, processVariables.get( key ));
+
+            addVariables(variable);
+        }
+
 	}
 	
 	public long getId() {
@@ -92,18 +127,18 @@
 		}
 		return processInstance;
 	}
-
+  
 	@PreUpdate
 	public void update() {
 		ByteArrayOutputStream baos = new ByteArrayOutputStream();
 		try {
 			MarshallerWriteContext context = new MarshallerWriteContext(baos, null, null, null, null);
-			OutputMarshaller.writeProcessInstance(context, (RuleFlowProcessInstance) processInstance);
+			OutputMarshaller.writeProcessInstance(context, (RuleFlowProcessInstance) processInstance, false);
 			context.close();
 		} catch (IOException e) {
 			throw new IllegalArgumentException(
 				"IOException while storing process instance " + processInstance.getId() + ": " + e.getMessage());
-		}
+		} 
 		byte[] newByteArray = baos.toByteArray();
 		if (!Arrays.equals(newByteArray, processInstanceByteArray)) {
 			this.state = processInstance.getState();
@@ -115,5 +150,27 @@
 			}
 		}
 	}
+
+    /**
+     * @return the variables
+     */
+    public List<PersistedVariable> getVariables() {
+        return variables;
+    }
+
+    /**
+     * @param variables the variables to set
+     */
+    public void setVariables(List<PersistedVariable> variables) {
+        this.variables = variables;
+    }
+
+    public void addVariables(PersistedVariable variable){
+        this.getVariables().add(variable);
+    }
+    public void clearVariables(){
+        this.getVariables().clear();
+    }
+
 	
 }




More information about the jboss-svn-commits mailing list