[jboss-svn-commits] JBL Code SVN: r26714 - in labs/jbossrules/trunk/drools-process: drools-gwt-console and 22 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun May 24 19:26:10 EDT 2009


Author: KrisVerlaenen
Date: 2009-05-24 19:26:09 -0400 (Sun, 24 May 2009)
New Revision: 26714

Added:
   labs/jbossrules/trunk/drools-process/drools-gwt-console/
   labs/jbossrules/trunk/drools-process/drools-gwt-console/.classpath
   labs/jbossrules/trunk/drools-process/drools-gwt-console/.project
   labs/jbossrules/trunk/drools-process/drools-gwt-console/pom.xml
   labs/jbossrules/trunk/drools-process/drools-gwt-console/src/
   labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/
   labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/
   labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/
   labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/
   labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/
   labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/
   labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowCommandDelegate.java
   labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowManagementFactory.java
   labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowProcessManagement.java
   labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowTaskManagement.java
   labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowTransform.java
   labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowUserManagement.java
   labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/resources/
   labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/resources/ChangeSet.xml
   labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/resources/META-INF/
   labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/resources/META-INF/services/
   labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/resources/META-INF/services/org.jboss.bpm.console.server.integration.ManagementFactory
   labs/jbossrules/trunk/drools-process/drools-gwt-form/
   labs/jbossrules/trunk/drools-process/drools-gwt-form/.classpath
   labs/jbossrules/trunk/drools-process/drools-gwt-form/.project
   labs/jbossrules/trunk/drools-process/drools-gwt-form/pom.xml
   labs/jbossrules/trunk/drools-process/drools-gwt-form/src/
   labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/
   labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/java/
   labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/java/org/
   labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/java/org/drools/
   labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/java/org/drools/integration/
   labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/java/org/drools/integration/console/
   labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/java/org/drools/integration/console/forms/
   labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/java/org/drools/integration/console/forms/ConfigurationUtils.java
   labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/java/org/drools/integration/console/forms/TaskDispatcherPluginImpl.java
   labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/resources/
   labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/resources/META-INF/
   labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/resources/META-INF/services/
   labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/resources/META-INF/services/org.jboss.bpm.console.server.plugin.TaskDispatcherPlugin
   labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/resources/MyTask.ftl
Log:
JBRULES-2097: Implementation for the BPM web-console
 - initial implementation

Added: labs/jbossrules/trunk/drools-process/drools-gwt-console/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-console/.classpath	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-console/.classpath	2009-05-24 23:26:09 UTC (rev 26714)
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.1/activation-1.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.6/antlr-2.7.6.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.1.1/antlr-runtime-3.1.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-cli/2.0-SNAPSHOT/commons-cli-2.0-SNAPSHOT.jar"/>
+	<classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.1/commons-collections-3.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-compress/1.0-SNAPSHOT/commons-compress-1.0-SNAPSHOT.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-exec/1.0.0-SNAPSHOT/commons-exec-1.0.0-SNAPSHOT.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-finder/1.0-SNAPSHOT/commons-finder-1.0-SNAPSHOT.jar"/>
+	<classpathentry kind="var" path="M2_REPO/commons-io/commons-io/1.4/commons-io-1.4.jar"/>
+	<classpathentry kind="var" path="M2_REPO/commons-net/commons-net/2.0/commons-net-2.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.jar"/>
+	<classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/drools/drools-api/5.0.1.SNAPSHOT/drools-api-5.0.1.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-api/5.0.1.SNAPSHOT/drools-api-5.0.1.SNAPSHOT-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/drools/drools-bam/5.0.1.SNAPSHOT/drools-bam-5.0.1.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-bam/5.0.1.SNAPSHOT/drools-bam-5.0.1.SNAPSHOT-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/drools/drools-compiler/5.0.1.SNAPSHOT/drools-compiler-5.0.1.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-compiler/5.0.1.SNAPSHOT/drools-compiler-5.0.1.SNAPSHOT-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/drools/drools-core/5.0.1.SNAPSHOT/drools-core-5.0.1.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-core/5.0.1.SNAPSHOT/drools-core-5.0.1.SNAPSHOT-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/drools/drools-process-task/5.0.1.SNAPSHOT/drools-process-task-5.0.1.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-process-task/5.0.1.SNAPSHOT/drools-process-task-5.0.1.SNAPSHOT-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/drools/drools-workitems/5.0.1.SNAPSHOT/drools-workitems-5.0.1.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-workitems/5.0.1.SNAPSHOT/drools-workitems-5.0.1.SNAPSHOT-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/hibernate/ejb3-persistence/1.0.2.GA/ejb3-persistence-1.0.2.GA.jar"/>
+	<classpathentry kind="var" path="M2_REPO/javax/el/el-api/1.0/el-api-1.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/com/google/gdata/gdata-calendar/2.0/gdata-calendar-2.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/com/google/gdata/gdata-client/1.0/gdata-client-1.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/com/google/gdata/gdata-core/1.0/gdata-core-1.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/com/google/code/gson/gson/1.2.2/gson-1.2.2.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/bpm/gwt-console-rpc/1.0.0-SNAPSHOT/gwt-console-rpc-1.0.0-SNAPSHOT.jar" sourcepath="M2_REPO/org/jboss/bpm/gwt-console-rpc/1.0.0-SNAPSHOT/gwt-console-rpc-1.0.0-SNAPSHOT-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/bpm/gwt-console-server-integration/1.0.0-SNAPSHOT/gwt-console-server-integration-1.0.0-SNAPSHOT.jar" sourcepath="M2_REPO/org/jboss/bpm/gwt-console-server-integration/1.0.0-SNAPSHOT/gwt-console-server-integration-1.0.0-SNAPSHOT-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/com/h2database/h2/1.0.77/h2-1.0.77.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-annotations/3.4.0.GA/hibernate-annotations-3.4.0.GA.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-commons-annotations/3.1.0.GA/hibernate-commons-annotations-3.1.0.GA.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-core/3.3.0.SP1/hibernate-core-3.3.0.SP1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-entitymanager/3.4.0.GA/hibernate-entitymanager-3.4.0.GA.jar"/>
+	<classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
+	<classpathentry kind="var" path="M2_REPO/javassist/javassist/3.4.GA/javassist-3.4.GA.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/el/jboss-el/1.0_02.CR2/jboss-el-1.0_02.CR2.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jboss/seam/jboss-seam/2.1.1.GA/jboss-seam-2.1.1.GA.jar"/>
+	<classpathentry kind="var" path="M2_REPO/jdom/jdom/1.0/jdom-1.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.6/joda-time-1.6.jar"/>
+	<classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.1/jta-1.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/javax/mail/mail/1.4/mail-1.4.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/apache/mina/mina-core/2.0.0-M3/mina-core-2.0.0-M3.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.9-SNAPSHOT/mvel2-2.0.9-SNAPSHOT.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/rome/rome/0.9/rome-0.9.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.5.0/slf4j-api-1.5.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-jdk14/1.5.2/slf4j-jdk14-1.5.2.jar"/>
+	<classpathentry kind="var" path="M2_REPO/jivesoftware/smack/3.0.4/smack-3.0.4.jar"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/drools-persistence-jpa"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

