[jboss-svn-commits] JBL Code SVN: r23094 - in labs/jbossrules/trunk: drools-process/drools-process-task and 11 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Sep 25 18:55:36 EDT 2008
Author: KrisVerlaenen
Date: 2008-09-25 18:55:35 -0400 (Thu, 25 Sep 2008)
New Revision: 23094
Added:
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskFailedEvent.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskSkippedEvent.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskUserEvent.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/process/
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/process/workitem/
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/process/workitem/wsht/
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/process/workitem/wsht/WSHumanTaskHandlerTest.java
Modified:
labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/src/main/java/org/drools/eclipse/task/views/TaskView.java
labs/jbossrules/trunk/drools-process/drools-process-task/.classpath
labs/jbossrules/trunk/drools-process/drools-process-task/.project
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/DefaultTaskEventListener.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/MessagingTaskEventListener.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskClaimedEvent.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskCompletedEvent.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEvent.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEventListener.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEventSupport.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskClient.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/OperationCommand.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServiceSession.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/orm.xml
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/operations-dsl.mvel
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/MockEventMessagingTest.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceDeadlinesTest.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEventMessagingTest.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/LoadUsers.mvel
Log:
JBRULES-1757: Add WS-HT service views to IDE
- updated task view
- updated WS-HT work item handler
Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/src/main/java/org/drools/eclipse/task/views/TaskView.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/src/main/java/org/drools/eclipse/task/views/TaskView.java 2008-09-25 22:48:59 UTC (rev 23093)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-task/src/main/java/org/drools/eclipse/task/views/TaskView.java 2008-09-25 22:55:35 UTC (rev 23094)
@@ -2,6 +2,7 @@
import java.net.InetSocketAddress;
import java.net.SocketAddress;
+import java.text.DateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -56,12 +57,14 @@
private static final String NAME_COLUMN = "Name";
private static final String STATUS_COLUMN = "Status";
private static final String OWNER_COLUMN = "Owner";
+ private static final String CREATED_COLUMN = "Created";
private static final String COMMENT_COLUMN = "Comment";
private static String[] columnNames = new String[] {
NAME_COLUMN,
STATUS_COLUMN,
OWNER_COLUMN,
+ CREATED_COLUMN,
COMMENT_COLUMN
};
@@ -97,6 +100,8 @@
private Button skipButton;
private Button completeButton;
private Button failButton;
+
+ private MinaTaskClient client;
private class ViewContentProvider implements IStructuredContentProvider {
public void inputChanged(Viewer v, Object oldInput, Object newInput) {
@@ -131,6 +136,9 @@
return user.getId();
case 3:
return taskSummary.getDescription();
+ case 4:
+ return DateFormat.getDateTimeInstance().format(
+ taskSummary.getCreatedOn());
default:
throw new IllegalArgumentException(
"Unknown column index: " + index);
@@ -171,6 +179,7 @@
userNameText = new Text(parent, SWT.NONE);
GridData layoutData = new GridData();
layoutData.horizontalSpan = 8;
+ layoutData.minimumWidth = 120;
layoutData.grabExcessHorizontalSpace = true;
layoutData.horizontalAlignment = GridData.FILL_HORIZONTAL;
userNameText.setLayoutData(layoutData);
@@ -219,8 +228,12 @@
column.setWidth(100);
// 4th column = expiration time
column = new TableColumn(table, SWT.CENTER, 3);
- column.setText("Expiration");
+ column.setText("Comment");
column.setWidth(120);
+ // 5th column = created
+ column = new TableColumn(table, SWT.CENTER, 3);
+ column.setText("Created On");
+ column.setWidth(120);
}
private void createTableViewer() {
@@ -311,23 +324,41 @@
System.out.println(e);
}
public void widgetSelected(SelectionEvent e) {
- boolean selected = table.getSelectionCount() == 1;
- TaskSummary task = getSelectedTask();
- claimButton.setEnabled(selected && Status.Created.equals(task.getStatus()));
- startButton.setEnabled(selected &&
- (Status.Ready.equals(task.getStatus()) || Status.Reserved.equals(task.getStatus())));
- stopButton.setEnabled(selected && Status.InProgress.equals(task.getStatus()));
- releaseButton.setEnabled(selected &&
- (Status.Reserved.equals(task.getStatus()) || Status.InProgress.equals(task.getStatus())));
- suspendButton.setEnabled(selected &&
- (Status.Ready.equals(task.getStatus()) || Status.Reserved.equals(task.getStatus()) || Status.InProgress.equals(task.getStatus())));
- resumeButton.setEnabled(selected && Status.Suspended.equals(task.getStatus()));
- skipButton.setEnabled(selected && !Status.Completed.equals(task.getStatus()) && !Status.Failed.equals(task.getStatus())&& !Status.Obsolete.equals(task.getStatus()));
- completeButton.setEnabled(selected && Status.InProgress.equals(task.getStatus()));
- failButton.setEnabled(selected && Status.InProgress.equals(task.getStatus()));
+ updateButtons();
}
});
}
+
+ private void updateButtons() {
+ boolean selected = table.getSelectionCount() == 1;
+ TaskSummary task = getSelectedTask();
+ String userId = getUserId();
+ claimButton.setEnabled(selected && Status.Created.equals(task.getStatus()));
+ startButton.setEnabled(selected &&
+ (Status.Ready.equals(task.getStatus()) ||
+ (Status.Reserved.equals(task.getStatus())
+ && userId.equals(task.getActualOwner().getId()))));
+ stopButton.setEnabled(selected && Status.InProgress.equals(task.getStatus())
+ && userId.equals(task.getActualOwner().getId()));
+ releaseButton.setEnabled(selected &&
+ (Status.Reserved.equals(task.getStatus()) || Status.InProgress.equals(task.getStatus()))
+ && userId.equals(task.getActualOwner().getId()));
+ suspendButton.setEnabled(selected &&
+ (Status.Ready.equals(task.getStatus()) ||
+ ((Status.Reserved.equals(task.getStatus()) || Status.InProgress.equals(task.getStatus()))
+ && userId.equals(task.getActualOwner().getId()))));
+ // TODO only actual owner if previousStatus = reserved or inProgress
+ resumeButton.setEnabled(selected && Status.Suspended.equals(task.getStatus()));
+ // TODO only initiator if state Created
+ skipButton.setEnabled(selected && task.isSkipable() &&
+ (Status.Created.equals(task.getStatus()) && Status.Ready.equals(task.getStatus()) ||
+ ((Status.Reserved.equals(task.getStatus()) || Status.InProgress.equals(task.getStatus()))
+ && userId.equals(task.getActualOwner().getId()))));
+ completeButton.setEnabled(selected && Status.InProgress.equals(task.getStatus())
+ && userId.equals(task.getActualOwner().getId()));
+ failButton.setEnabled(selected && Status.InProgress.equals(task.getStatus())
+ && userId.equals(task.getActualOwner().getId()));
+ }
private void hookContextMenu() {
MenuManager menuMgr = new MenuManager("#PopupMenu");
@@ -396,11 +427,11 @@
BlockingTaskSummaryResponseHandler responseHandler = new BlockingTaskSummaryResponseHandler();
client.getTasksAssignedAsPotentialOwner(userId, language, responseHandler);
List<TaskSummary> tasks = responseHandler.getResults();
- client.disconnect();
tableViewer.setInput(tasks);
tableViewer.refresh();
tableViewer.setSelection(null);
+ updateButtons();
}
public void claim() {
@@ -421,7 +452,7 @@
BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
client.claim(taskSummary.getId(), userId, responseHandler);
- client.disconnect();
+ responseHandler.waitTillDone(3000);
refresh();
}
@@ -443,7 +474,7 @@
BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
client.start(taskSummary.getId(), userId, responseHandler);
- client.disconnect();
+ responseHandler.waitTillDone(3000);
refresh();
}
@@ -465,7 +496,7 @@
BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
client.stop(taskSummary.getId(), userId, responseHandler);
- client.disconnect();
+ responseHandler.waitTillDone(3000);
refresh();
}
@@ -487,7 +518,7 @@
BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
client.release(taskSummary.getId(), userId, responseHandler);
- client.disconnect();
+ responseHandler.waitTillDone(3000);
refresh();
}
@@ -509,7 +540,7 @@
BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
client.suspend(taskSummary.getId(), userId, responseHandler);
- client.disconnect();
+ responseHandler.waitTillDone(3000);
refresh();
}
@@ -531,7 +562,7 @@
BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
client.resume(taskSummary.getId(), userId, responseHandler);
- client.disconnect();
+ responseHandler.waitTillDone(3000);
refresh();
}
@@ -553,7 +584,7 @@
BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
client.skip(taskSummary.getId(), userId, responseHandler);
- client.disconnect();
+ responseHandler.waitTillDone(3000);
refresh();
}
@@ -575,7 +606,7 @@
BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
client.complete(taskSummary.getId(), userId, responseHandler);
- client.disconnect();
+ responseHandler.waitTillDone(3000);
refresh();
}
@@ -597,23 +628,32 @@
BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler();
client.fail(taskSummary.getId(), userId, responseHandler);
- client.disconnect();
+ responseHandler.waitTillDone(3000);
refresh();
}
private MinaTaskClient getTaskClient() {
- MinaTaskClient client = new MinaTaskClient(
- "org.drools.eclipse.task.views.TaskView", new TaskClientHandler());
- NioSocketConnector connector = new NioSocketConnector();
- SocketAddress address = new InetSocketAddress(ipAddress, port);
- boolean connected = client.connect(connector, address);
- if (!connected) {
- showMessage("Could not connect to task server: " + ipAddress + " [port " + port + "]");
- return null;
+ if (client == null) {
+ client = new MinaTaskClient(
+ "org.drools.eclipse.task.views.TaskView", new TaskClientHandler());
+ NioSocketConnector connector = new NioSocketConnector();
+ SocketAddress address = new InetSocketAddress(ipAddress, port);
+ boolean connected = client.connect(connector, address);
+ if (!connected) {
+ showMessage("Could not connect to task server: " + ipAddress + " [port " + port + "]");
+ client = null;
+ }
}
return client;
}
+ public void dispose() {
+ if (client != null) {
+ client.disconnect();
+ }
+ super.dispose();
+ }
+
private String getUserId() {
return userNameText.getText();
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/.classpath 2008-09-25 22:48:59 UTC (rev 23093)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/.classpath 2008-09-25 22:55:35 UTC (rev 23094)
@@ -1,51 +1,53 @@
-<classpath>
- <classpathentry kind="src" path="src/main/java"/>
- <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
- <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
- <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
- <classpathentry kind="output" path="target/classes"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry kind="var" path="M2_REPO/com/h2database/h2/1.0.77/h2-1.0.77.jar"/>
- <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.3/xstream-1.3.jar"/>
- <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar"/>
- <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.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/slf4j/slf4j-api/1.5.2/slf4j-api-1.5.2.jar"/>
- <classpathentry kind="src" path="/drools-workitems"/>
- <classpathentry kind="src" path="/drools-core"/>
- <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0M2/mvel-2.0M2.jar"/>
- <classpathentry kind="src" path="/drools-compiler"/>
- <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0.1/antlr-runtime-3.0.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
- <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
- <classpathentry kind="var" path="M2_REPO/javax/mail/mail/1.4/mail-1.4.jar"/>
- <classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.1/activation-1.1.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/org/apache/commons/commons-cli/2.0-SNAPSHOT/commons-cli-2.0-SNAPSHOT.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/hibernate/hibernate-entitymanager/3.4.0.GA/hibernate-entitymanager-3.4.0.GA.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/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-annotations/3.4.0.GA/hibernate-annotations-3.4.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/antlr/antlr/2.7.6/antlr-2.7.6.jar"/>
- <classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.1/commons-collections-3.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/2.0.2/xml-apis-2.0.2.jar"/>
- <classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.1/jta-1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.4.GA/javassist-3.4.GA.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.0.1/jmock-2.5.0.1.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/slf4j/slf4j-jdk14/1.5.2/slf4j-jdk14-1.5.2.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/subethamail/subethasmtp-wiser/1.2/subethasmtp-wiser-1.2.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/subethamail/subethasmtp-smtp/1.2/subethasmtp-smtp-1.2.jar"/>
- <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1/commons-logging-1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
- <classpathentry kind="var" path="M2_REPO/logkit/logkit/1.0.1/logkit-1.0.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/avalon-framework/avalon-framework/4.1.3/avalon-framework-4.1.3.jar"/>
- <classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar"/>
- <classpathentry kind="var" path="M2_REPO/postgresql/postgresql/8.3-603.jdbc3/postgresql-8.3-603.jdbc3.jar"/>
+<classpath>
+ <classpathentry kind="src" path="src/main/java"/>
+ <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+ <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+ <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
+ <classpathentry kind="output" path="target/classes"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="var" path="M2_REPO/com/h2database/h2/1.0.77/h2-1.0.77.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.3/xstream-1.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.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/slf4j/slf4j-api/1.5.2/slf4j-api-1.5.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-workitems/5.0.0.SNAPSHOT/drools-workitems-5.0.0.SNAPSHOT.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-core/5.0.0.SNAPSHOT/drools-core-5.0.0.SNAPSHOT.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/2.0M2/mvel-2.0M2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-compiler/5.0.0.SNAPSHOT/drools-compiler-5.0.0.SNAPSHOT.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0.1/antlr-runtime-3.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
+ <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/mail/mail/1.4/mail-1.4.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.1/activation-1.1.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/org/apache/commons/commons-cli/2.0-SNAPSHOT/commons-cli-2.0-SNAPSHOT.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/hibernate/hibernate-entitymanager/3.4.0.GA/hibernate-entitymanager-3.4.0.GA.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/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-annotations/3.4.0.GA/hibernate-annotations-3.4.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/antlr/antlr/2.7.6/antlr-2.7.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.1/commons-collections-3.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.1/jta-1.1.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/seam/jboss-seam/2.1.0-SNAPSHOT/jboss-seam-2.1.0-SNAPSHOT.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/javax/el/el-api/1.0/el-api-1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.0.1/jmock-2.5.0.1.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/slf4j/slf4j-jdk14/1.5.2/slf4j-jdk14-1.5.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/subethamail/subethasmtp-wiser/1.2/subethasmtp-wiser-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/subethamail/subethasmtp-smtp/1.2/subethasmtp-smtp-1.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1/commons-logging-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
+ <classpathentry kind="var" path="M2_REPO/logkit/logkit/1.0.1/logkit-1.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/avalon-framework/avalon-framework/4.1.3/avalon-framework-4.1.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/postgresql/postgresql/8.3-603.jdbc3/postgresql-8.3-603.jdbc3.jar"/>
</classpath>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/.project
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/.project 2008-09-25 22:48:59 UTC (rev 23093)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/.project 2008-09-25 22:55:35 UTC (rev 23094)
@@ -1,17 +1,13 @@
-<projectDescription>
- <name>drools-process-task</name>
- <comment>A rule production system</comment>
- <projects>
- <project>drools-workitems</project>
- <project>drools-core</project>
- <project>drools-compiler</project>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.jdt.core.javanature</nature>
- </natures>
+<projectDescription>
+ <name>drools-process-task</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
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java 2008-09-25 22:48:59 UTC (rev 23093)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java 2008-09-25 22:55:35 UTC (rev 23094)
@@ -20,10 +20,11 @@
import org.drools.task.Task;
import org.drools.task.TaskData;
import org.drools.task.User;
-import org.drools.task.event.EventPayload;
import org.drools.task.event.TaskCompletedEvent;
import org.drools.task.event.TaskEvent;
import org.drools.task.event.TaskEventKey;
+import org.drools.task.event.TaskFailedEvent;
+import org.drools.task.event.TaskSkippedEvent;
import org.drools.task.service.MinaTaskClient;
import org.drools.task.service.TaskClientHandler;
import org.drools.task.service.TaskClientHandler.AddTaskResponseHandler;
@@ -34,24 +35,29 @@
private int port = 9123;
private MinaTaskClient client;
private Map<Long, WorkItemManager> managers = new HashMap<Long, WorkItemManager>();
+ private Map<Long, Long> idMapping = new HashMap<Long, Long>();
public void setConnection(String ipAddress, int port) {
this.ipAddress = ipAddress;
this.port = port;
}
- private void createClient() {
- client = new MinaTaskClient(
- "org.drools.process.workitem.wsht.WSHumanTaskHandler", new TaskClientHandler());
- NioSocketConnector connector = new NioSocketConnector();
- SocketAddress address = new InetSocketAddress(ipAddress, port);
- client.connect(connector, address);
+ public void connect() {
+ if (client == null) {
+ client = new MinaTaskClient(
+ "org.drools.process.workitem.wsht.WSHumanTaskHandler", new TaskClientHandler());
+ 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 void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
- if (client == null) {
- createClient();
- }
+ connect();
Task task = new Task();
String taskName = (String) workItem.getParameter("TaskName");
if (taskName != null) {
@@ -78,19 +84,28 @@
}
TaskData taskData = new TaskData();
taskData.setWorkItemId(workItem.getId());
+ taskData.setSkipable(!"false".equals(workItem.getParameter("Skippable")));
task.setTaskData(taskData);
String actorId = (String) workItem.getParameter("ActorId");
if (actorId != null) {
PeopleAssignments assignments = new PeopleAssignments();
List<OrganizationalEntity> potentialOwners = new ArrayList<OrganizationalEntity>();
- User user = new User();
- user.setId(actorId);
- potentialOwners.add(user);
+ String[] actorIds = actorId.split(",");
+ for (String id: actorIds) {
+ User user = new User();
+ user.setId(id.trim());
+ potentialOwners.add(user);
+ }
assignments.setPotentialOwners(potentialOwners);
+ List<OrganizationalEntity> businessAdministrators = new ArrayList<OrganizationalEntity>();
+ businessAdministrators.add(new User("Administrator"));
+ assignments.setBusinessAdministrators(businessAdministrators);
task.setPeopleAssignments(assignments);
}
- TaskWorkItemAddTaskResponseHandler taskResponseHandler = new TaskWorkItemAddTaskResponseHandler(this.client, this.managers, manager, workItem.getId());
+ TaskWorkItemAddTaskResponseHandler taskResponseHandler =
+ new TaskWorkItemAddTaskResponseHandler(this.client, this.managers,
+ this.idMapping, manager, workItem.getId());
client.addTask(task, taskResponseHandler);
}
@@ -101,32 +116,52 @@
}
public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
- // TODO
+ Long taskId = idMapping.get(workItem.getId());
+ if (taskId != null) {
+ synchronized (idMapping) {
+ idMapping.remove(taskId);
+ }
+ synchronized (managers) {
+ managers.remove(taskId);
+ }
+ client.skip(taskId, "Administrator", null);
+ }
}
public static class TaskWorkItemAddTaskResponseHandler implements AddTaskResponseHandler {
private volatile String error;
private Map<Long, WorkItemManager> managers;
+ private Map<Long, Long> idMapping;
private WorkItemManager manager;
private long workItemId;
private MinaTaskClient client;
- public TaskWorkItemAddTaskResponseHandler(MinaTaskClient client, Map<Long, WorkItemManager> managers, WorkItemManager manager, long workItemId) {
+ public TaskWorkItemAddTaskResponseHandler(MinaTaskClient client,
+ Map<Long, WorkItemManager> managers, Map<Long, Long> idMapping,
+ WorkItemManager manager, long workItemId) {
this.client = client;
this.managers = managers;
+ this.idMapping = idMapping;
this.manager = manager;
this.workItemId = workItemId;
}
public void execute(long taskId) {
- synchronized ( managers ) {
+ synchronized ( managers ) {
managers.put(taskId, this.manager);
- }
+ }
+ synchronized ( idMapping ) {
+ idMapping.put(workItemId, taskId);
+ }
System.out.println("Created task " + taskId + " for work item " + workItemId);
EventKey key = new TaskEventKey(TaskCompletedEvent.class, taskId );
TaskCompletedHandler eventResponseHandler = new TaskCompletedHandler(workItemId, taskId, managers);
- client.registerForEvent( key, true, eventResponseHandler );
+ client.registerForEvent( key, true, eventResponseHandler );
+ key = new TaskEventKey(TaskFailedEvent.class, taskId );
+ client.registerForEvent( key, true, eventResponseHandler );
+ key = new TaskEventKey(TaskSkippedEvent.class, taskId );
+ client.registerForEvent( key, true, eventResponseHandler );
}
public void setError(String error) {
@@ -153,14 +188,26 @@
public void execute(Payload payload) {
TaskEvent event = ( TaskEvent ) payload.get();
- if ( event.getTaskId() != taskId ) {
+ if ( event.getTaskId() != taskId ) {
// defensive check that should never happen, just here for testing
this.error = "Expected task id and arrived task id do not march";
return;
}
- synchronized ( this.managers ) {
- this.managers.get(taskId).completeWorkItem(workItemId, null);
- }
+ if (event instanceof TaskCompletedEvent) {
+ synchronized ( this.managers ) {
+ WorkItemManager manager = this.managers.get(taskId);
+ if (manager != null) {
+ manager.completeWorkItem(workItemId, null);
+ }
+ }
+ } else {
+ synchronized ( this.managers ) {
+ WorkItemManager manager = this.managers.get(taskId);
+ if (manager != null) {
+ manager.abortWorkItem(workItemId);
+ }
+ }
+ }
}
public void setError(String error) {
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/DefaultTaskEventListener.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/DefaultTaskEventListener.java 2008-09-25 22:48:59 UTC (rev 23093)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/DefaultTaskEventListener.java 2008-09-25 22:55:35 UTC (rev 23094)
@@ -8,4 +8,10 @@
public void taskCompleted(TaskCompletedEvent event) {
}
+ public void taskFailed(TaskFailedEvent event) {
+ }
+
+ public void taskSkipped(TaskSkippedEvent event) {
+ }
+
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/MessagingTaskEventListener.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/MessagingTaskEventListener.java 2008-09-25 22:48:59 UTC (rev 23093)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/MessagingTaskEventListener.java 2008-09-25 22:55:35 UTC (rev 23094)
@@ -9,7 +9,8 @@
import org.drools.eventmessaging.Payload;
public class MessagingTaskEventListener implements TaskEventListener {
- EventKeys keys;
+
+ private EventKeys keys;
public MessagingTaskEventListener(EventKeys keys) {
this.keys = keys;
@@ -53,4 +54,42 @@
}
}
+ public void taskFailed(TaskFailedEvent event) {
+ EventKey key = new TaskEventKey(TaskFailedEvent.class, event.getTaskId() );
+ List<EventTriggerTransport> targets = keys.getTargets( key );
+ if ( targets == null ){
+ return;
+ }
+ Payload payload = new EventPayload( event );
+ for ( Iterator<EventTriggerTransport> it = targets.iterator(); it.hasNext(); ) {
+ EventTriggerTransport target = it.next();
+ target.trigger( payload );
+ if ( target.isRemove() ) {
+ it.remove();
+ }
+ }
+ if ( targets.isEmpty() ) {
+ keys.removeKey( key );
+ }
+ }
+
+ public void taskSkipped(TaskSkippedEvent event) {
+ EventKey key = new TaskEventKey(TaskSkippedEvent.class, event.getTaskId() );
+ List<EventTriggerTransport> targets = keys.getTargets( key );
+ if ( targets == null ){
+ return;
+ }
+ Payload payload = new EventPayload( event );
+ for ( Iterator<EventTriggerTransport> it = targets.iterator(); it.hasNext(); ) {
+ EventTriggerTransport target = it.next();
+ target.trigger( payload );
+ if ( target.isRemove() ) {
+ it.remove();
+ }
+ }
+ if ( targets.isEmpty() ) {
+ keys.removeKey( key );
+ }
+ }
+
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskClaimedEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskClaimedEvent.java 2008-09-25 22:48:59 UTC (rev 23093)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskClaimedEvent.java 2008-09-25 22:55:35 UTC (rev 23094)
@@ -1,34 +1,12 @@
package org.drools.task.event;
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
+public class TaskClaimedEvent extends TaskUserEvent {
-public class TaskClaimedEvent extends TaskEvent implements Externalizable {
- private String userId;
-
- public TaskClaimedEvent() {
- super();
+ public TaskClaimedEvent() {
}
public TaskClaimedEvent(long taskId, String userId) {
- super( taskId );
- this.userId = userId;
+ super( taskId, userId );
}
-
- public void writeExternal(ObjectOutput out) throws IOException {
- super.writeExternal( out );
- out.writeUTF( userId );
- }
-
- public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
- super.readExternal( in );
- userId = in.readUTF();
- }
-
- public String getUserId() {
- return userId;
- }
-
+
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskCompletedEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskCompletedEvent.java 2008-09-25 22:48:59 UTC (rev 23093)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskCompletedEvent.java 2008-09-25 22:55:35 UTC (rev 23094)
@@ -1,35 +1,13 @@
package org.drools.task.event;
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-public class TaskCompletedEvent extends TaskEvent implements Externalizable {
+public class TaskCompletedEvent extends TaskUserEvent {
- private String userId;
-
public TaskCompletedEvent() {
-
}
public TaskCompletedEvent(long taskId, String userId) {
- super( taskId );
- this.userId = userId;
+ super( taskId, userId );
}
- public void writeExternal(ObjectOutput out) throws IOException {
- super.writeExternal(out);
- out.writeUTF( userId );
- }
-
- public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
- super.readExternal(in);
- userId = in.readUTF();
- }
-
- public String getUserId() {
- return userId;
- }
-
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEvent.java 2008-09-25 22:48:59 UTC (rev 23093)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEvent.java 2008-09-25 22:55:35 UTC (rev 23094)
@@ -6,7 +6,8 @@
import java.io.ObjectOutput;
import java.util.EventObject;
-public abstract class TaskEvent extends EventObject implements Externalizable {
+public abstract class TaskEvent extends EventObject implements Externalizable {
+
private static final String dummySource = "";
private long taskId;
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEventListener.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEventListener.java 2008-09-25 22:48:59 UTC (rev 23093)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEventListener.java 2008-09-25 22:55:35 UTC (rev 23094)
@@ -18,12 +18,14 @@
import java.util.EventListener;
-public interface TaskEventListener
- extends
- EventListener {
+public interface TaskEventListener extends EventListener {
+
+ void taskClaimed(TaskClaimedEvent event);
- void taskClaimed(TaskClaimedEvent event);
-
void taskCompleted(TaskCompletedEvent event);
+ void taskFailed(TaskFailedEvent event);
+
+ void taskSkipped(TaskSkippedEvent event);
+
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEventSupport.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEventSupport.java 2008-09-25 22:48:59 UTC (rev 23093)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEventSupport.java 2008-09-25 22:55:35 UTC (rev 23094)
@@ -25,22 +25,17 @@
import java.util.concurrent.CopyOnWriteArrayList;
-public class TaskEventSupport
- implements
- Externalizable {
- /**
- *
- */
+public class TaskEventSupport implements Externalizable {
+
private static final long serialVersionUID = 400L;
+
private List<TaskEventListener> listeners = new CopyOnWriteArrayList<TaskEventListener>();
- public TaskEventSupport() {
+ @SuppressWarnings("unchecked")
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ listeners = (List<TaskEventListener>)in.readObject();
}
- public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
- listeners = (List<TaskEventListener>)in.readObject();
- }
-
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject(listeners);
}
@@ -68,19 +63,17 @@
}
public void fireTaskClaimed(final long taskId, final String userId) {
- System.out.println("Task " + taskId + " claimed");
- if ( this.listeners.isEmpty() ) {
- return;
- }
+ if (this.listeners.isEmpty()) {
+ return;
+ }
- final TaskClaimedEvent event = new TaskClaimedEvent(taskId, userId);
-
- for ( TaskEventListener listener: listeners) {
- System.out.println("notifying listener " + listener);
- listener.taskClaimed( event );
- }
- }
+ final TaskClaimedEvent event = new TaskClaimedEvent(taskId, userId);
+ for (TaskEventListener listener : listeners) {
+ listener.taskClaimed(event);
+ }
+ }
+
public void fireTaskCompleted(final long taskId, final String userId) {
if ( this.listeners.isEmpty() ) {
return;
@@ -89,13 +82,34 @@
final TaskCompletedEvent event = new TaskCompletedEvent( taskId, userId );
for ( TaskEventListener listener: listeners) {
- System.out.println("notifying listener " + listener);
listener.taskCompleted( event );
}
}
+ public void fireTaskFailed(final long taskId, final String userId) {
+ if ( this.listeners.isEmpty() ) {
+ return;
+ }
+
+ final TaskFailedEvent event = new TaskFailedEvent( taskId, userId );
+
+ for ( TaskEventListener listener: listeners) {
+ listener.taskFailed( event );
+ }
+ }
+ public void fireTaskSkipped(final long taskId, final String userId) {
+ if ( this.listeners.isEmpty() ) {
+ return;
+ }
+ final TaskSkippedEvent event = new TaskSkippedEvent( taskId, userId );
+
+ for ( TaskEventListener listener: listeners) {
+ listener.taskSkipped( event );
+ }
+ }
+
public void reset() {
this.listeners.clear();
}
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskFailedEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskFailedEvent.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskFailedEvent.java 2008-09-25 22:55:35 UTC (rev 23094)
@@ -0,0 +1,12 @@
+package org.drools.task.event;
+
+public class TaskFailedEvent extends TaskUserEvent {
+
+ public TaskFailedEvent() {
+ }
+
+ public TaskFailedEvent(long taskId, String userId) {
+ super( taskId, userId );
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskSkippedEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskSkippedEvent.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskSkippedEvent.java 2008-09-25 22:55:35 UTC (rev 23094)
@@ -0,0 +1,12 @@
+package org.drools.task.event;
+
+public class TaskSkippedEvent extends TaskUserEvent {
+
+ public TaskSkippedEvent() {
+ }
+
+ public TaskSkippedEvent(long taskId, String userId) {
+ super( taskId, userId );
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskUserEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskUserEvent.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskUserEvent.java 2008-09-25 22:55:35 UTC (rev 23094)
@@ -0,0 +1,35 @@
+package org.drools.task.event;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+public class TaskUserEvent extends TaskEvent implements Externalizable {
+
+ private String userId;
+
+ public TaskUserEvent() {
+ super();
+ }
+
+ public TaskUserEvent(long taskId, String userId) {
+ super( taskId );
+ this.userId = userId;
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ super.writeExternal( out );
+ out.writeUTF( userId );
+ }
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ super.readExternal( in );
+ userId = in.readUTF();
+ }
+
+ public String getUserId() {
+ return userId;
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskClient.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskClient.java 2008-09-25 22:48:59 UTC (rev 23093)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskClient.java 2008-09-25 22:55:35 UTC (rev 23094)
@@ -1,31 +1,14 @@
package org.drools.task.service;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.nio.charset.Charset;
import java.util.ArrayList;
-import java.util.Date;
import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
-import org.apache.mina.core.future.ConnectFuture;
-import org.apache.mina.core.service.IoHandler;
-import org.apache.mina.core.session.IoSession;
-import org.apache.mina.filter.codec.ProtocolCodecFilter;
-import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
-import org.apache.mina.filter.codec.serialization.ObjectSerializationEncoder;
-import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
-import org.apache.mina.transport.socket.SocketConnector;
-import org.apache.mina.transport.socket.nio.NioSocketConnector;
import org.drools.eventmessaging.EventKey;
import org.drools.eventmessaging.EventResponseHandler;
-import org.drools.task.AccessType;
import org.drools.task.Attachment;
-import org.drools.task.Content;
import org.drools.task.Comment;
+import org.drools.task.Content;
import org.drools.task.Task;
-import org.drools.task.User;
import org.drools.task.service.TaskClientHandler.AddAttachmentResponseHandler;
import org.drools.task.service.TaskClientHandler.AddCommentResponseHandler;
import org.drools.task.service.TaskClientHandler.AddTaskResponseHandler;
@@ -47,7 +30,7 @@
public void addTask(Task task,
AddTaskResponseHandler responseHandler) {
- List args = new ArrayList( 1 );
+ List<Object> args = new ArrayList<Object>( 1 );
args.add( task );
Command cmd = new Command( counter.getAndIncrement(),
CommandName.AddTaskRequest,
@@ -61,7 +44,7 @@
public void getTask(long taskId,
GetTaskResponseHandler responseHandler) {
- List args = new ArrayList( 1 );
+ List<Object> args = new ArrayList<Object>( 1 );
args.add( taskId );
Command cmd = new Command( counter.getAndIncrement(),
CommandName.GetTaskRequest,
@@ -77,7 +60,7 @@
public void addComment(long taskId,
Comment comment,
AddCommentResponseHandler responseHandler) {
- List args = new ArrayList( 2 );
+ List<Object> args = new ArrayList<Object>( 2 );
args.add( taskId );
args.add( comment );
Command cmd = new Command( counter.getAndIncrement(),
@@ -93,7 +76,7 @@
public void deleteComment(long taskId,
long commentId,
DeleteCommentResponseHandler responseHandler) {
- List args = new ArrayList( 2 );
+ List<Object> args = new ArrayList<Object>( 2 );
args.add( taskId );
args.add( commentId );
Command cmd = new Command( counter.getAndIncrement(),
@@ -110,7 +93,7 @@
Attachment attachment,
Content content,
AddAttachmentResponseHandler responseHandler) {
- List args = new ArrayList( 3 );
+ List<Object> args = new ArrayList<Object>( 3 );
args.add( taskId );
args.add( attachment );
args.add( content );
@@ -128,7 +111,7 @@
long attachmentId,
long contentId,
DeleteAttachmentResponseHandler responseHandler ) {
- List args = new ArrayList( 3 );
+ List<Object> args = new ArrayList<Object>( 3 );
args.add( taskId );
args.add( attachmentId );
args.add( contentId );
@@ -145,7 +128,7 @@
public void setDocumentContent(long taskId,
Content content,
SetDocumentResponseHandler responseHandler) {
- List args = new ArrayList( 2 );
+ List<Object> args = new ArrayList<Object>( 2 );
args.add( taskId );
args.add( content );
Command cmd = new Command( counter.getAndIncrement(),
@@ -160,7 +143,7 @@
public void getContent(long contentId,
GetContentResponseHandler responseHandler) {
- List args = new ArrayList( 1 );
+ List<Object> args = new ArrayList<Object>( 1 );
args.add( contentId );
Command cmd = new Command( counter.getAndIncrement(),
CommandName.GetContentRequest,
@@ -175,7 +158,7 @@
public void claim(long taskId,
String userId,
TaskOperationResponseHandler responseHandler) {
- List args = new ArrayList( 4 );
+ List<Object> args = new ArrayList<Object>( 4 );
args.add( Operation.Claim );
args.add( taskId );
args.add( userId );
@@ -193,7 +176,7 @@
public void start(long taskId,
String userId,
TaskOperationResponseHandler responseHandler) {
- List args = new ArrayList( 4 );
+ List<Object> args = new ArrayList<Object>( 4 );
args.add( Operation.Start );
args.add( taskId );
args.add( userId );
@@ -211,7 +194,7 @@
public void stop(long taskId,
String userId,
TaskOperationResponseHandler responseHandler) {
- List args = new ArrayList( 4 );
+ List<Object> args = new ArrayList<Object>( 4 );
args.add( Operation.Stop );
args.add( taskId );
args.add( userId );
@@ -229,7 +212,7 @@
public void release(long taskId,
String userId,
TaskOperationResponseHandler responseHandler) {
- List args = new ArrayList( 4 );
+ List<Object> args = new ArrayList<Object>( 4 );
args.add( Operation.Release );
args.add( taskId );
args.add( userId );
@@ -247,7 +230,7 @@
public void suspend(long taskId,
String userId,
TaskOperationResponseHandler responseHandler) {
- List args = new ArrayList( 4 );
+ List<Object> args = new ArrayList<Object>( 4 );
args.add( Operation.Suspend );
args.add( taskId );
args.add( userId );
@@ -265,7 +248,7 @@
public void resume(long taskId,
String userId,
TaskOperationResponseHandler responseHandler) {
- List args = new ArrayList( 4 );
+ List<Object> args = new ArrayList<Object>( 4 );
args.add( Operation.Resume );
args.add( taskId );
args.add( userId );
@@ -283,7 +266,7 @@
public void skip(long taskId,
String userId,
TaskOperationResponseHandler responseHandler) {
- List args = new ArrayList( 4 );
+ List<Object> args = new ArrayList<Object>( 4 );
args.add( Operation.Skip );
args.add( taskId );
args.add( userId );
@@ -302,7 +285,7 @@
String userId,
String targetUserId,
TaskOperationResponseHandler responseHandler) {
- List args = new ArrayList( 4 );
+ List<Object> args = new ArrayList<Object>( 4 );
args.add( Operation.Delegate );
args.add( taskId );
args.add( userId );
@@ -321,7 +304,7 @@
String userId,
String targetEntityId,
TaskOperationResponseHandler responseHandler) {
- List args = new ArrayList( 4 );
+ List<Object> args = new ArrayList<Object>( 4 );
args.add( Operation.Forward );
args.add( taskId );
args.add( userId );
@@ -339,7 +322,7 @@
public void complete(long taskId,
String userId,
TaskOperationResponseHandler responseHandler) {
- List args = new ArrayList( 4 );
+ List<Object> args = new ArrayList<Object>( 4 );
args.add( Operation.Complete );
args.add( taskId );
args.add( userId );
@@ -357,7 +340,7 @@
public void fail(long taskId,
String userId,
TaskOperationResponseHandler responseHandler) {
- List args = new ArrayList( 4 );
+ List<Object> args = new ArrayList<Object>( 4 );
args.add( Operation.Fail );
args.add( taskId );
args.add( userId );
@@ -375,7 +358,7 @@
public void getTasksOwned(String userId,
String language,
TaskSummaryResponseHandler responseHandler) {
- List args = new ArrayList( 2 );
+ List<Object> args = new ArrayList<Object>( 2 );
args.add( userId );
args.add( language );
Command cmd = new Command( counter.getAndIncrement(),
@@ -389,7 +372,7 @@
public void getTasksAssignedAsBusinessAdministrator(String userId,
String language,
TaskSummaryResponseHandler responseHandler) {
- List args = new ArrayList( 2 );
+ List<Object> args = new ArrayList<Object>( 2 );
args.add( userId );
args.add( language );
Command cmd = new Command( counter.getAndIncrement(),
@@ -403,7 +386,7 @@
public void getTasksAssignedAsExcludedOwner(String userId,
String language,
TaskSummaryResponseHandler responseHandler) {
- List args = new ArrayList( 2 );
+ List<Object> args = new ArrayList<Object>( 2 );
args.add( userId );
args.add( language );
Command cmd = new Command( counter.getAndIncrement(),
@@ -417,7 +400,7 @@
public void getTasksAssignedAsPotentialOwner(String userId,
String language,
TaskSummaryResponseHandler responseHandler) {
- List args = new ArrayList( 2 );
+ List<Object> args = new ArrayList<Object>( 2 );
args.add( userId );
args.add( language );
Command cmd = new Command( counter.getAndIncrement(),
@@ -431,7 +414,7 @@
public void getTasksAssignedAsRecipient(String userId,
String language,
TaskSummaryResponseHandler responseHandler) {
- List args = new ArrayList( 2 );
+ List<Object> args = new ArrayList<Object>( 2 );
args.add( userId );
args.add( language );
Command cmd = new Command( counter.getAndIncrement(),
@@ -445,7 +428,7 @@
public void getTasksAssignedAsTaskInitiator(String userId,
String language,
TaskSummaryResponseHandler responseHandler) {
- List args = new ArrayList( 2 );
+ List<Object> args = new ArrayList<Object>( 2 );
args.add( userId );
args.add( language );
Command cmd = new Command( counter.getAndIncrement(),
@@ -459,7 +442,7 @@
public void getTasksAssignedAsTaskStakeholder(String userId,
String language,
TaskSummaryResponseHandler responseHandler) {
- List args = new ArrayList( 2 );
+ List<Object> args = new ArrayList<Object>( 2 );
args.add( userId );
args.add( language );
Command cmd = new Command( counter.getAndIncrement(),
@@ -473,7 +456,7 @@
public void registerForEvent(EventKey key,
boolean remove,
EventResponseHandler responseHandler) {
- List args = new ArrayList( 3 );
+ List<Object> args = new ArrayList<Object>( 3 );
args.add( key );
args.add( remove );
args.add( this.name );
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/OperationCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/OperationCommand.java 2008-09-25 22:48:59 UTC (rev 23093)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/OperationCommand.java 2008-09-25 22:55:35 UTC (rev 23094)
@@ -2,9 +2,7 @@
import java.util.List;
-import org.drools.task.OrganizationalEntity;
import org.drools.task.Status;
-import org.drools.task.User;
public class OperationCommand {
private List<Status> status;
@@ -17,6 +15,7 @@
private boolean userIsExplicitPotentialOwner;
private boolean addTargetUserToPotentialOwners;
private boolean removeUserFromPotentialOwners;
+ private boolean skippable;
private Operation exec;
public List<Status> getStatus() {
@@ -83,7 +82,13 @@
public void setRemoveUserFromPotentialOwners(boolean removeUserFromPotentialOwners) {
this.removeUserFromPotentialOwners = removeUserFromPotentialOwners;
}
- public Operation getExec() {
+ public boolean isSkippable() {
+ return skippable;
+ }
+ public void setSkippable(boolean skippable) {
+ this.skippable = skippable;
+ }
+ public Operation getExec() {
return exec;
}
public void setExec(Operation exec) {
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java 2008-09-25 22:48:59 UTC (rev 23093)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java 2008-09-25 22:55:35 UTC (rev 23094)
@@ -1,7 +1,5 @@
package org.drools.task.service;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
@@ -11,14 +9,13 @@
import javax.persistence.EntityManager;
-import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.service.IoHandlerAdapter;
+import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.drools.eventmessaging.EventKey;
-import org.drools.task.AccessType;
import org.drools.task.Attachment;
-import org.drools.task.Content;
import org.drools.task.Comment;
+import org.drools.task.Content;
import org.drools.task.Task;
import org.drools.task.query.TaskSummary;
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServiceSession.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServiceSession.java 2008-09-25 22:48:59 UTC (rev 23093)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServiceSession.java 2008-09-25 22:55:35 UTC (rev 23094)
@@ -63,7 +63,7 @@
taskData.setStatus( Status.Created );
if ( task.getPeopleAssignments() != null ) {
- List potentialOwners = task.getPeopleAssignments().getPotentialOwners();
+ List<OrganizationalEntity> potentialOwners = task.getPeopleAssignments().getPotentialOwners();
if ( potentialOwners.size() == 1 ) {
// if there is a single potential owner, assign and set status to Reserved
taskData.setActualOwner( (User) potentialOwners.get( 0 ) );
@@ -135,13 +135,11 @@
}
public TaskError evalCommand(Operation operation,
- List<OperationCommand> commands,
- Task task,
- User user,
- OrganizationalEntity targetEntity) {
- PeopleAssignments people = task.getPeopleAssignments();
+ List<OperationCommand> commands,
+ Task task,
+ User user,
+ OrganizationalEntity targetEntity) {
TaskData taskData = task.getTaskData();
- boolean operationAllowed = false;
boolean statusMatched = false;
for ( OperationCommand command : commands ) {
// first find out if we have a matching status
@@ -235,6 +233,10 @@
// if user has rights to execute the command, make sure user is explicitely specified (not as a group)
operationAllowed = people.getPotentialOwners().contains( user );
}
+
+ if ( operationAllowed && command.isSkippable() ) {
+ operationAllowed = taskData.isSkipable();
+ }
return operationAllowed;
}
@@ -286,9 +288,9 @@
}
public TaskError taskOperation(Operation operation,
- long taskId,
- String userId,
- String targetEntityId) {
+ long taskId,
+ String userId,
+ String targetEntityId) {
Task task = em.find( Task.class,
taskId );
@@ -332,6 +334,21 @@
task.getTaskData().getActualOwner().getId() );
break;
}
+
+ case Fail : {
+ // trigger event support
+ service.getEventSupport().fireTaskFailed( task.getId(),
+ task.getTaskData().getActualOwner().getId() );
+ break;
+ }
+
+ case Skip : {
+ // trigger event support
+ service.getEventSupport().fireTaskSkipped( task.getId(),
+ task.getTaskData().getActualOwner().getId() );
+ break;
+ }
+
}
} catch ( Exception e ) {
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/orm.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/orm.xml 2008-09-25 22:48:59 UTC (rev 23093)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/META-INF/orm.xml 2008-09-25 22:55:35 UTC (rev 23094)
@@ -98,7 +98,7 @@
t.taskData.activationTime,
t.taskData.expirationTime)
from
- Task t left join t.taskData.createdBy,
+ Task t left join t.taskData.createdBy left join t.taskData.actualOwner,
I18NText names,
I18NText subjects,
I18NText descriptions,
@@ -115,6 +115,8 @@
descriptions.language = :language and
descriptions in elements( t.descriptions) and
+
+ t.taskData.status in ('Created', 'Ready', 'Reserved', 'InProgress', 'Suspended') and
t.taskData.expirationTime is null
</query>
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/operations-dsl.mvel
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/operations-dsl.mvel 2008-09-25 22:48:59 UTC (rev 23093)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/resources/org/drools/task/service/operations-dsl.mvel 2008-09-25 22:55:35 UTC (rev 23094)
@@ -56,17 +56,20 @@
: [ new OperationCommand().{
status = [ Status.Created ],
allowed = [ Allowed.Initiator, Allowed.BusinessAdministrator ],
- newStatus = Status.Obsolete
+ newStatus = Status.Obsolete,
+ skippable = true
},
new OperationCommand().{
status = [ Status.Ready ],
allowed = [ Allowed.PotentialOwner, Allowed.BusinessAdministrator ],
- newStatus = Status.Obsolete
+ newStatus = Status.Obsolete,
+ skippable = true
},
new OperationCommand().{
status = [ Status.Reserved, Status.InProgress ],
allowed = [ Allowed.Owner, Allowed.BusinessAdministrator ],
- newStatus = Status.Obsolete
+ newStatus = Status.Obsolete,
+ skippable = true
} ],
Operation.Delegate
: [ new OperationCommand().{
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/process/workitem/wsht/WSHumanTaskHandlerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/process/workitem/wsht/WSHumanTaskHandlerTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/process/workitem/wsht/WSHumanTaskHandlerTest.java 2008-09-25 22:55:35 UTC (rev 23094)
@@ -0,0 +1,293 @@
+package org.drools.process.workitem.wsht;
+
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+import org.drools.process.instance.WorkItem;
+import org.drools.process.instance.WorkItemHandler;
+import org.drools.process.instance.WorkItemManager;
+import org.drools.process.instance.impl.WorkItemImpl;
+import org.drools.task.BaseTest;
+import org.drools.task.Status;
+import org.drools.task.query.TaskSummary;
+import org.drools.task.service.BlockingTaskOperationResponseHandler;
+import org.drools.task.service.BlockingTaskSummaryResponseHandler;
+import org.drools.task.service.MinaTaskClient;
+import org.drools.task.service.MinaTaskServer;
+import org.drools.task.service.TaskClientHandler;
+
+public class WSHumanTaskHandlerTest extends BaseTest {
+
+ MinaTaskServer server;
+ MinaTaskClient client;
+ WSHumanTaskHandler handler;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ server = new MinaTaskServer( taskService );
+ Thread thread = new Thread( server );
+ thread.start();
+ Thread.sleep( 500 );
+ client = new MinaTaskClient("client 1", new TaskClientHandler());
+ NioSocketConnector connector = new NioSocketConnector();
+ SocketAddress address = new InetSocketAddress("127.0.0.1", 9123);
+ client.connect(connector, address);
+ handler = new WSHumanTaskHandler();
+ }
+
+ protected void tearDown() throws Exception {
+ handler.dispose();
+ client.disconnect();
+ server.stop();
+ super.tearDown();
+ }
+
+ public void testTask() throws Exception {
+ TestWorkItemManager manager = new TestWorkItemManager();
+ WorkItemImpl workItem = new WorkItemImpl();
+ workItem.setName("Human Task");
+ workItem.setParameter("TaskName", "TaskName");
+ workItem.setParameter("Comment", "Comment");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ BlockingTaskSummaryResponseHandler responseHandler = new BlockingTaskSummaryResponseHandler();
+ client.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+ List<TaskSummary> tasks = responseHandler.getResults();
+ assertEquals(1, tasks.size());
+ TaskSummary task = tasks.get(0);
+ assertEquals("TaskName", task.getName());
+ assertEquals(10, task.getPriority());
+ assertEquals("Comment", task.getDescription());
+ assertEquals(Status.Reserved, task.getStatus());
+ assertEquals("Darth Vader", task.getActualOwner().getId());
+
+ System.out.println("Starting task " + task.getId());
+ BlockingTaskOperationResponseHandler operationResponseHandler = new BlockingTaskOperationResponseHandler();
+ client.start(task.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(5000);
+ System.out.println("Started task " + task.getId());
+
+ System.out.println("Completing task " + task.getId());
+ operationResponseHandler = new BlockingTaskOperationResponseHandler();
+ client.complete(task.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(5000);
+ System.out.println("Completed task " + task.getId());
+
+ assertTrue(manager.isCompleted());
+ }
+
+ public void testTaskMultipleActors() throws Exception {
+ TestWorkItemManager manager = new TestWorkItemManager();
+ WorkItemImpl workItem = new WorkItemImpl();
+ workItem.setName("Human Task");
+ workItem.setParameter("TaskName", "TaskName");
+ workItem.setParameter("Comment", "Comment");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader, Dalai Lama");
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ BlockingTaskSummaryResponseHandler responseHandler = new BlockingTaskSummaryResponseHandler();
+ client.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+ List<TaskSummary> tasks = responseHandler.getResults();
+ assertEquals(1, tasks.size());
+ TaskSummary task = tasks.get(0);
+ assertEquals("TaskName", task.getName());
+ assertEquals(10, task.getPriority());
+ assertEquals("Comment", task.getDescription());
+ assertEquals(Status.Ready, task.getStatus());
+
+ System.out.println("Claiming task " + task.getId());
+ BlockingTaskOperationResponseHandler operationResponseHandler = new BlockingTaskOperationResponseHandler();
+ client.claim(task.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(5000);
+ System.out.println("Claimed task " + task.getId());
+
+ System.out.println("Starting task " + task.getId());
+ operationResponseHandler = new BlockingTaskOperationResponseHandler();
+ client.start(task.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(5000);
+ System.out.println("Started task " + task.getId());
+
+ System.out.println("Completing task " + task.getId());
+ operationResponseHandler = new BlockingTaskOperationResponseHandler();
+ client.complete(task.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(5000);
+ System.out.println("Completed task " + task.getId());
+
+ assertTrue(manager.isCompleted());
+ }
+
+ public void testTaskFail() throws Exception {
+ TestWorkItemManager manager = new TestWorkItemManager();
+ WorkItemImpl workItem = new WorkItemImpl();
+ workItem.setName("Human Task");
+ workItem.setParameter("TaskName", "TaskName");
+ workItem.setParameter("Comment", "Comment");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ BlockingTaskSummaryResponseHandler responseHandler = new BlockingTaskSummaryResponseHandler();
+ client.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+ List<TaskSummary> tasks = responseHandler.getResults();
+ assertEquals(1, tasks.size());
+ TaskSummary task = tasks.get(0);
+ assertEquals("TaskName", task.getName());
+ assertEquals(10, task.getPriority());
+ assertEquals("Comment", task.getDescription());
+ assertEquals(Status.Reserved, task.getStatus());
+ assertEquals("Darth Vader", task.getActualOwner().getId());
+
+ System.out.println("Starting task " + task.getId());
+ BlockingTaskOperationResponseHandler operationResponseHandler = new BlockingTaskOperationResponseHandler();
+ client.start(task.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(5000);
+ System.out.println("Started task " + task.getId());
+
+ System.out.println("Failing task " + task.getId());
+ operationResponseHandler = new BlockingTaskOperationResponseHandler();
+ client.fail(task.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(5000);
+ System.out.println("Failed task " + task.getId());
+
+ assertTrue(manager.isAborted());
+ }
+
+ public void testTaskSkip() throws Exception {
+ TestWorkItemManager manager = new TestWorkItemManager();
+ WorkItemImpl workItem = new WorkItemImpl();
+ workItem.setName("Human Task");
+ workItem.setParameter("TaskName", "TaskName");
+ workItem.setParameter("Comment", "Comment");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ BlockingTaskSummaryResponseHandler responseHandler = new BlockingTaskSummaryResponseHandler();
+ client.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+ List<TaskSummary> tasks = responseHandler.getResults();
+ assertEquals(1, tasks.size());
+ TaskSummary task = tasks.get(0);
+ assertEquals("TaskName", task.getName());
+ assertEquals(10, task.getPriority());
+ assertEquals("Comment", task.getDescription());
+ assertEquals(Status.Reserved, task.getStatus());
+ assertEquals("Darth Vader", task.getActualOwner().getId());
+
+ System.out.println("Skipping task " + task.getId());
+ BlockingTaskOperationResponseHandler operationResponseHandler = new BlockingTaskOperationResponseHandler();
+ client.skip(task.getId(), "Darth Vader", operationResponseHandler);
+ operationResponseHandler.waitTillDone(5000);
+ System.out.println("Skipped task " + task.getId());
+
+ assertTrue(manager.isAborted());
+ }
+
+ public void testTaskAbortSkippable() throws Exception {
+ TestWorkItemManager manager = new TestWorkItemManager();
+ WorkItemImpl workItem = new WorkItemImpl();
+ workItem.setName("Human Task");
+ workItem.setParameter("TaskName", "TaskName");
+ workItem.setParameter("Comment", "Comment");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ handler.abortWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ BlockingTaskSummaryResponseHandler responseHandler = new BlockingTaskSummaryResponseHandler();
+ client.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+ List<TaskSummary> tasks = responseHandler.getResults();
+ assertEquals(0, tasks.size());
+ }
+
+ public void testTaskAbortNotSkippable() throws Exception {
+ TestWorkItemManager manager = new TestWorkItemManager();
+ WorkItemImpl workItem = new WorkItemImpl();
+ workItem.setName("Human Task");
+ workItem.setParameter("TaskName", "TaskName");
+ workItem.setParameter("Comment", "Comment");
+ workItem.setParameter("Priority", "10");
+ workItem.setParameter("ActorId", "Darth Vader");
+ workItem.setParameter("Skippable", "false");
+ handler.executeWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ BlockingTaskSummaryResponseHandler responseHandler = new BlockingTaskSummaryResponseHandler();
+ client.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+ List<TaskSummary> tasks = responseHandler.getResults();
+ assertEquals(1, tasks.size());
+
+ handler.abortWorkItem(workItem, manager);
+
+ Thread.sleep(500);
+
+ responseHandler = new BlockingTaskSummaryResponseHandler();
+ client.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK", responseHandler);
+ tasks = responseHandler.getResults();
+ assertEquals(1, tasks.size());
+ }
+
+ private class TestWorkItemManager implements WorkItemManager {
+
+ private boolean completed;
+ private boolean aborted;
+
+ public void abortWorkItem(long id) {
+ aborted = true;
+ }
+
+ public boolean isAborted() {
+ return aborted;
+ }
+
+ public void completeWorkItem(long id, Map<String, Object> results) {
+ completed = true;
+ }
+
+ public boolean isCompleted() {
+ return completed;
+ }
+
+ public WorkItem getWorkItem(long id) {
+ return null;
+ }
+
+ public Set<WorkItem> getWorkItems() {
+ return null;
+ }
+
+ public void internalAbortWorkItem(long id) {
+ }
+
+ public void internalAddWorkItem(WorkItem workItem) {
+ }
+
+ public void internalExecuteWorkItem(WorkItem workItem) {
+ }
+
+ public void registerWorkItemHandler(String workItemName, WorkItemHandler handler) {
+ }
+
+ }
+}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/MockEventMessagingTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/MockEventMessagingTest.java 2008-09-25 22:48:59 UTC (rev 23093)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/MockEventMessagingTest.java 2008-09-25 22:55:35 UTC (rev 23094)
@@ -17,7 +17,7 @@
import org.drools.task.Status;
import org.drools.task.Task;
import org.drools.task.event.EventPayload;
-import org.drools.task.event.TaskClaimedEvent;
+import org.drools.task.event.TaskUserEvent;
import org.drools.task.event.TaskCompletedEvent;
import org.drools.task.event.TaskEventKey;
import org.drools.task.service.MinaTaskClient;
@@ -41,7 +41,7 @@
long taskId = task.getId();
- EventKey key = new TaskEventKey(TaskClaimedEvent.class, taskId );
+ EventKey key = new TaskEventKey(TaskUserEvent.class, taskId );
MockEventTriggerTransport transport = new MockEventTriggerTransport();
taskService.getEventKeys().register( key, transport );
@@ -49,8 +49,8 @@
taskSession.taskOperation( Operation.Claim, taskId, users.get( "darth" ).getId(), null );
assertEquals( 1, transport.list.size() );
- assertEquals( taskId, ((TaskClaimedEvent) ((Payload) transport.list.get(0)).get()).getTaskId() );
- assertEquals( users.get( "darth" ).getId(), ((TaskClaimedEvent) ((Payload) transport.list.get(0)).get()).getUserId() );
+ assertEquals( taskId, ((TaskUserEvent) ((Payload) transport.list.get(0)).get()).getTaskId() );
+ assertEquals( users.get( "darth" ).getId(), ((TaskUserEvent) ((Payload) transport.list.get(0)).get()).getUserId() );
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceDeadlinesTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceDeadlinesTest.java 2008-09-25 22:48:59 UTC (rev 23093)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceDeadlinesTest.java 2008-09-25 22:55:35 UTC (rev 23094)
@@ -31,7 +31,7 @@
import org.drools.task.Status;
import org.drools.task.Task;
import org.drools.task.User;
-import org.drools.task.event.TaskClaimedEvent;
+import org.drools.task.event.TaskUserEvent;
import org.drools.task.event.TaskEventKey;
import org.drools.task.service.DefaultEscalatedDeadlineHandler;
import org.drools.util.ChainedProperties;
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEventMessagingTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEventMessagingTest.java 2008-09-25 22:48:59 UTC (rev 23093)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEventMessagingTest.java 2008-09-25 22:55:35 UTC (rev 23094)
@@ -18,7 +18,7 @@
import org.drools.task.MockUserInfo;
import org.drools.task.Status;
import org.drools.task.Task;
-import org.drools.task.event.TaskClaimedEvent;
+import org.drools.task.event.TaskUserEvent;
import org.drools.task.event.TaskEventKey;
import org.drools.task.service.MockEventMessagingTest.MockEventTriggerTransport;
@@ -84,7 +84,7 @@
Task task1 = getTaskResponseHandler.getTask();
assertEquals( Status.Ready , task1.getTaskData().getStatus() );
- EventKey key = new TaskEventKey(TaskClaimedEvent.class, taskId );
+ EventKey key = new TaskEventKey(TaskUserEvent.class, taskId );
BlockingEventResponseHandler handler = new BlockingEventResponseHandler();
client.registerForEvent( key, true, handler );
Thread.sleep( 3000 );
@@ -93,7 +93,7 @@
handler.waitTillDone( 5000 );
Payload payload = handler.getPayload();
- TaskClaimedEvent event = ( TaskClaimedEvent ) payload.get();
+ TaskUserEvent event = ( TaskUserEvent ) payload.get();
assertNotNull( event );
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/LoadUsers.mvel
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/LoadUsers.mvel 2008-09-25 22:48:59 UTC (rev 23093)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/resources/org/drools/task/LoadUsers.mvel 2008-09-25 22:55:35 UTC (rev 23094)
@@ -5,7 +5,7 @@
'peter' : new User('Peter Parker'), 'steve' : new User('Steve Rogers'),
'sly' : new User('Sly Stalone'), 'liz' : new User('Elizabeth Windsor'),
'bruce' : new User('Bruce Wayne' ), 'tony' : new User('Tony Stark'),
- 'luke' : new User('Luke Cage')
+ 'luke' : new User('Luke Cage'), 'admin' : new User('Administrator')
];
return users;
More information about the jboss-svn-commits
mailing list