[jboss-svn-commits] JBL Code SVN: r20199 - in labs/jbossrules/trunk/drools-process: drools-osworkflow and 11 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed May 28 11:50:47 EDT 2008


Author: KrisVerlaenen
Date: 2008-05-28 11:50:47 -0400 (Wed, 28 May 2008)
New Revision: 20199

Added:
   labs/jbossrules/trunk/drools-process/drools-osworkflow/
   labs/jbossrules/trunk/drools-process/drools-osworkflow/.classpath
   labs/jbossrules/trunk/drools-process/drools-osworkflow/.project
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/DroolsWorkflow.java
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/OSWorkflowParser.java
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/SimpleOSWorkflowProcessTest.java
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/SimpleProcessTest.java
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/resources/
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/resources/osworkflow.xml
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/resources/simple.xml
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/resources/workflows.xml
Log:


Added: labs/jbossrules/trunk/drools-process/drools-osworkflow/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/.classpath	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/.classpath	2008-05-28 15:50:47 UTC (rev 20199)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry kind="src" path="src/test/java"/>
+	<classpathentry kind="src" path="src/test/resources"/>
+	<classpathentry kind="lib" path="lib/osworkflow-2.8.0.jar" sourcepath="C:/development/projects/osworkflow/src/java"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>
+	<classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.jar"/>
+	<classpathentry kind="lib" path="lib/oscore-2.2.5.jar"/>
+	<classpathentry kind="lib" path="lib/propertyset-1.4.jar"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/drools-compiler"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/drools-core"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>

Added: labs/jbossrules/trunk/drools-process/drools-osworkflow/.project
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/.project	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/.project	2008-05-28 15:50:47 UTC (rev 20199)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>drools-osworkflow</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>