Added: labs/jbossrules/trunk/drools-process/drools-gwt-console/.project
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-console/.project	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-console/.project	2009-05-24 23:26:09 UTC (rev 26714)
@@ -0,0 +1,13 @@
+<projectDescription>
+  <name>drools-gwt-console</name>
+  <comment>A rule production system</comment>
+  <projects/>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
+</projectDescription>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-gwt-console/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-console/pom.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-console/pom.xml	2009-05-24 23:26:09 UTC (rev 26714)
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>drools</artifactId>
+    <groupId>org.drools</groupId>
+    <version>5.0.1.SNAPSHOT</version>
+  </parent>
+
+  <artifactId>drools-gwt-console</artifactId>
+  <packaging>jar</packaging>
+  <name>Drools :: GWT Console</name>
+
+  <dependencies>  
+
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-api</artifactId>
+    </dependency>         
+    
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-core</artifactId>
+    </dependency>         
+
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-compiler</artifactId>
+    </dependency>         
+
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-process-task</artifactId>
+    </dependency>         
+
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-bam</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.jboss.bpm</groupId>
+      <artifactId>gwt-console-server-integration</artifactId>
+      <version>1.0.0-SNAPSHOT</version>
+    </dependency>
+    
+  </dependencies>
+  
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <includes>
+            <include>**/*Test.java</include>
+          </includes>
+        </configuration>
+      </plugin>      
+    </plugins>
+  </build>
+
+</project>

Added: labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowCommandDelegate.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowCommandDelegate.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowCommandDelegate.java	2009-05-24 23:26:09 UTC (rev 26714)
@@ -0,0 +1,135 @@
+package org.drools.integration.console;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.agent.KnowledgeAgent;
+import org.drools.agent.KnowledgeAgentFactory;
+import org.drools.definition.KnowledgePackage;
+import org.drools.definition.process.Process;
+import org.drools.io.ResourceFactory;
+import org.drools.persistence.jpa.JPAKnowledgeService;
+import org.drools.process.audit.ProcessInstanceDbLog;
+import org.drools.process.audit.ProcessInstanceLog;
+import org.drools.process.audit.WorkingMemoryDbLogger;
+import org.drools.process.workitem.wsht.CommandBasedWSHumanTaskHandler;
+import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.ProcessInstance;
+
+public class DroolsFlowCommandDelegate {
+	
+	private static StatefulKnowledgeSession ksession;
+	
+	private StatefulKnowledgeSession newStatefulKnowledgeSession() {
+		try {
+			KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent("Guvnor default");
+			kagent.applyChangeSet(ResourceFactory.newClassPathResource("ChangeSet.xml"));
+			kagent.monitorResourceChangeEvents(false);
+			KnowledgeBase kbase = kagent.getKnowledgeBase();
+			StatefulKnowledgeSession ksession = null;
+			EntityManagerFactory emf = Persistence.createEntityManagerFactory(
+					"org.drools.persistence.jpa");
+	        Environment env = KnowledgeBaseFactory.newEnvironment();
+	        env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);
+			try {
+				ksession = JPAKnowledgeService.loadStatefulKnowledgeSession(
+					1, kbase, null, env);
+				System.out.println("Loading session data ...");
+			} catch (RuntimeException e) {
+				if ("Could not find session data for id 1".equals(e.getMessage())) {
+					ksession = JPAKnowledgeService.newStatefulKnowledgeSession(
+						kbase, null, env);
+					System.out.println("Creating new session data ...");
+				} else {
+					throw e;
+				}
+			}
+			new WorkingMemoryDbLogger(ksession);
+			ksession.getWorkItemManager().registerWorkItemHandler(
+				"Human Task", new CommandBasedWSHumanTaskHandler(ksession));
+			System.out.println("Successfully loaded default package from Guvnor");
+			return ksession;
+		} catch (Throwable t) {
+			t.printStackTrace();
+			throw new RuntimeException(
+				"Could not initialize stateful knowledge session: "
+					+ t.getMessage());
+		}
+	}
+	
+	private StatefulKnowledgeSession getSession() {
+		if (ksession == null) {
+			ksession = newStatefulKnowledgeSession();
+		}
+		return ksession;
+	}
+	
+	public List<Process> getProcesses() {
+		List<Process> result = new ArrayList<Process>();
+		for (KnowledgePackage kpackage: getSession().getKnowledgeBase().getKnowledgePackages()) {
+			result.addAll(kpackage.getProcesses());
+		}
+		return result;
+	}
+	
+	public Process getProcess(String processId) {
+		for (KnowledgePackage kpackage: getSession().getKnowledgeBase().getKnowledgePackages()) {
+			for (Process process: kpackage.getProcesses()) {
+				if (processId.equals(process.getId())) {
+					return process;
+				}
+			}
+		}
+		return null;
+	}
+	
+	public Process getProcessByName(String name) {
+		for (KnowledgePackage kpackage: getSession().getKnowledgeBase().getKnowledgePackages()) {
+			for (Process process: kpackage.getProcesses()) {
+				if (name.equals(process.getName())) {
+					return process;
+				}
+			}
+		}
+		return null;
+	}
+
+	public void removeProcess(String processId) {
+		throw new UnsupportedOperationException();
+	}
+	
+	public ProcessInstanceLog getProcessInstanceLog(String processInstanceId) {
+		return ProcessInstanceDbLog.findProcessInstance(new Long(processInstanceId));
+	}
+
+	public List<ProcessInstanceLog> getProcessInstanceLogsByProcessId(String processId) {
+		return ProcessInstanceDbLog.findProcessInstances(processId);
+	}
+	
+	public ProcessInstanceLog startProcess(String processId) {
+		long processInstanceId = ksession.startProcess(processId).getId();
+		return ProcessInstanceDbLog.findProcessInstance(processInstanceId);
+	}
+	
+	public void abortProcessInstance(String processInstanceId) {
+		ProcessInstance processInstance = ksession.getProcessInstance(new Long(processInstanceId));
+		if (processInstance != null) {
+			ksession.abortProcessInstance(new Long(processInstanceId));
+		} else {
+			throw new IllegalArgumentException("Could not find process instance " + processInstanceId);
+		}
+	}
+	
+	public void signalExecution(String executionId, String signal) {
+		ksession.getProcessInstance(new Long(executionId))
+			.signalEvent("signal", signal);
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowManagementFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowManagementFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowManagementFactory.java	2009-05-24 23:26:09 UTC (rev 26714)
@@ -0,0 +1,22 @@
+package org.drools.integration.console;
+
+import org.jboss.bpm.console.server.integration.ManagementFactory;
+import org.jboss.bpm.console.server.integration.ProcessManagement;
+import org.jboss.bpm.console.server.integration.TaskManagement;
+import org.jboss.bpm.console.server.integration.UserManagement;
+
+public class DroolsFlowManagementFactory extends ManagementFactory {
+
+	public ProcessManagement createProcessManagement() {
+		return new DroolsFlowProcessManagement();
+	}
+
+	public TaskManagement createTaskManagement() {
+		return new DroolsFlowTaskManagement();
+	}
+
+	public UserManagement createUserManagement() {
+		return new DroolsFlowUserManagement();
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowProcessManagement.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowProcessManagement.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowProcessManagement.java	2009-05-24 23:26:09 UTC (rev 26714)
@@ -0,0 +1,85 @@
+package org.drools.integration.console;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.process.audit.ProcessInstanceLog;
+import org.drools.definition.process.Process;
+import org.jboss.bpm.console.client.model.ProcessDefinitionRef;
+import org.jboss.bpm.console.client.model.ProcessInstanceRef;
+import org.jboss.bpm.console.client.model.ProcessInstanceRef.RESULT;
+import org.jboss.bpm.console.client.model.ProcessInstanceRef.STATE;
+import org.jboss.bpm.console.server.integration.ProcessManagement;
+
+public class DroolsFlowProcessManagement implements ProcessManagement {
+
+	private DroolsFlowCommandDelegate delegate;
+	
+    public DroolsFlowProcessManagement() {
+        delegate = new DroolsFlowCommandDelegate();
+    }
+    
+	public List<ProcessDefinitionRef> getProcessDefinitions() {
+		List<Process> processes = delegate.getProcesses();
+		List<ProcessDefinitionRef> result = new ArrayList<ProcessDefinitionRef>();
+		for (Process process: processes) {
+			result.add(DroolsFlowTransform.processDefinition(process));
+		}
+		return result;
+	}
+
+	public ProcessDefinitionRef getProcessDefinition(String definitionId) {
+		Process process = delegate.getProcess(definitionId);
+		return DroolsFlowTransform.processDefinition(process);
+	}
+
+	public List<ProcessDefinitionRef> removeProcessDefinition(String definitionId) {
+		delegate.removeProcess(definitionId);
+	    return getProcessDefinitions();
+	}
+
+	public ProcessInstanceRef getProcessInstance(String instanceId) {
+		ProcessInstanceLog processInstance = delegate.getProcessInstanceLog(instanceId);
+		return DroolsFlowTransform.processInstance(processInstance);
+	}
+
+	public List<ProcessInstanceRef> getProcessInstances(String definitionId) {
+		List<ProcessInstanceLog> processInstances = delegate.getProcessInstanceLogsByProcessId(definitionId);
+		List<ProcessInstanceRef> result = new ArrayList<ProcessInstanceRef>();
+		for (ProcessInstanceLog processInstance: processInstances) {
+			result.add(DroolsFlowTransform.processInstance(processInstance));
+		}
+		return result;
+	}
+
+	public ProcessInstanceRef newInstance(String instanceId) {
+		ProcessInstanceLog processInstance = delegate.startProcess(instanceId);
+		return DroolsFlowTransform.processInstance(processInstance);
+	}
+
+	public void setProcessState(String instanceId, STATE nextState) {
+		if (nextState == STATE.ENDED) {
+			delegate.abortProcessInstance(instanceId);
+		} else {
+			throw new UnsupportedOperationException();
+		}
+	}
+	
+	public void signalExecution(String executionId, String signal) {
+		delegate.signalExecution(executionId, signal);
+	}
+
+	public void deploy(String fileName, String contentType, InputStream deployment) {
+		// Do nothing
+	}
+
+	public void deleteInstance(String instanceId) {
+		delegate.abortProcessInstance(instanceId);
+	}
+
+	public void endInstance(String instanceId, RESULT result) {
+		delegate.abortProcessInstance(instanceId);
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowTaskManagement.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowTaskManagement.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowTaskManagement.java	2009-05-24 23:26:09 UTC (rev 26714)
@@ -0,0 +1,145 @@
+package org.drools.integration.console;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+import org.drools.SystemEventListenerFactory;
+import org.drools.process.workitem.wsht.BlockingGetTaskResponseHandler;
+import org.drools.task.AccessType;
+import org.drools.task.Status;
+import org.drools.task.Task;
+import org.drools.task.query.TaskSummary;
+import org.drools.task.service.ContentData;
+import org.drools.task.service.MinaTaskClient;
+import org.drools.task.service.TaskClientHandler;
+import org.drools.task.service.responsehandlers.BlockingTaskOperationResponseHandler;
+import org.drools.task.service.responsehandlers.BlockingTaskSummaryResponseHandler;
+import org.jboss.bpm.console.client.model.TaskRef;
+import org.jboss.bpm.console.server.integration.TaskManagement;
+
+public class DroolsFlowTaskManagement implements TaskManagement {
+	
+	private String ipAddress = "127.0.0.1";
+	private int port = 9123;
+	private MinaTaskClient client;
+
+	public void setConnection(String ipAddress, int port) {
+		this.ipAddress = ipAddress;
+		this.port = port;
+	}
+	
+	public void connect() {
+		if (client == null) {
+			client = new MinaTaskClient(
+				"org.drools.process.workitem.wsht.WSHumanTaskHandler",
+				new TaskClientHandler(SystemEventListenerFactory.getSystemEventListener()));
+			NioSocketConnector connector = new NioSocketConnector();
+			SocketAddress address = new InetSocketAddress(ipAddress, port);
+			boolean connected = client.connect(connector, address);
+			if (!connected) {
+				throw new IllegalArgumentException(
+					"Could not connect task client");
+			}
+		}
+	}
+	
+	public TaskRef getTaskById(long taskId) {
+		connect();
+		BlockingGetTaskResponseHandler responseHandler = new BlockingGetTaskResponseHandler();
+		client.getTask(taskId, responseHandler);
+        Task task = responseHandler.getTask();
+        return DroolsFlowTransform.task(task);
+	}
+
+	public void assignTask(long taskId, String idRef) {
+		connect();
+		BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
+		client.claim(taskId, idRef, responseHandler);
+		responseHandler.waitTillDone(5000);
+	}
+
+	@SuppressWarnings("unchecked")
+	public void completeTask(long taskId, Map data) {
+		connect();
+		BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
+		// TODO: fixme
+		client.start(taskId, "admin", responseHandler);
+		responseHandler.waitTillDone(5000);
+		responseHandler = new BlockingTaskOperationResponseHandler();
+		ContentData contentData = null;
+		if (data != null) {
+			ByteArrayOutputStream bos = new ByteArrayOutputStream();
+			ObjectOutputStream out;
+			try {
+				out = new ObjectOutputStream(bos);
+				out.writeObject(data);
+				out.close();
+				contentData = new ContentData();
+				contentData.setContent(bos.toByteArray());
+				contentData.setAccessType(AccessType.Inline);
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+		// TODO: fixme
+		client.complete(taskId, "admin", contentData, responseHandler);
+		responseHandler.waitTillDone(5000);
+	}
+
+	@SuppressWarnings("unchecked")
+	public void completeTask(long taskId, String outcome, Map data) {
+		data.put("outcome", outcome);
+		completeTask(taskId, data);
+	}
+
+	public void releaseTask(long taskId) {
+		connect();
+		BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
+		// TODO: fixme
+		client.release(taskId, "Administrator", responseHandler);
+		responseHandler.waitTillDone(5000);
+	}
+
+	public List<TaskRef> getAssignedTasks(String idRef) {
+		connect();
+        List<TaskRef> result = new ArrayList<TaskRef>();
+		try {
+			BlockingTaskSummaryResponseHandler responseHandler = new BlockingTaskSummaryResponseHandler();
+			client.getTasksOwned(idRef, "en-UK", responseHandler);
+	        List<TaskSummary> tasks = responseHandler.getResults();
+	        for (TaskSummary task: tasks) {
+	        	if (task.getStatus() == Status.Reserved) {
+	        		result.add(DroolsFlowTransform.task(task));
+	        	}
+	        }
+		} catch (Throwable t) {
+			t.printStackTrace();
+		}
+		return result;
+	}
+
+	public List<TaskRef> getUnassignedTasks(String idRef, String participationType) {
+		// TODO participationType ?
+		connect();
+        List<TaskRef> result = new ArrayList<TaskRef>();
+		try {
+			BlockingTaskSummaryResponseHandler responseHandler = new BlockingTaskSummaryResponseHandler();
+			client.getTasksAssignedAsPotentialOwner(idRef, "en-UK", responseHandler);
+	        List<TaskSummary> tasks = responseHandler.getResults();
+	        for (TaskSummary task: tasks) {
+	        	result.add(DroolsFlowTransform.task(task));
+	        }
+		} catch (Throwable t) {
+			t.printStackTrace();
+		}
+		return result;
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowTransform.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowTransform.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowTransform.java	2009-05-24 23:26:09 UTC (rev 26714)
@@ -0,0 +1,63 @@
+package org.drools.integration.console;
+
+import org.drools.definition.process.Process;
+import org.drools.process.audit.ProcessInstanceLog;
+import org.drools.task.I18NText;
+import org.drools.task.Task;
+import org.drools.task.query.TaskSummary;
+import org.jboss.bpm.console.client.model.ProcessDefinitionRef;
+import org.jboss.bpm.console.client.model.ProcessInstanceRef;
+import org.jboss.bpm.console.client.model.TaskRef;
+import org.jboss.bpm.console.client.model.jbpm3.TokenReference;
+
+public class DroolsFlowTransform {
+	
+	public static ProcessDefinitionRef processDefinition(Process process) {
+		return new ProcessDefinitionRef(
+			process.getId(), process.getName(), new Long(process.getVersion()));
+	}
+	
+	public static ProcessInstanceRef processInstance(ProcessInstanceLog processInstance) {
+		ProcessInstanceRef result = new ProcessInstanceRef(
+			processInstance.getProcessInstanceId() + "",
+			processInstance.getProcessId(),
+			processInstance.getStart(),
+			processInstance.getEnd(),
+			false);
+		TokenReference token = new TokenReference(
+			processInstance.getProcessInstanceId() + "", null, "");
+		result.setRootToken(token);
+		return result;
+	}
+	
+	public static TaskRef task(TaskSummary task) {
+		return new TaskRef(
+			task.getId(),
+			// TODO: fixme
+			"-1",
+			"-1",
+			task.getName(),
+			task.getActualOwner() == null ? null : task.getActualOwner().getId(),
+			false,
+			false);
+	}
+
+	public static TaskRef task(Task task) {
+		String name = "";
+		for (I18NText text: task.getNames()) {
+			if ("en-UK".equals(text.getLanguage())) {
+				name = text.getText();
+			}
+		}
+		return new TaskRef(
+			task.getId(),
+			// TODO: fixme
+			"-1",
+			"-1",
+			name,
+			task.getTaskData().getActualOwner() == null ? null : task.getTaskData().getActualOwner().getId(),
+			false,
+			false);
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowUserManagement.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowUserManagement.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowUserManagement.java	2009-05-24 23:26:09 UTC (rev 26714)
@@ -0,0 +1,22 @@
+package org.drools.integration.console;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.bpm.console.server.integration.UserManagement;
+
+public class DroolsFlowUserManagement implements UserManagement {
+
+	public List<String> getActorsForGroup(String groupName) {
+		List<String> result = new ArrayList<String>();
+		result.add("admin");
+		return result;
+	}
+
+	public List<String> getGroupsForActor(String actorId) {
+		List<String> result = new ArrayList<String>();
+		result.add("admins");
+		return result;
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/resources/ChangeSet.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/resources/ChangeSet.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/resources/ChangeSet.xml	2009-05-24 23:26:09 UTC (rev 26714)
@@ -0,0 +1,7 @@
+<change-set xmlns='http://drools.org/drools-5.0/change-set'
+            xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'
+            xs:schemaLocation='http://drools.org/drools-5.0/change-set drools-change-set-5.0.xsd' >
+    <add>
+        <resource source='http://localhost:8080/drools-guvnor/org.drools.guvnor.Guvnor/package/default/LATEST' type='PKG' />
+    </add>
+</change-set>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/resources/META-INF/services/org.jboss.bpm.console.server.integration.ManagementFactory
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/resources/META-INF/services/org.jboss.bpm.console.server.integration.ManagementFactory	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/resources/META-INF/services/org.jboss.bpm.console.server.integration.ManagementFactory	2009-05-24 23:26:09 UTC (rev 26714)
@@ -0,0 +1 @@
+org.drools.integration.console.DroolsFlowManagementFactory
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-gwt-form/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-form/.classpath	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-form/.classpath	2009-05-24 23:26:09 UTC (rev 26714)
@@ -0,0 +1,55 @@
+<classpath>
+  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.1/activation-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.6/antlr-2.7.6.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.1.1/antlr-runtime-3.1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-cli/2.0-SNAPSHOT/commons-cli-2.0-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.1/commons-collections-3.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-compress/1.0-SNAPSHOT/commons-compress-1.0-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-exec/1.0.0-SNAPSHOT/commons-exec-1.0.0-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-finder/1.0-SNAPSHOT/commons-finder-1.0-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-io/commons-io/1.4/commons-io-1.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/commons-net/commons-net/2.0/commons-net-2.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.jar"/>
+  <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/drools/drools-api/5.0.1.SNAPSHOT/drools-api-5.0.1.SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/drools/drools-compiler/5.0.1.SNAPSHOT/drools-compiler-5.0.1.SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/drools/drools-core/5.0.1.SNAPSHOT/drools-core-5.0.1.SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/drools/drools-process-task/5.0.1.SNAPSHOT/drools-process-task-5.0.1.SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/drools/drools-workitems/5.0.1.SNAPSHOT/drools-workitems-5.0.1.SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/ejb3-persistence/1.0.2.GA/ejb3-persistence-1.0.2.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/el/el-api/1.0/el-api-1.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/freemarker/freemarker/2.3.15/freemarker-2.3.15.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/google/code/gson/gson/1.2.2/gson-1.2.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/bpm/gwt-console-rpc/1.0.0-SNAPSHOT/gwt-console-rpc-1.0.0-SNAPSHOT.jar" sourcepath="M2_REPO/org/jboss/bpm/gwt-console-rpc/1.0.0-SNAPSHOT/gwt-console-rpc-1.0.0-SNAPSHOT-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/bpm/gwt-console-server-integration/1.0.0-SNAPSHOT/gwt-console-server-integration-1.0.0-SNAPSHOT.jar" sourcepath="M2_REPO/org/jboss/bpm/gwt-console-server-integration/1.0.0-SNAPSHOT/gwt-console-server-integration-1.0.0-SNAPSHOT-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/h2database/h2/1.0.77/h2-1.0.77.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-annotations/3.4.0.GA/hibernate-annotations-3.4.0.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-commons-annotations/3.1.0.GA/hibernate-commons-annotations-3.1.0.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-core/3.3.0.SP1/hibernate-core-3.3.0.SP1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-entitymanager/3.4.0.GA/hibernate-entitymanager-3.4.0.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.4.GA/javassist-3.4.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/el/jboss-el/1.0_02.CR2/jboss-el-1.0_02.CR2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/seam/jboss-seam/2.1.1.GA/jboss-seam-2.1.1.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/jdom/jdom/1.0/jdom-1.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.6/joda-time-1.6.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.1/jta-1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/mail/mail/1.4/mail-1.4.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/mina/mina-core/2.0.0-M3/mina-core-2.0.0-M3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.9/mvel2-2.0.9.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/rome/rome/0.9/rome-0.9.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.5.0/slf4j-api-1.5.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-jdk14/1.5.2/slf4j-jdk14-1.5.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/jivesoftware/smack/3.0.4/smack-3.0.4.jar"/>
+</classpath>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-gwt-form/.project
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-form/.project	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-form/.project	2009-05-24 23:26:09 UTC (rev 26714)
@@ -0,0 +1,13 @@
+<projectDescription>
+  <name>drools-gwt-form</name>
+  <comment>A rule production system</comment>
+  <projects/>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
+</projectDescription>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-gwt-form/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-form/pom.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-form/pom.xml	2009-05-24 23:26:09 UTC (rev 26714)
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>drools</artifactId>
+    <groupId>org.drools</groupId>
+    <version>5.0.1.SNAPSHOT</version>
+  </parent>
+
+  <artifactId>drools-gwt-form</artifactId>
+  <packaging>jar</packaging>
+  <name>Drools :: GWT Console Forms</name>
+
+  <dependencies>  
+
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-process-task</artifactId>
+    </dependency>         
+
+    <dependency>
+      <groupId>org.jboss.bpm</groupId>
+      <artifactId>gwt-console-server-integration</artifactId>
+      <version>1.0.0-SNAPSHOT</version>
+    </dependency>
+    
+    <dependency>
+      <groupId>org.freemarker</groupId>
+      <artifactId>freemarker</artifactId>
+      <version>2.3.15</version>
+    </dependency>
+
+  </dependencies>
+  
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <includes>
+            <include>**/*Test.java</include>
+          </includes>
+        </configuration>
+      </plugin>      
+    </plugins>
+  </build>
+
+</project>

