--- drools2_src/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowTaskManagement.java 2010-08-24 06:08:04.000000000 +0200 +++ drools_src/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowTaskManagement.java 2010-11-04 13:25:25.000000000 +0100 @@ -22,6 +22,13 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.HashMap; +import java.util.Arrays; +import java.util.Properties; +import java.util.Enumeration; +import java.net.URL; +import java.net.URLClassLoader; +import java.io.*; import org.drools.SystemEventListenerFactory; import org.drools.process.workitem.wsht.BlockingGetTaskResponseHandler; @@ -38,12 +45,14 @@ import org.jboss.bpm.console.client.model.TaskRef; import org.jboss.bpm.console.server.integration.TaskManagement; + public class DroolsFlowTaskManagement implements TaskManagement { - + // TODO: make this configurable private String ipAddress = "127.0.0.1"; private int port = 9123; private TaskClient client; + private HashMap groupListMap = new HashMap(); public void setConnection(String ipAddress, int port) { this.ipAddress = ipAddress; @@ -55,10 +64,59 @@ client = new TaskClient(new MinaTaskClientConnector("org.drools.process.workitem.wsht.WSHumanTaskHandler", new MinaTaskClientHandler(SystemEventListenerFactory.getSystemEventListener()))); boolean connected = client.connect(ipAddress, port); + if (!connected) { throw new IllegalArgumentException( "Could not connect task client"); } + + try { + ClassLoader loader = Thread.currentThread().getContextClassLoader(); + URL url = null; + String propertyName = "roles.properties"; + + if( loader instanceof URLClassLoader ) { + URLClassLoader ucl = (URLClassLoader) loader; + url = ucl.findResource(propertyName); + System.out.println("findResource: "+url); + } + + if( url == null ) + url = loader.getResource(propertyName); + + if( url == null ) { + String msg = "No properties file: " + propertyName + " found"; + + throw new IOException(msg); + } + + System.out.println("Properties file=" + url); + + Properties bundle = new Properties(); + InputStream is = url.openStream(); + + if (is != null) { + bundle.load(is); + is.close(); + } + else { + throw new IOException("Properties file " + propertyName + " not avilable"); + } + + System.out.println("Loaded properties, users="+bundle.keySet()); + + Enumeration propertyNames = bundle.propertyNames(); + + while (propertyNames.hasMoreElements()) { + String key = (String) propertyNames.nextElement(); + String value = bundle.getProperty(key); + + groupListMap.put(key, value); + } + + } catch (Throwable t) { + t.printStackTrace(); + } } } @@ -76,7 +134,7 @@ if (idRef == null) { client.release(taskId, userId, responseHandler); } else if (idRef.equals(userId)) { - client.claim(taskId, idRef, responseHandler); + client.claim(taskId, idRef, Arrays.asList(groupListMap.get(idRef).split(",")), responseHandler); } else { client.delegate(taskId, userId, idRef, responseHandler); } @@ -146,16 +204,15 @@ // TODO participationType ? connect(); List result = new ArrayList(); - try { + BlockingTaskSummaryResponseHandler responseHandler = new BlockingTaskSummaryResponseHandler(); - client.getTasksAssignedAsPotentialOwner(idRef, "en-UK", responseHandler); - List tasks = responseHandler.getResults(); - for (TaskSummary task: tasks) { - result.add(DroolsFlowTransform.task(task)); - } - } catch (Throwable t) { - t.printStackTrace(); - } + client.getTasksAssignedAsPotentialOwner(idRef, Arrays.asList(groupListMap.get(idRef).split(",")), "en-UK", responseHandler); + List tasks = responseHandler.getResults(); + + for (TaskSummary task: tasks) { + result.add(DroolsFlowTransform.task(task)); + } + return result; }