Added: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/DroolsWorkflow.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/DroolsWorkflow.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/DroolsWorkflow.java	2008-05-28 15:50:47 UTC (rev 20199)
@@ -0,0 +1,187 @@
+package org.drools.osworkflow;
+
+import java.util.List;
+import java.util.Map;
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.WorkingMemory;
+import org.drools.process.instance.ProcessInstance;
+import org.drools.rule.Package;
+
+import com.opensymphony.module.propertyset.PropertySet;
+import com.opensymphony.workflow.FactoryException;
+import com.opensymphony.workflow.InvalidActionException;
+import com.opensymphony.workflow.InvalidEntryStateException;
+import com.opensymphony.workflow.InvalidInputException;
+import com.opensymphony.workflow.InvalidRoleException;
+import com.opensymphony.workflow.Workflow;
+import com.opensymphony.workflow.WorkflowException;
+import com.opensymphony.workflow.config.Configuration;
+import com.opensymphony.workflow.config.DefaultConfiguration;
+import com.opensymphony.workflow.loader.WorkflowDescriptor;
+import com.opensymphony.workflow.query.WorkflowExpressionQuery;
+import com.opensymphony.workflow.query.WorkflowQuery;
+
+public class DroolsWorkflow implements Workflow {
+
+	private WorkingMemory workingMemory;
+	private Configuration configuration;
+	
+	public long initialize(String workflowName, int initialAction, Map inputs)
+			throws InvalidRoleException, InvalidInputException,
+			WorkflowException, InvalidEntryStateException,
+			InvalidActionException {
+		RuleBase ruleBase = workingMemory.getRuleBase();
+		Package p = ruleBase.getPackage("org.drools.osworkflow");
+		if (p.getRuleFlows().get(workflowName) == null) {
+			WorkflowDescriptor descriptor = getConfiguration().getWorkflow(workflowName);
+			if (descriptor == null) {
+				throw new IllegalArgumentException(
+					"Could not find process with name " + workflowName);
+			}
+			Package newPackage = new Package("org.drools.osworkflow");
+			newPackage.addRuleFlow(OSWorkflowParser.parseOSWorkflow(descriptor));
+			ruleBase.addPackage(newPackage);
+		}
+		// TODO initialAction
+		return workingMemory.startProcess(workflowName, inputs).getId();
+	}
+
+	public void doAction(long id, int actionId, Map inputs)
+			throws InvalidInputException, WorkflowException {
+		ProcessInstance processInstance = findProcessInstance(id);
+		
+	}
+	
+	private ProcessInstance findProcessInstance(long id) {
+		ProcessInstance processInstance = workingMemory.getProcessInstance(id);
+		if (processInstance == null) {
+			throw new IllegalArgumentException(
+				"Could not find process instance with id " + id);
+		}
+		return processInstance;
+	}
+	
+	public int[] getAvailableActions(long id) {
+		// TODO
+		return null;
+	}
+
+	public int[] getAvailableActions(long id, Map inputs) {
+		// TODO
+		return null;
+	}
+
+	public boolean canInitialize(String workflowName, int initialStep) {
+		// TODO
+		return false;
+	}
+
+	public boolean canInitialize(String workflowName, int initialAction, Map inputs) {
+		// TODO
+		return false;
+	}
+
+	public boolean canModifyEntryState(long id, int newState) {
+		// TODO
+		return false;
+	}
+
+	public void changeEntryState(long id, int newState) throws WorkflowException {
+		// TODO
+	}
+
+	public void executeTriggerFunction(long id, int triggerId) throws WorkflowException {
+		// TODO
+	}
+
+	public List getCurrentSteps(long id) {
+		// TODO
+		return null;
+	}
+
+	public int getEntryState(long id) {
+		// TODO
+		return 0;
+	}
+
+	public List getHistorySteps(long id) {
+		// TODO
+		return null;
+	}
+
+	public PropertySet getPropertySet(long id) {
+		// TODO
+		return null;
+	}
+
+	public List getSecurityPermissions(long id) {
+		// TODO
+		return null;
+	}
+
+	public List getSecurityPermissions(long id, Map inputs) {
+		// TODO
+		return null;
+	}
+
+	public WorkflowDescriptor getWorkflowDescriptor(String workflowName) {
+		// TODO
+		return null;
+	}
+
+	public String getWorkflowName(long id) {
+		// TODO
+		return null;
+	}
+
+	public String[] getWorkflowNames() {
+		// TODO
+		return null;
+	}
+
+	public List query(WorkflowQuery query) throws WorkflowException {
+		// TODO
+		return null;
+	}
+
+	public List query(WorkflowExpressionQuery query) throws WorkflowException {
+		// TODO
+		return null;
+	}
+
+	public boolean removeWorkflowDescriptor(String workflowName) throws FactoryException {
+		// TODO
+		return false;
+	}
+
+	public boolean saveWorkflowDescriptor(String workflowName, 
+			WorkflowDescriptor descriptor, boolean replace)
+			throws FactoryException {
+		// TODO
+		return false;
+	}
+
+	public void setConfiguration(Configuration configuration) {
+		this.configuration = configuration;
+		RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+        Package p = new Package("org.drools.osworkflow");
+        ruleBase.addPackage(p);
+        workingMemory = ruleBase.newStatefulSession();
+	}
+	
+	private Configuration getConfiguration() {
+        Configuration config = (configuration != null) ? configuration : DefaultConfiguration.INSTANCE;
+        if (!config.isInitialized()) {
+            try {
+                config.load(null);
+            } catch (FactoryException e) {
+            	e.printStackTrace();
+                return null;
+            }
+        }
+        return config;
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/OSWorkflowParser.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/OSWorkflowParser.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/OSWorkflowParser.java	2008-05-28 15:50:47 UTC (rev 20199)
@@ -0,0 +1,26 @@
+package org.drools.osworkflow;
+
+import java.util.List;
+
+import org.drools.process.core.Process;
+import org.drools.ruleflow.core.RuleFlowProcess;
+
+import com.opensymphony.workflow.loader.StepDescriptor;
+import com.opensymphony.workflow.loader.WorkflowDescriptor;
+import com.opensymphony.workflow.spi.Step;
+
+public class OSWorkflowParser {
+	
+	public static Process parseOSWorkflow(WorkflowDescriptor descriptor) {
+		RuleFlowProcess process = new RuleFlowProcess();
+		process.setName(descriptor.getName());
+		process.setId(descriptor.getName());
+		process.setPackageName("org.drools.osworkflow");
+		List<StepDescriptor> steps = descriptor.getSteps();
+		for (StepDescriptor step: steps) {
+			
+		}
+		return process;
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/SimpleOSWorkflowProcessTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/SimpleOSWorkflowProcessTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/SimpleOSWorkflowProcessTest.java	2008-05-28 15:50:47 UTC (rev 20199)
@@ -0,0 +1,55 @@
+package org.drools;
+
+import java.util.Collection;
+import java.util.Collections;
+
+import junit.framework.TestCase;
+
+import com.opensymphony.workflow.Workflow;
+import com.opensymphony.workflow.basic.BasicWorkflow;
+import com.opensymphony.workflow.config.DefaultConfiguration;
+import com.opensymphony.workflow.spi.Step;
+
+public class SimpleOSWorkflowProcessTest extends TestCase {
+	
+	public void testSimpleProcess() {
+		Workflow workflow = new BasicWorkflow("testuser");
+		DefaultConfiguration config = new DefaultConfiguration();
+		workflow.setConfiguration(config);
+		try {
+			long workflowId = workflow.initialize("simple", 1, null);
+			
+			Collection<Step> currentSteps = workflow.getCurrentSteps(workflowId);
+			//verify we only have one current step
+			assertEquals("Unexpected number of current steps", 1, currentSteps.size());
+			//verify it's step 1
+			Step currentStep = currentSteps.iterator().next();
+			assertEquals("Unexpected current step", 1, currentStep.getStepId());
+
+			int[] availableActions = workflow.getAvailableActions(workflowId, Collections.EMPTY_MAP);
+			//verify we only have one available action
+			assertEquals("Unexpected number of available actions", 1, availableActions.length);
+			//verify it's action 1
+			assertEquals("Unexpected available action", 2, availableActions[0]);
+			
+			workflow.doAction(workflowId, 2, null);
+			
+			availableActions = workflow.getAvailableActions(workflowId, Collections.EMPTY_MAP);
+			//verify we only have one available action
+			assertEquals("Unexpected number of available actions", 1, availableActions.length);
+			//verify it's action 1
+			assertEquals("Unexpected available action", 3, availableActions[0]);
+			
+			workflow.doAction(workflowId, 3, null);
+			
+			availableActions = workflow.getAvailableActions(workflowId, Collections.EMPTY_MAP);
+			//verify we only have one available action
+			assertEquals("Unexpected number of available actions", 0, availableActions.length);
+			
+		} catch (Throwable t) {
+			t.printStackTrace();
+			fail();
+		}
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/SimpleProcessTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/SimpleProcessTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/SimpleProcessTest.java	2008-05-28 15:50:47 UTC (rev 20199)
@@ -0,0 +1,24 @@
+package org.drools;
+
+import junit.framework.TestCase;
+
+import org.drools.osworkflow.DroolsWorkflow;
+
+import com.opensymphony.workflow.Workflow;
+import com.opensymphony.workflow.config.DefaultConfiguration;
+
+public class SimpleProcessTest extends TestCase {
+	
+	public void testSimpleProcess() {
+		Workflow workflow = new DroolsWorkflow();
+		DefaultConfiguration config = new DefaultConfiguration();
+		workflow.setConfiguration(config);
+		try {
+			workflow.initialize("simple", 1, null);
+		} catch (Throwable t) {
+			t.printStackTrace();
+			fail(t.getMessage());
+		}
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/resources/osworkflow.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/resources/osworkflow.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/resources/osworkflow.xml	2008-05-28 15:50:47 UTC (rev 20199)
@@ -0,0 +1,6 @@
+<osworkflow>
+  <persistence class="com.opensymphony.workflow.spi.memory.MemoryWorkflowStore"/>
+  <factory class="com.opensymphony.workflow.loader.XMLWorkflowFactory">
+    <property key="resource" value="workflows.xml" />
+  </factory> 
+</osworkflow>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/resources/simple.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/resources/simple.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/resources/simple.xml	2008-05-28 15:50:47 UTC (rev 20199)
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE workflow PUBLIC 
+                 "-//OpenSymphony Group//DTD OSWorkflow 2.8//EN"
+                 "http://www.opensymphony.com/osworkflow/workflow_2_8.dtd">
+<workflow>
+  <initial-actions>
+    <action id="1" name="Start Workflow">
+      <results>
+        <unconditional-result old-status="Finished" status="Queued" step="1"/>
+      </results>
+    </action>
+  </initial-actions>
+  <steps>
+    <step id="1" name="First Draft">
+      <actions>
+        <action id="2" name="Start First Draft">
+          <restrict-to>
+            <conditions>
+              <condition type="class">
+                <arg name="class.name">
+                   com.opensymphony.workflow.util.StatusCondition
+                </arg>
+                <arg name="status">Queued</arg>
+              </condition>
+            </conditions>
+          </restrict-to>
+          <pre-functions>
+            <function type="class">
+              <arg name="class.name">
+                 com.opensymphony.workflow.util.Caller
+              </arg>
+            </function>
+          </pre-functions>
+          <results>
+            <unconditional-result old-status="Finished" status="Underway" 
+                                           step="1"  owner="${caller}"/>
+          </results>
+        </action>
+        <action id="3" name="Finish First Draft">
+          <restrict-to>
+            <conditions type="AND">
+              <condition type="class">
+                <arg name="class.name">
+                    com.opensymphony.workflow.util.StatusCondition
+                </arg>
+                <arg name="status">Underway</arg>
+              </condition>
+              <condition type="class">
+                <arg name="class.name">
+                  com.opensymphony.workflow.util.AllowOwnerOnlyCondition
+                </arg>
+              </condition>
+            </conditions>
+          </restrict-to>
+          <results>
+            <unconditional-result old-status="Finished" status="Queued" step="2"/>
+          </results>
+        </action>
+      </actions>
+    </step>
+    <step id="2" name="finished" />
+  </steps>
+</workflow>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/resources/workflows.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/resources/workflows.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/resources/workflows.xml	2008-05-28 15:50:47 UTC (rev 20199)
@@ -0,0 +1,3 @@
+<workflows>
+  <workflow name="simple" type="resource" location="simple.xml"/>
+</workflows>
\ No newline at end of file




More information about the jboss-svn-commits mailing list