Added: labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/java/org/drools/integration/console/forms/ConfigurationUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/java/org/drools/integration/console/forms/ConfigurationUtils.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/java/org/drools/integration/console/forms/ConfigurationUtils.java	2009-05-24 23:26:09 UTC (rev 26714)
@@ -0,0 +1,98 @@
+package org.drools.integration.console.forms;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.Set;
+
+import javax.management.AttributeNotFoundException;
+import javax.management.JMException;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+
+public class ConfigurationUtils {
+
+	private final static String UNDEFINED_HOSTNAME = "undefined.host";
+
+	private String webServiceHost;
+	private int webServicePort;
+	private MBeanServer mbeanServer;
+	
+	public String getWebServiceHost() {
+		return webServiceHost;
+	}
+
+	public void setWebServiceHost(String host) throws UnknownHostException {
+		if (host == null || host.trim().length() == 0) {
+			System.out.println("Using undefined host: " + UNDEFINED_HOSTNAME);
+			host = UNDEFINED_HOSTNAME;
+		}
+		if ("0.0.0.0".equals(host)) {
+			InetAddress localHost = InetAddress.getLocalHost();
+			System.out.println("Using local host: " + localHost.getHostName());
+			host = localHost.getHostName();
+		}
+		this.webServiceHost = host;
+	}
+
+	public int getWebServicePort() {
+		if (webServicePort <= 0)
+			webServicePort = getConnectorPort("HTTP/1.1", false);
+
+		int localPort = webServicePort;
+		if (localPort <= 0) {
+			// Do not initialize webServicePort with the default, the connector
+			// port may become available later
+			System.out.println("Unable to calculate 'WebServicePort', using default '8080'");
+			localPort = 8080;
+		}
+
+		return localPort;
+	}
+
+	private int getConnectorPort(final String protocol, final boolean secure) {
+		int port = -1;
+
+		try {
+			ObjectName connectors = new ObjectName("jboss.web:type=Connector,*");
+
+			Set<?> connectorNames = getMbeanServer().queryNames(connectors, null);
+			for (Object current : connectorNames) {
+				ObjectName currentName = (ObjectName) current;
+
+				try {
+					int connectorPort = (Integer) getMbeanServer()
+							.getAttribute(currentName, "port");
+					boolean connectorSecure = (Boolean) getMbeanServer()
+							.getAttribute(currentName, "secure");
+					String connectorProtocol = (String) getMbeanServer()
+							.getAttribute(currentName, "protocol");
+
+					if (protocol.equals(connectorProtocol)
+							&& secure == connectorSecure) {
+						if (port > -1) {
+							System.out.println("Found multiple connectors for protocol='"
+								+ protocol + "' and secure='" + secure
+								+ "', using first port found '" + port + "'");
+						} else {
+							port = connectorPort;
+						}
+					}
+				} catch (AttributeNotFoundException ignored) {
+				}
+			}
+
+			return port;
+		} catch (JMException e) {
+			return -1;
+		}
+	}
+
+	public MBeanServer getMbeanServer() {
+		return mbeanServer;
+	}
+
+	public void setMbeanServer(MBeanServer mbeanServer) {
+		this.mbeanServer = mbeanServer;
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/java/org/drools/integration/console/forms/TaskDispatcherPluginImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/java/org/drools/integration/console/forms/TaskDispatcherPluginImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/java/org/drools/integration/console/forms/TaskDispatcherPluginImpl.java	2009-05-24 23:26:09 UTC (rev 26714)
@@ -0,0 +1,161 @@
+package org.drools.integration.console.forms;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.net.InetSocketAddress;
+import java.net.MalformedURLException;
+import java.net.SocketAddress;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.activation.DataHandler;
+import javax.activation.DataSource;
+
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+import org.drools.SystemEventListenerFactory;
+import org.drools.task.Task;
+import org.drools.task.service.MinaTaskClient;
+import org.drools.task.service.TaskClientHandler;
+import org.drools.task.service.responsehandlers.BlockingGetTaskResponseHandler;
+import org.jboss.bpm.console.server.plugin.TaskDispatcherPlugin;
+
+import freemarker.template.DefaultObjectWrapper;
+import freemarker.template.Template;
+
+/**
+ * @author Kris Verlaenen
+ */
+public class TaskDispatcherPluginImpl implements TaskDispatcherPlugin {
+
+	// TODO make this configurable
+	private String ipAddress = "127.0.0.1";
+	private int port = 9123;
+	private MinaTaskClient client;
+
+	public TaskDispatcherPluginImpl() {
+		System.out.println("Created TaskDispatcherPlugin");
+	}
+
+	public void connect() {
+		if (client == null) {
+			client = new MinaTaskClient(
+				"org.drools.process.workitem.wsht.WSHumanTaskHandler",
+                    new TaskClientHandler(SystemEventListenerFactory.getSystemEventListener()));
+			NioSocketConnector connector = new NioSocketConnector();
+			SocketAddress address = new InetSocketAddress(ipAddress, port);
+			boolean connected = client.connect(connector, address);
+			if (!connected) {
+				throw new IllegalArgumentException(
+					"Could not connect task client");
+			}
+		}
+	}
+	
+	public URL getDispatchUrl(long taskId) {
+		StringBuffer sb = new StringBuffer();
+		// TODO: fix this for non localhost:8080
+		sb.append("http://");
+		sb.append("localhost");
+		sb.append(":").append(8080);
+		sb.append("/gwt-console-server/rs/task/");
+		sb.append(taskId);
+		sb.append("/render");
+
+		try {
+			return new URL(sb.toString());
+		} catch (MalformedURLException e) {
+			throw new RuntimeException("Failed to resolve task dispatch url", e);
+		}
+	}
+	
+	public DataHandler provideTaskUI(long taskId) {
+		DataHandler result = null;
+
+		// check if a template exists
+		String name = "/MyTask.ftl";
+		InputStream template = TaskDispatcherPluginImpl.class.getResourceAsStream(name);
+
+		// merge template with process variables
+		if (template != null) {
+			// plugin context
+
+			// TODO: fix this for non localhost:8080
+			StringBuffer sb = new StringBuffer();
+			sb.append("http://");
+			sb.append("localhost");
+			sb.append(":").append(8080);
+			sb.append("/gwt-console-server/rs/task/");
+			sb.append(taskId);
+			sb.append("/process");
+
+			Map<String, Object> renderContext = new HashMap<String, Object>();
+			
+			connect();
+			BlockingGetTaskResponseHandler getTaskResponseHandler = new BlockingGetTaskResponseHandler();
+        	client.getTask(taskId, getTaskResponseHandler);
+    		Task task = getTaskResponseHandler.getTask();
+			renderContext.put("task", task);
+    			
+			result = processTemplate(name, template, renderContext);
+		}
+
+		return result;
+	}
+
+	private DataHandler processTemplate(final String name, InputStream src,
+			Map<String, Object> renderContext) {
+		DataHandler merged = null;
+
+		try {
+			freemarker.template.Configuration cfg = new freemarker.template.Configuration();
+			cfg.setObjectWrapper(new DefaultObjectWrapper());
+			cfg.setTemplateUpdateDelay(0);
+
+			Template temp = new Template(name, new InputStreamReader(src), cfg);
+			temp.dump(System.out);
+
+			final ByteArrayOutputStream bout = new ByteArrayOutputStream();
+			Writer out = new OutputStreamWriter(bout);
+			temp.process(renderContext, out);
+			out.flush();
+
+			merged = new DataHandler(
+
+			new DataSource() {
+
+				public InputStream getInputStream() throws IOException {
+					return new ByteArrayInputStream(bout.toByteArray());
+				}
+
+				public OutputStream getOutputStream() throws IOException {
+					return bout;
+				}
+
+				public String getContentType() {
+					return "*/*";
+				}
+
+				public String getName() {
+					return name + "_DataSource";
+				}
+			});
+
+		} catch (Exception e) {
+			throw new RuntimeException("Failed to process task template", e);
+		}
+
+		return merged;
+	}
+
+	public void processCompletion(long taskId, String outcome, InputStream payload) {
+		// Do nothing
+	}
+	
+}

Added: labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/resources/META-INF/services/org.jboss.bpm.console.server.plugin.TaskDispatcherPlugin
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/resources/META-INF/services/org.jboss.bpm.console.server.plugin.TaskDispatcherPlugin	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/resources/META-INF/services/org.jboss.bpm.console.server.plugin.TaskDispatcherPlugin	2009-05-24 23:26:09 UTC (rev 26714)
@@ -0,0 +1 @@
+org.drools.integration.console.forms.TaskDispatcherPluginImpl
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/resources/MyTask.ftl
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/resources/MyTask.ftl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-form/src/main/resources/MyTask.ftl	2009-05-24 23:26:09 UTC (rev 26714)
@@ -0,0 +1,10 @@
+<html>
+<body>
+
+<h2>Task Form "${task.names[0].text}"</h2>
+<hr>
+<form action="process" method="POST" enctype="multipart/form-data">
+<input type="submit" name="outcome" value="Complete">
+</form>
+</body>
+</html>
\ No newline at end of file




More information about the jboss-svn-commits mailing list