[jboss-svn-commits] JBL Code SVN: r22769 - in labs/jbossrules/trunk/drools-process/drools-process-task/src: main/java/org/drools/eventmessaging and 6 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Sep 15 02:50:33 EDT 2008
Author: mark.proctor at jboss.com
Date: 2008-09-15 02:50:32 -0400 (Mon, 15 Sep 2008)
New Revision: 22769
Added:
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/eventmessaging/
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/eventmessaging/EventKey.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/eventmessaging/EventKeys.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/eventmessaging/EventResponseHandler.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/eventmessaging/EventTriggerTransport.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/eventmessaging/Payload.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/
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/EventPayload.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/TaskClosedEvent.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/TaskEventKey.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/BaseMinaClient.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/BaseMinaHandler.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/BaseMinaServer.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaEventTransport.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/eventmessaging/
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingEventResponseHandler.java
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/TaskServiceEventMessagingTest.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/waitevents/
Modified:
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/CommandName.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/MinaTaskServer.java
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskClientHandler.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/TaskService.java
Log:
JBRULES-1745 WS-Human-Task
-Can now do event callbacks.
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/eventmessaging/EventKey.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/eventmessaging/EventKey.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/eventmessaging/EventKey.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -0,0 +1,8 @@
+/**
+ *
+ */
+package org.drools.eventmessaging;
+
+public interface EventKey {
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/eventmessaging/EventKeys.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/eventmessaging/EventKeys.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/eventmessaging/EventKeys.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -0,0 +1,42 @@
+package org.drools.eventmessaging;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public class EventKeys {
+ private Map<EventKey, List<EventTriggerTransport>> keys;
+
+ public EventKeys() {
+ keys = new HashMap<EventKey, List<EventTriggerTransport>>();
+ }
+
+ public void register(EventKey key, EventTriggerTransport target) {
+ List<EventTriggerTransport> list = keys.get( key);
+ if ( list == null ) {
+ list = new ArrayList<EventTriggerTransport>();
+ keys.put( key, list );
+ }
+ list.add( target );
+ }
+
+ public void unregister(EventKey key, EventTriggerTransport target) {
+ List<EventTriggerTransport> list = keys.get( key);
+ if ( list != null ) {
+ list.remove( target );
+ }
+ }
+
+ public List<EventTriggerTransport> getTargets(EventKey key) {
+ return keys.get( key );
+ }
+
+ public List<EventTriggerTransport> removeKey(EventKey key) {
+ return keys.remove( key );
+ }
+
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/eventmessaging/EventResponseHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/eventmessaging/EventResponseHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/eventmessaging/EventResponseHandler.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -0,0 +1,7 @@
+package org.drools.eventmessaging;
+
+import org.drools.task.service.BaseMinaHandler.ResponseHandler;
+
+public interface EventResponseHandler extends ResponseHandler {
+ public void execute(Payload payload);
+}
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/eventmessaging/EventTriggerTransport.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/eventmessaging/EventTriggerTransport.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/eventmessaging/EventTriggerTransport.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -0,0 +1,8 @@
+package org.drools.eventmessaging;
+
+
+public interface EventTriggerTransport {
+ public void trigger(Payload payload);
+
+ public boolean isRemove();
+}
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/eventmessaging/Payload.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/eventmessaging/Payload.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/eventmessaging/Payload.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -0,0 +1,5 @@
+package org.drools.eventmessaging;
+
+public interface Payload {
+ public Object get();
+}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/DefaultTaskEventListener.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -0,0 +1,11 @@
+package org.drools.task.event;
+
+public class DefaultTaskEventListener implements TaskEventListener {
+
+ public void taskClaimed(TaskClaimedEvent event) {
+ }
+
+ public void taskClosed(TaskClosedEvent event) {
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/EventPayload.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/EventPayload.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/EventPayload.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -0,0 +1,32 @@
+package org.drools.task.event;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+import org.drools.eventmessaging.Payload;
+
+public class EventPayload implements Payload, Externalizable {
+ private TaskEvent event;
+
+ public EventPayload() {
+
+ }
+
+ public EventPayload(TaskEvent event) {
+ this.event = event;
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject( event );
+ }
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ event = ( TaskEvent ) in.readObject();
+ }
+
+ public Object get() {
+ return event;
+ }
+}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/MessagingTaskEventListener.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -0,0 +1,56 @@
+package org.drools.task.event;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.drools.eventmessaging.EventKey;
+import org.drools.eventmessaging.EventKeys;
+import org.drools.eventmessaging.EventTriggerTransport;
+import org.drools.eventmessaging.Payload;
+
+public class MessagingTaskEventListener implements TaskEventListener {
+ EventKeys keys;
+
+ public MessagingTaskEventListener(EventKeys keys) {
+ this.keys = keys;
+ }
+
+ public void taskClaimed(TaskClaimedEvent event) {
+ EventKey key = new TaskEventKey(TaskClaimedEvent.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 taskClosed(TaskClosedEvent event) {
+ EventKey key = new TaskEventKey(TaskClosedEvent.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 );
+ }
+ }
+
+}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskClaimedEvent.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -0,0 +1,34 @@
+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 TaskEvent implements Externalizable {
+ private long userId;
+
+ public TaskClaimedEvent() {
+ super();
+ }
+
+ public TaskClaimedEvent(long taskId, long userId) {
+ super( taskId );
+ this.userId = userId;
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ super.writeExternal( out );
+ out.writeLong( userId );
+ }
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ super.readExternal( in );
+ userId = in.readLong();
+ }
+
+ public long getUserId() {
+ return userId;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskClosedEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskClosedEvent.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskClosedEvent.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -0,0 +1,29 @@
+package org.drools.task.event;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+public class TaskClosedEvent extends TaskEvent implements Externalizable {
+ private long userId;
+
+ public TaskClosedEvent(long taskId, long userId) {
+ super( taskId );
+ this.userId = userId;
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeLong( userId );
+ }
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ userId = in.readLong();
+ }
+
+
+ public long getUserId() {
+ return userId;
+ }
+
+}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEvent.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -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;
+import java.util.EventObject;
+
+public abstract class TaskEvent extends EventObject implements Externalizable {
+ private static final String dummySource = "";
+ private long taskId;
+
+ public TaskEvent() {
+ super( dummySource );
+ }
+
+ public TaskEvent(long taskId) {
+ super( taskId );
+ this.taskId = (Long) taskId;
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeLong( taskId );
+ }
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ taskId = in.readLong();
+ source = taskId;
+ }
+
+ public long getTaskId() {
+ return taskId;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEventKey.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEventKey.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEventKey.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -0,0 +1,69 @@
+package org.drools.task.event;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+import org.drools.eventmessaging.EventKey;
+
+
+public class TaskEventKey implements EventKey, Externalizable {
+ private Class<? extends TaskEvent> event;
+ private long taskId;
+
+ public TaskEventKey() {
+
+ }
+
+ public TaskEventKey(Class<? extends TaskEvent> event, long taskId) {
+ this.event = event;
+ this.taskId = taskId;
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeUTF( event.getName() );
+ out.writeLong( taskId );
+ }
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ String className = in.readUTF();
+ try {
+ event = (Class< ? extends TaskEvent>) Thread.currentThread().getContextClassLoader().loadClass( className );
+ } catch( Exception e ) {
+ event = (Class< ? extends TaskEvent>) getClass().getClassLoader().loadClass( className );
+ }
+
+ taskId = in.readLong();
+ }
+
+ public Class< ? extends TaskEvent> getEvent() {
+ return event;
+ }
+
+ public long getTaskId() {
+ return this.taskId;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((event == null) ? 0 : event.hashCode());
+ result = prime * result + (int) (taskId ^ (taskId >>> 32));
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if ( this == obj ) return true;
+ if ( obj == null ) return false;
+ if ( !(obj instanceof TaskEventKey) ) return false;
+ TaskEventKey other = (TaskEventKey) obj;
+ if ( event == null ) {
+ if ( other.event != null ) return false;
+ } else if ( !event.equals( other.event ) ) return false;
+ if ( taskId != other.taskId ) return false;
+ return true;
+ }
+}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEventListener.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -0,0 +1,29 @@
+package org.drools.task.event;
+
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.EventListener;
+
+public interface TaskEventListener
+ extends
+ EventListener {
+
+ void taskClaimed(TaskClaimedEvent event);
+
+ void taskClosed(TaskClosedEvent event);
+
+}
\ No newline at end of file
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/event/TaskEventSupport.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -0,0 +1,104 @@
+package org.drools.task.event;
+
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.io.Externalizable;
+import java.io.ObjectOutput;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.drools.WorkingMemory;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.spi.Activation;
+import org.drools.spi.AgendaGroup;
+
+
+public class TaskEventSupport
+ implements
+ Externalizable {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 400L;
+ private List<TaskEventListener> listeners = new CopyOnWriteArrayList<TaskEventListener>();
+
+ public TaskEventSupport() {
+ }
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ listeners = (List<TaskEventListener>)in.readObject();
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(listeners);
+ }
+
+ public void addEventListener(final TaskEventListener listener) {
+ if ( !this.listeners.contains( listener ) ) {
+ this.listeners.add( listener );
+ }
+ }
+
+ public void removeEventListener(final TaskEventListener listener) {
+ this.listeners.remove( listener );
+ }
+
+ public List<TaskEventListener> getEventListeners() {
+ return Collections.unmodifiableList( this.listeners );
+ }
+
+ public int size() {
+ return this.listeners.size();
+ }
+
+ public boolean isEmpty() {
+ return this.listeners.isEmpty();
+ }
+
+ public void fireTaskClaimed(final long taskId, final long userId) {
+ if ( this.listeners.isEmpty() ) {
+ return;
+ }
+
+ final TaskClaimedEvent event = new TaskClaimedEvent(taskId, userId);
+
+ for ( TaskEventListener listener: listeners) {
+ listener.taskClaimed( event );
+ }
+ }
+
+ public void fireTaskClosed(final long taskId, final long userId) {
+ if ( this.listeners.isEmpty() ) {
+ return;
+ }
+
+ final TaskClosedEvent event = new TaskClosedEvent( taskId, userId );
+
+ for ( TaskEventListener listener: listeners) {
+ listener.taskClosed( event );
+ }
+ }
+
+
+
+ public void reset() {
+ this.listeners.clear();
+ }
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/BaseMinaClient.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/BaseMinaClient.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/BaseMinaClient.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -0,0 +1,72 @@
+package org.drools.task.service;
+
+import java.net.SocketAddress;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.mina.core.future.ConnectFuture;
+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.transport.socket.SocketConnector;
+
+public class BaseMinaClient {
+ protected IoSession session;
+
+ protected final BaseMinaHandler handler;
+ protected final String name;
+ protected AtomicInteger counter;
+
+ public BaseMinaClient(String name, BaseMinaHandler handler) {
+ if (name == null) {
+ throw new IllegalArgumentException("Name can not be null");
+ }
+ this.name = name;
+ this.handler = handler;
+ counter = new AtomicInteger();
+ }
+
+ public boolean connect(SocketConnector connector, SocketAddress address) {
+ if (session != null && session.isConnected()) {
+ throw new IllegalStateException(
+ "Already connected. Disconnect first.");
+ }
+
+ connector.setHandler( this.handler );
+
+ try {
+// SocketConnectorConfig config = new SocketConnectorConfig();
+// if (useSsl) {
+// SSLContext sslContext = BogusSSLContextFactory
+// .getInstance(false);
+// SSLFilter sslFilter = new SSLFilter(sslContext);
+// sslFilter.setUseClientMode(true);
+// config.getFilterChain().addLast("sslFilter", sslFilter);
+// }
+
+ //connector.setHandler( arg0 );
+
+ connector.getFilterChain().addLast(
+ "codec",
+ new ProtocolCodecFilter(
+ new ObjectSerializationCodecFactory()));
+
+ ConnectFuture future1 = connector.connect( address );
+ future1.join();
+ if (!future1.isConnected()) {
+ return false;
+ }
+ session = future1.getSession();
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ public void disconnect() {
+ if ( session!= null && session.isConnected() ) {
+ session.close();
+ session.getCloseFuture().join();
+ }
+ }
+}
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/BaseMinaHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/BaseMinaHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/BaseMinaHandler.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -0,0 +1,29 @@
+package org.drools.task.service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.mina.core.service.IoHandlerAdapter;
+import org.apache.mina.core.session.IdleStatus;
+import org.apache.mina.core.session.IoSession;
+import org.drools.task.Content;
+import org.drools.task.Task;
+import org.drools.task.query.TaskSummary;
+
+public class BaseMinaHandler extends IoHandlerAdapter
+{
+ protected Map<Integer, ResponseHandler> responseHandlers;
+
+ public BaseMinaHandler() {
+ responseHandlers = new HashMap<Integer, ResponseHandler>();
+ }
+
+ public void addResponseHandler(int id, ResponseHandler responseHandler) {
+ responseHandlers.put( id, responseHandler );
+ }
+
+ public static interface ResponseHandler {
+
+ }
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/BaseMinaServer.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/BaseMinaServer.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/BaseMinaServer.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -0,0 +1,71 @@
+package org.drools.task.service;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+import org.apache.mina.core.service.IoAcceptor;
+import org.apache.mina.core.service.IoHandlerAdapter;
+import org.apache.mina.core.session.IdleStatus;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
+import org.apache.mina.filter.logging.LoggingFilter;
+import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
+
+public class BaseMinaServer
+ implements
+ Runnable {
+ private final int port;
+
+ IoHandlerAdapter handler;
+
+ IoAcceptor acceptor;
+
+ volatile boolean running;
+
+ public BaseMinaServer(IoHandlerAdapter handler,
+ int port) {
+ this.handler = handler;
+ this.port = port;
+ }
+
+ public void run() {
+ try {
+ start();
+ while ( running ) {
+ Thread.sleep( 100 );
+ }
+ } catch ( Exception e ) {
+ throw new RuntimeException( "Server Exception with class " + getClass() + " using port " + port,
+ e );
+ }
+ }
+
+ public void start() throws IOException {
+ running = true;
+
+ acceptor = new NioSocketAcceptor();
+
+ acceptor.getFilterChain().addLast( "logger",
+ new LoggingFilter() );
+ acceptor.getFilterChain().addLast( "codec",
+ new ProtocolCodecFilter( new ObjectSerializationCodecFactory() ) );
+
+ acceptor.setHandler( handler );
+ acceptor.getSessionConfig().setReadBufferSize( 2048 );
+ acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE,
+ 10 );
+ acceptor.bind( new InetSocketAddress( "127.0.0.1", port ) );
+ }
+
+ public IoAcceptor getIoAcceptor() {
+ return acceptor;
+ }
+
+ public void stop() {
+ acceptor.dispose();
+ running = false;
+ }
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/CommandName.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/CommandName.java 2008-09-15 05:20:06 UTC (rev 22768)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/CommandName.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -39,18 +39,19 @@
AddCommentRequest,
AddCommentResponse,
DeleteCommentRequest,
- DeleteCommentResponse,
+ DeleteCommentResponse,
-
-
- QueryTasksOwned,
-
+ QueryTasksOwned,
QueryTasksAssignedAsBusinessAdministrator,
QueryTasksAssignedAsExcludedOwner,
QueryTasksAssignedAsPotentialOwner,
QueryTasksAssignedAsRecipient,
QueryTasksAssignedAsTaskInitiator,
- QueryTasksAssignedAsTaskStakeholder,
+ QueryTasksAssignedAsTaskStakeholder,
+ QueryTaskSummaryResponse,
- QueryTaskSummaryResponse;
+ RegisterForEventRequest,
+ EventTriggerResponse,
+
+ RegisterClient;
}
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaEventTransport.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaEventTransport.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaEventTransport.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -0,0 +1,35 @@
+package org.drools.task.service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.mina.core.session.IoSession;
+import org.drools.eventmessaging.EventTriggerTransport;
+import org.drools.eventmessaging.Payload;
+
+public class MinaEventTransport implements EventTriggerTransport {
+ private String uuid;
+ private Map<String, IoSession> sessions;
+ private int responseId;
+ private boolean remove;
+
+ MinaEventTransport(String uuid, int responseId, Map<String, IoSession> sessions, boolean remove) {
+ this.uuid = uuid;
+ this.responseId = responseId;
+ this.sessions = sessions;
+ this.remove = remove;
+ }
+
+ public void trigger(Payload payload) {
+ IoSession session = sessions.get( uuid );
+ List args = new ArrayList( 1 );
+ args.add( payload );
+ Command cmd = new Command( responseId, CommandName.EventTriggerResponse, args);
+ session.write( cmd );
+ }
+
+ public boolean isRemove() {
+ return this.remove;
+ }
+}
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-15 05:20:06 UTC (rev 22768)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskClient.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -18,6 +18,8 @@
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;
@@ -32,308 +34,352 @@
import org.drools.task.service.TaskClientHandler.SetDocumentResponseHandler;
import org.drools.task.service.TaskClientHandler.TaskSummaryResponseHandler;
-public class MinaTaskClient
-{
- private final TaskClientHandler handler;
+public class MinaTaskClient extends BaseMinaClient {
+
+ public MinaTaskClient(String name,
+ TaskClientHandler handler) {
+ super( name,
+ handler );
+ }
- private final String name;
+ public void addTask(Task task,
+ AddTaskResponseHandler responseHandler) {
+ List args = new ArrayList( 1 );
+ args.add( task );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.AddTaskRequest,
+ args );
- private IoSession session;
-
- private AtomicInteger counter;
-
- public static void main(String[] args) throws Exception {
- MinaTaskClient client = new MinaTaskClient("test client", new TaskClientHandler() );
- NioSocketConnector connector = new NioSocketConnector();
- SocketAddress address = new InetSocketAddress( "127.0.0.1", 9123 );
- client.connect( connector, address );
- }
+ handler.addResponseHandler( cmd.getId(),
+ responseHandler );
- public MinaTaskClient(String name, TaskClientHandler handler) {
- if (name == null) {
- throw new IllegalArgumentException("Name can not be null");
- }
- this.name = name;
- this.handler = handler;
- counter = new AtomicInteger();
+ session.write( cmd );
}
- public boolean connect(SocketConnector connector, SocketAddress address) {
- if (session != null && session.isConnected()) {
- throw new IllegalStateException(
- "Already connected. Disconnect first.");
- }
+ public void getTask(long taskId,
+ GetTaskResponseHandler responseHandler) {
+ List args = new ArrayList( 1 );
+ args.add( taskId );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.GetTaskRequest,
+ args );
- connector.setHandler( this.handler );
-
- try {
-// SocketConnectorConfig config = new SocketConnectorConfig();
-// if (useSsl) {
-// SSLContext sslContext = BogusSSLContextFactory
-// .getInstance(false);
-// SSLFilter sslFilter = new SSLFilter(sslContext);
-// sslFilter.setUseClientMode(true);
-// config.getFilterChain().addLast("sslFilter", sslFilter);
-// }
-
- //connector.setHandler( arg0 );
-
- connector.getFilterChain().addLast(
- "codec",
- new ProtocolCodecFilter(
- new ObjectSerializationCodecFactory()));
+ handler.addResponseHandler( cmd.getId(),
+ responseHandler );
- ConnectFuture future1 = connector.connect( address );
- future1.join();
- if (!future1.isConnected()) {
- return false;
- }
- session = future1.getSession();
- //session.write("LOGIN " + name);
- return true;
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- }
- }
-
- public void disconnect() {
- if ( session!= null && session.isConnected() ) {
- session.close();
- session.getCloseFuture().join();
- }
- }
-
- public void addTask(Task task, AddTaskResponseHandler responseHandler ) {
- List args = new ArrayList( 1 );
- args.add( task );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.AddTaskRequest, args);
-
- handler.addResponseHandler( cmd.getId(), responseHandler );
-
session.write( cmd );
+
}
-
- public void getTask(long taskId, GetTaskResponseHandler responseHandler) {
- List args = new ArrayList( 1 );
- args.add( taskId );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.GetTaskRequest, args);
-
- handler.addResponseHandler( cmd.getId(), responseHandler );
-
- session.write( cmd );
-
- }
-
- public void addComment(long taskId, Comment comment, AddCommentResponseHandler responseHandler) {
+
+ public void addComment(long taskId,
+ Comment comment,
+ AddCommentResponseHandler responseHandler) {
List args = new ArrayList( 2 );
args.add( taskId );
args.add( comment );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.AddCommentRequest, args);
-
- handler.addResponseHandler( cmd.getId(), responseHandler );
-
- session.write( cmd );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.AddCommentRequest,
+ args );
+
+ handler.addResponseHandler( cmd.getId(),
+ responseHandler );
+
+ session.write( cmd );
}
-
- public void deleteComment(long taskId, long commentId) {
+
+ public void deleteComment(long taskId,
+ long commentId) {
List args = new ArrayList( 2 );
args.add( taskId );
args.add( commentId );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.DeleteCommentRequest, args);
-
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.DeleteCommentRequest,
+ args );
+
session.write( cmd );
}
-
-
- public void addAttachment(long taskId, Attachment attachment, Content content, AddAttachmentResponseHandler responseHandler ) {
+
+ public void addAttachment(long taskId,
+ Attachment attachment,
+ Content content,
+ AddAttachmentResponseHandler responseHandler) {
List args = new ArrayList( 3 );
args.add( taskId );
args.add( attachment );
args.add( content );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.AddAttachmentRequest, args);
-
- handler.addResponseHandler( cmd.getId(), responseHandler );
-
- session.write( cmd );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.AddAttachmentRequest,
+ args );
+
+ handler.addResponseHandler( cmd.getId(),
+ responseHandler );
+
+ session.write( cmd );
}
-
- public void deleteAttachment(long taskId, long attachmentId, long contentId) {
+
+ public void deleteAttachment(long taskId,
+ long attachmentId,
+ long contentId) {
List args = new ArrayList( 3 );
args.add( taskId );
args.add( attachmentId );
args.add( contentId );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.DeleteAttachmentRequest, args);
-
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.DeleteAttachmentRequest,
+ args );
+
session.write( cmd );
- }
-
+ }
+
public void setDocumentContent(long taskId,
- Content content,
- SetDocumentResponseHandler responseHandler ) {
+ Content content,
+ SetDocumentResponseHandler responseHandler) {
List args = new ArrayList( 2 );
args.add( taskId );
args.add( content );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.SetDocumentContentRequest, args);
-
- handler.addResponseHandler( cmd.getId(), responseHandler );
-
- session.write( cmd );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.SetDocumentContentRequest,
+ args );
+
+ handler.addResponseHandler( cmd.getId(),
+ responseHandler );
+
+ session.write( cmd );
}
-
- public void getContent(long contentId, GetContentResponseHandler responseHandler) {
+
+ public void getContent(long contentId,
+ GetContentResponseHandler responseHandler) {
List args = new ArrayList( 1 );
args.add( contentId );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.GetContentRequest, args);
-
- handler.addResponseHandler( cmd.getId(), responseHandler );
-
- session.write( cmd );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.GetContentRequest,
+ args );
+
+ handler.addResponseHandler( cmd.getId(),
+ responseHandler );
+
+ session.write( cmd );
}
-
- public void claim(long taskId, long userId) {
+
+ public void claim(long taskId,
+ long userId) {
List args = new ArrayList( 1 );
args.add( taskId );
- args.add( userId );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.ClaimRequest, args);
-
- session.write( cmd );
+ args.add( userId );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.ClaimRequest,
+ args );
+
+ session.write( cmd );
}
-
- public void start(long taskId, long userId) {
+
+ public void start(long taskId,
+ long userId) {
List args = new ArrayList( 1 );
args.add( taskId );
- args.add( userId );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.StartRequest, args);
-
- session.write( cmd );
+ args.add( userId );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.StartRequest,
+ args );
+
+ session.write( cmd );
}
-
- public void stop(long taskId, long userId) {
+
+ public void stop(long taskId,
+ long userId) {
List args = new ArrayList( 1 );
args.add( taskId );
- args.add( userId );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.StopRequest, args);
-
- session.write( cmd );
+ args.add( userId );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.StopRequest,
+ args );
+
+ session.write( cmd );
}
-
- public void release(long taskId, long userId) {
+
+ public void release(long taskId,
+ long userId) {
List args = new ArrayList( 1 );
args.add( taskId );
- args.add( userId );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.ReleaseRequest, args);
-
- session.write( cmd );
- }
-
- public void suspend(long taskId, long userId) {
+ args.add( userId );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.ReleaseRequest,
+ args );
+
+ session.write( cmd );
+ }
+
+ public void suspend(long taskId,
+ long userId) {
List args = new ArrayList( 1 );
args.add( taskId );
- args.add( userId );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.SuspendRequest, args);
-
- session.write( cmd );
- }
-
- public void resume(long taskId, long userId) {
+ args.add( userId );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.SuspendRequest,
+ args );
+
+ session.write( cmd );
+ }
+
+ public void resume(long taskId,
+ long userId) {
List args = new ArrayList( 1 );
args.add( taskId );
- args.add( userId );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.ResumeRequest, args);
-
- session.write( cmd );
- }
-
- public void skip(long taskId, long userId) {
+ args.add( userId );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.ResumeRequest,
+ args );
+
+ session.write( cmd );
+ }
+
+ public void skip(long taskId,
+ long userId) {
List args = new ArrayList( 1 );
args.add( taskId );
- args.add( userId );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.SkipRequest, args);
-
- session.write( cmd );
- }
-
- public void complete(long taskId, long userId) {
+ args.add( userId );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.SkipRequest,
+ args );
+
+ session.write( cmd );
+ }
+
+ public void complete(long taskId,
+ long userId) {
List args = new ArrayList( 1 );
args.add( taskId );
- args.add( userId );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.CompleteRequest, args);
-
- session.write( cmd );
+ args.add( userId );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.CompleteRequest,
+ args );
+
+ session.write( cmd );
}
-
- public void fail(long taskId, long userId) {
+
+ public void fail(long taskId,
+ long userId) {
List args = new ArrayList( 1 );
args.add( taskId );
- args.add( userId );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.FailRequest, args);
-
- session.write( cmd );
- }
-
+ args.add( userId );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.FailRequest,
+ args );
- public void getTasksOwned(long userId, String language, TaskSummaryResponseHandler responseHandler) {
+ session.write( cmd );
+ }
+
+ public void getTasksOwned(long userId,
+ String language,
+ TaskSummaryResponseHandler responseHandler) {
List args = new ArrayList( 2 );
args.add( userId );
args.add( language );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.QueryTasksOwned, args);
- handler.addResponseHandler( cmd.getId(), responseHandler );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.QueryTasksOwned,
+ args );
+ handler.addResponseHandler( cmd.getId(),
+ responseHandler );
session.write( cmd );
}
-
- public void getTasksAssignedAsBusinessAdministrator(long userId, String language, TaskSummaryResponseHandler responseHandler) {
+
+ public void getTasksAssignedAsBusinessAdministrator(long userId,
+ String language,
+ TaskSummaryResponseHandler responseHandler) {
List args = new ArrayList( 2 );
args.add( userId );
args.add( language );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.QueryTasksAssignedAsBusinessAdministrator, args);
- handler.addResponseHandler( cmd.getId(), responseHandler );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.QueryTasksAssignedAsBusinessAdministrator,
+ args );
+ handler.addResponseHandler( cmd.getId(),
+ responseHandler );
session.write( cmd );
- }
-
- public void getTasksAssignedAsExcludedOwner(long userId, String language, TaskSummaryResponseHandler responseHandler) {
+ }
+
+ public void getTasksAssignedAsExcludedOwner(long userId,
+ String language,
+ TaskSummaryResponseHandler responseHandler) {
List args = new ArrayList( 2 );
args.add( userId );
args.add( language );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.QueryTasksAssignedAsExcludedOwner, args);
- handler.addResponseHandler( cmd.getId(), responseHandler );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.QueryTasksAssignedAsExcludedOwner,
+ args );
+ handler.addResponseHandler( cmd.getId(),
+ responseHandler );
session.write( cmd );
- }
-
- public void getTasksAssignedAsPotentialOwner(long userId, String language, TaskSummaryResponseHandler responseHandler) {
+ }
+
+ public void getTasksAssignedAsPotentialOwner(long userId,
+ String language,
+ TaskSummaryResponseHandler responseHandler) {
List args = new ArrayList( 2 );
args.add( userId );
args.add( language );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.QueryTasksAssignedAsPotentialOwner, args);
- handler.addResponseHandler( cmd.getId(), responseHandler );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.QueryTasksAssignedAsPotentialOwner,
+ args );
+ handler.addResponseHandler( cmd.getId(),
+ responseHandler );
session.write( cmd );
- }
-
- public void getTasksAssignedAsRecipient(long userId, String language, TaskSummaryResponseHandler responseHandler) {
+ }
+
+ public void getTasksAssignedAsRecipient(long userId,
+ String language,
+ TaskSummaryResponseHandler responseHandler) {
List args = new ArrayList( 2 );
args.add( userId );
args.add( language );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.QueryTasksAssignedAsRecipient, args);
- handler.addResponseHandler( cmd.getId(), responseHandler );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.QueryTasksAssignedAsRecipient,
+ args );
+ handler.addResponseHandler( cmd.getId(),
+ responseHandler );
session.write( cmd );
- }
-
- public void getTasksAssignedAsTaskInitiator(long userId, String language, TaskSummaryResponseHandler responseHandler) {
+ }
+
+ public void getTasksAssignedAsTaskInitiator(long userId,
+ String language,
+ TaskSummaryResponseHandler responseHandler) {
List args = new ArrayList( 2 );
args.add( userId );
args.add( language );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.QueryTasksAssignedAsTaskInitiator, args);
- handler.addResponseHandler( cmd.getId(), responseHandler );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.QueryTasksAssignedAsTaskInitiator,
+ args );
+ handler.addResponseHandler( cmd.getId(),
+ responseHandler );
session.write( cmd );
- }
-
- public void getTasksAssignedAsTaskStakeholder(long userId, String language, TaskSummaryResponseHandler responseHandler) {
+ }
+
+ public void getTasksAssignedAsTaskStakeholder(long userId,
+ String language,
+ TaskSummaryResponseHandler responseHandler) {
List args = new ArrayList( 2 );
args.add( userId );
args.add( language );
- Command cmd = new Command( counter.getAndIncrement(), CommandName.QueryTasksAssignedAsTaskStakeholder, args);
- handler.addResponseHandler( cmd.getId(), responseHandler );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.QueryTasksAssignedAsTaskStakeholder,
+ args );
+ handler.addResponseHandler( cmd.getId(),
+ responseHandler );
session.write( cmd );
- }
+ }
+ public void registerForEvent(EventKey key,
+ boolean remove,
+ EventResponseHandler responseHandler) {
+ List args = new ArrayList( 3 );
+ args.add( key );
+ args.add( remove );
+ args.add( this.name );
+ Command cmd = new Command( counter.getAndIncrement(),
+ CommandName.RegisterForEventRequest,
+ args );
+ handler.addResponseHandler( cmd.getId(),
+ responseHandler );
+ session.write( cmd );
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskServer.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskServer.java 2008-09-15 05:20:06 UTC (rev 22768)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/MinaTaskServer.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -1,72 +1,11 @@
package org.drools.task.service;
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
-
-import org.apache.mina.core.service.IoAcceptor;
-import org.apache.mina.core.session.IdleStatus;
-import org.apache.mina.filter.codec.ProtocolCodecFilter;
-import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
-import org.apache.mina.filter.logging.LoggingFilter;
-import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
-
-public class MinaTaskServer
+public class MinaTaskServer extends BaseMinaServer
implements
Runnable {
- private static final int PORT = 9123;
-
- TaskServerHandler handler;
-
- IoAcceptor acceptor;
-
- volatile boolean running;
-
public MinaTaskServer(TaskService service) {
- handler = new TaskServerHandler( service );
+ super( new TaskServerHandler( service ),
+ 9123 );
}
-
- public void run() {
- try {
- start();
- while ( running ) {
- Thread.sleep( 100 );
- }
- } catch ( Exception e ) {
- throw new RuntimeException( "Task Service Exception: ",
- e );
- }
- }
-
- public void start() throws IOException {
- running = true;
-
- acceptor = new NioSocketAcceptor();
-
- acceptor.getFilterChain().addLast( "logger",
- new LoggingFilter() );
- acceptor.getFilterChain().addLast( "codec",
- new ProtocolCodecFilter( new ObjectSerializationCodecFactory() ) );
-
- acceptor.setHandler( handler );
- acceptor.getSessionConfig().setReadBufferSize( 2048 );
- acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE,
- 10 );
- acceptor.bind( new InetSocketAddress( PORT ) );
- }
-
- public void stop() {
- acceptor.dispose();
- running = false;
- }
-
- public static void main(String[] args) throws IOException {
- EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.drools.task");
- TaskService taskService = new TaskService(emf);
- MinaTaskServer server = new MinaTaskServer(taskService);
- Thread thread = new Thread(server);
- thread.start();
- }
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskClientHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskClientHandler.java 2008-09-15 05:20:06 UTC (rev 22768)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskClientHandler.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -7,23 +7,16 @@
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.EventResponseHandler;
+import org.drools.eventmessaging.Payload;
import org.drools.task.Content;
import org.drools.task.Task;
import org.drools.task.query.TaskSummary;
-public class TaskClientHandler extends IoHandlerAdapter
-{
- private MinaTaskClient client;
- private Map<Integer, ResponseHandler> responseHandlers;
-
- public TaskClientHandler() {
- responseHandlers = new HashMap<Integer, ResponseHandler>();
- }
-
- public void addResponseHandler(int id, ResponseHandler responseHandler) {
- responseHandlers.put( id, responseHandler );
- }
-
+public class TaskClientHandler extends BaseMinaHandler {
+ private MinaTaskClient client;
+
+
public MinaTaskClient getClient() {
return client;
}
@@ -33,18 +26,18 @@
}
@Override
- public void exceptionCaught( IoSession session, Throwable cause ) throws Exception
- {
+ public void exceptionCaught(IoSession session,
+ Throwable cause) throws Exception {
cause.printStackTrace();
}
-
+
@Override
public void messageReceived(IoSession session,
Object message) throws Exception {
Command cmd = (Command) message;
switch ( cmd.getName() ) {
case GetTaskResponse : {
- Task task = ( Task ) cmd.getArguments().get( 0 );
+ Task task = (Task) cmd.getArguments().get( 0 );
GetTaskResponseHandler responseHandler = (GetTaskResponseHandler) responseHandlers.remove( cmd.getId() );
if ( responseHandler != null ) {
responseHandler.execute( task );
@@ -52,7 +45,7 @@
break;
}
case AddTaskResponse : {
- long taskId = ( Long ) cmd.getArguments().get( 0 );
+ long taskId = (Long) cmd.getArguments().get( 0 );
AddTaskResponseHandler responseHandler = (AddTaskResponseHandler) responseHandlers.remove( cmd.getId() );
if ( responseHandler != null ) {
responseHandler.execute( taskId );
@@ -60,96 +53,101 @@
break;
}
case AddCommentResponse : {
- long commentId = ( Long ) cmd.getArguments().get( 0 );
+ long commentId = (Long) cmd.getArguments().get( 0 );
AddCommentResponseHandler responseHandler = (AddCommentResponseHandler) responseHandlers.remove( cmd.getId() );
if ( responseHandler != null ) {
responseHandler.execute( commentId );
}
- break;
+ break;
}
case AddAttachmentResponse : {
- long attachmentId = ( Long ) cmd.getArguments().get( 0 );
- long contentId = ( Long ) cmd.getArguments().get( 1 );
+ long attachmentId = (Long) cmd.getArguments().get( 0 );
+ long contentId = (Long) cmd.getArguments().get( 1 );
AddAttachmentResponseHandler responseHandler = (AddAttachmentResponseHandler) responseHandlers.remove( cmd.getId() );
if ( responseHandler != null ) {
- responseHandler.execute( attachmentId, contentId );
+ responseHandler.execute( attachmentId,
+ contentId );
}
- break;
- }
+ break;
+ }
case GetContentResponse : {
- Content content = ( Content ) cmd.getArguments().get( 0 );
+ Content content = (Content) cmd.getArguments().get( 0 );
GetContentResponseHandler responseHandler = (GetContentResponseHandler) responseHandlers.remove( cmd.getId() );
if ( responseHandler != null ) {
responseHandler.execute( content );
}
break;
- }
+ }
case SetDocumentContentResponse : {
- long contentId = ( Long ) cmd.getArguments().get( 0 );
+ long contentId = (Long) cmd.getArguments().get( 0 );
SetDocumentResponseHandler responseHandler = (SetDocumentResponseHandler) responseHandlers.remove( cmd.getId() );
if ( responseHandler != null ) {
responseHandler.execute( contentId );
}
- break;
+ break;
}
case QueryTaskSummaryResponse : {
- List<TaskSummary> results = ( List<TaskSummary> ) cmd.getArguments().get( 0 );
- TaskSummaryResponseHandler responseHandler = ( TaskSummaryResponseHandler ) responseHandlers.remove( cmd.getId() );
+ List<TaskSummary> results = (List<TaskSummary>) cmd.getArguments().get( 0 );
+ TaskSummaryResponseHandler responseHandler = (TaskSummaryResponseHandler) responseHandlers.remove( cmd.getId() );
if ( responseHandler != null ) {
responseHandler.execute( results );
}
break;
}
+ case EventTriggerResponse : {
+ Payload payload = (Payload) cmd.getArguments().get( 0 );
+ EventResponseHandler responseHandler = (EventResponseHandler) responseHandlers.remove( cmd.getId() );
+ if ( responseHandler != null ) {
+ responseHandler.execute( payload );
+ }
+ break;
+ }
+ default : {
+
+ }
}
}
- @Override
- public void messageSent(IoSession session, Object message)
- {
- String str = message.toString();
- if( str.trim().equalsIgnoreCase("quit") ) {
- session.close();
- return;
- }
-
- }
-
- @Override
- public void sessionIdle( IoSession session, IdleStatus status ) throws Exception
- {
- System.out.println( "IDLE " + session.getIdleCount( status ));
- }
-
-
- public static interface ResponseHandler {
-
- }
-
- public static interface GetTaskResponseHandler extends ResponseHandler {
+ public static interface GetTaskResponseHandler
+ extends
+ ResponseHandler {
public void execute(Task task);
}
-
- public static interface AddTaskResponseHandler extends ResponseHandler {
+
+ public static interface AddTaskResponseHandler
+ extends
+ ResponseHandler {
public void execute(long taskId);
}
-
- public static interface AddCommentResponseHandler extends ResponseHandler {
+
+ public static interface AddCommentResponseHandler
+ extends
+ ResponseHandler {
public void execute(long commentId);
- }
-
- public static interface AddAttachmentResponseHandler extends ResponseHandler {
- public void execute(long attachmentId, long contentId);
- }
-
- public static interface SetDocumentResponseHandler extends ResponseHandler {
+ }
+
+ public static interface AddAttachmentResponseHandler
+ extends
+ ResponseHandler {
+ public void execute(long attachmentId,
+ long contentId);
+ }
+
+ public static interface SetDocumentResponseHandler
+ extends
+ ResponseHandler {
public void execute(long contentId);
- }
-
- public static interface GetContentResponseHandler extends ResponseHandler {
+ }
+
+ public static interface GetContentResponseHandler
+ extends
+ ResponseHandler {
public void execute(Content content);
- }
-
- public static interface TaskSummaryResponseHandler extends ResponseHandler {
+ }
+
+ public static interface TaskSummaryResponseHandler
+ extends
+ ResponseHandler {
public void execute(List<TaskSummary> results);
}
}
\ No newline at end of file
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-15 05:20:06 UTC (rev 22768)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskServerHandler.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -1,13 +1,17 @@
package org.drools.task.service;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
import java.util.ArrayList;
import java.util.Date;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.service.IoHandlerAdapter;
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;
@@ -17,9 +21,11 @@
public class TaskServerHandler extends IoHandlerAdapter {
private TaskService service;
+ private Map<String, IoSession> clients;
public TaskServerHandler(TaskService service) {
this.service = service;
+ this.clients = new HashMap<String, IoSession>();
}
@Override
@@ -250,6 +256,20 @@
session.write( resultsCmnd );
break;
}
+ case RegisterForEventRequest : {
+ EventKey key = ( EventKey ) cmd.getArguments().get( 0 );
+ boolean remove = ( Boolean ) cmd.getArguments().get( 1 );
+ String uuid = ( String ) cmd.getArguments().get( 2 );
+ clients.put( uuid, session );
+ MinaEventTransport transport = new MinaEventTransport(uuid, cmd.getId(), clients, remove );
+ service.getEventKeys().register( key, transport );
+ break;
+ }
+ case RegisterClient : {
+ String uuid = ( String ) cmd.getArguments().get( 0 );
+ clients.put( uuid, session );
+ break;
+ }
default : {
// unknown command
}
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskService.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskService.java 2008-09-15 05:20:06 UTC (rev 22768)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/task/service/TaskService.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -16,6 +16,8 @@
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;
+import org.drools.event.WorkingMemoryEventListener;
+import org.drools.eventmessaging.EventKeys;
import org.drools.task.AccessType;
import org.drools.task.Attachment;
import org.drools.task.Content;
@@ -29,9 +31,14 @@
import org.drools.task.TaskData;
import org.drools.task.User;
import org.drools.task.UserInfo;
+import org.drools.task.event.MessagingTaskEventListener;
+import org.drools.task.event.TaskEventListener;
+import org.drools.task.event.TaskEventSupport;
import org.drools.task.query.DeadlineSummary;
import org.drools.task.query.TaskSummary;
+import sun.misc.resources.Messages_zh_TW;
+
public class TaskService {
EntityManagerFactory emf;
@@ -51,13 +58,20 @@
ScheduledThreadPoolExecutor scheduler;
private EscalatedDeadlineHandler escalatedDeadlineHandler;
-
- private UserInfo userInfo;
+ private UserInfo userInfo;
+
+ private TaskEventSupport eventSupport;
+ private EventKeys eventKeys;
+
public TaskService(EntityManagerFactory emf) {
this.emf = emf;
em = emf.createEntityManager();
+ eventSupport = new TaskEventSupport();
+ eventKeys = new EventKeys();
+ eventSupport.addEventListener( new MessagingTaskEventListener( eventKeys ) );
+
try {
Reader reader = new InputStreamReader( getClass().getResourceAsStream( "TasksOwned.txt" ) );
tasksOwned = em.createQuery( toString( reader ) );
@@ -90,7 +104,7 @@
unescalatedDeadlines = em.createQuery( toString( reader ) );
long now = System.currentTimeMillis();
for ( Object object : unescalatedDeadlines.getResultList() ) {
- DeadlineSummary summary = (DeadlineSummary) object;
+ DeadlineSummary summary = (DeadlineSummary) object;
scheduler.schedule( new ScheduledTaskDeadline( summary.getTaskId(),
summary.getDeadlineId(),
this ),
@@ -101,8 +115,24 @@
throw new RuntimeException( "Unable to inialize TaskService, could not load and schedule oustanding deadlines",
e );
}
- }
-
+ }
+
+ public EventKeys getEventKeys() {
+ return eventKeys;
+ }
+
+ public void addEventListener(final TaskEventListener listener) {
+ this.eventSupport.addEventListener( listener );
+ }
+
+ public void removeEventListener(final TaskEventListener listener) {
+ this.eventSupport.removeEventListener( listener );
+ }
+
+ public List<TaskEventListener> getWorkingMemoryEventListeners() {
+ return this.eventSupport.getEventListeners();
+ }
+
public UserInfo getUserinfo() {
return userInfo;
}
@@ -146,7 +176,7 @@
if ( potentialOwners.size() == 1 ) {
// if there is a single potential owner, assign and set status to Reserved
taskData.setActualOwner( (User) potentialOwners.get( 0 ) );
- taskData.setStatus( Status.Reserved );
+ taskData.setStatus( Status.Reserved );
} else if ( potentialOwners.size() > 1 ) {
// multiple potential owners, so set to Ready so one can claim.
taskData.setStatus( Status.Ready );
@@ -203,61 +233,75 @@
}
}
}
-
+
if ( task.getTaskData().getStatus() == Status.Reserved ) {
// Task was reserved so owner should get icals
- SendIcal.getInstance().sendIcalForTask( task, userInfo );
+ SendIcal.getInstance().sendIcalForTask( task,
+ userInfo );
+
+ // trigger event support
+ eventSupport.fireTaskClaimed( task.getId(),
+ task.getTaskData().getActualOwner().getId() );
}
- }
+ }
public void claim(long taskId,
long userId) {
Task task = em.find( Task.class,
taskId );
-
- User user = em.find( User.class, userId );
-
+
+ User user = em.find( User.class,
+ userId );
+
TaskData taskData = task.getTaskData();
//task must be in status Ready
if ( taskData.getStatus() == Status.Ready ) {
// check permissions
PeopleAssignments people = task.getPeopleAssignments();
- if ( isAllowed( user, new List[] { people.getPotentialOwners(), people.getBusinessAdministrators() } ) ) {
+ if ( isAllowed( user,
+ new List[]{people.getPotentialOwners(), people.getBusinessAdministrators()} ) ) {
em.getTransaction().begin();
// only potential owners and business admin can claim a task
taskData.setStatus( Status.Reserved );
taskData.setActualOwner( user );
em.getTransaction().commit();
-
+
// Task was reserved so owner should get icals
- SendIcal.getInstance().sendIcalForTask( task, userInfo );
+ SendIcal.getInstance().sendIcalForTask( task,
+ userInfo );
+
+ // trigger event support
+ eventSupport.fireTaskClaimed( task.getId(),
+ task.getTaskData().getActualOwner().getId() );
} else {
// @TODO Error
}
} else {
// @TODO Error
}
- }
+ }
public void start(long taskId,
long userId) {
Task task = em.find( Task.class,
taskId );
-
- User user = em.find( User.class, userId );
-
+
+ User user = em.find( User.class,
+ userId );
+
TaskData taskData = task.getTaskData();
-
+
// Status must be Read or Reserved
if ( taskData.getStatus() == Status.Ready ) {
// if Ready must be potentialOwner
PeopleAssignments people = task.getPeopleAssignments();
- if ( isAllowed( user, new List[] { people.getPotentialOwners() } ) ) {
+ if ( isAllowed( user,
+ new List[]{people.getPotentialOwners()} ) ) {
em.getTransaction().begin();
taskData.setActualOwner( user );
taskData.setStatus( Status.InProgress );
- em.getTransaction().commit();
+ em.getTransaction().commit();
} else {
// @TODO Error
}
@@ -272,69 +316,78 @@
}
} else {
// @TODO Error
- return;
- }
+ return;
+ }
}
-
+
public void stop(long taskId,
- long userId) {
+ long userId) {
Task task = em.find( Task.class,
taskId );
-
- User user = em.find( User.class, userId );
-
+
+ User user = em.find( User.class,
+ userId );
+
TaskData taskData = task.getTaskData();
-
- PeopleAssignments people = task.getPeopleAssignments();
- if ( taskData.getStatus() == Status.InProgress && ( taskData.getActualOwner().getId() == user.getId() || isAllowed( user, new List[] { people.getBusinessAdministrators() } ) ) ) {
+
+ PeopleAssignments people = task.getPeopleAssignments();
+ if ( taskData.getStatus() == Status.InProgress && (taskData.getActualOwner().getId() == user.getId() || isAllowed( user,
+ new List[]{people.getBusinessAdministrators()} )) ) {
// Status must be InProgress and actual owner, switch to Reserved
em.getTransaction().begin();
taskData.setStatus( Status.Reserved );
em.getTransaction().commit();
} else {
// @TODO Error
- return;
- }
- }
+ return;
+ }
+ }
- public void release(long taskId, long userId) {
+ public void release(long taskId,
+ long userId) {
Task task = em.find( Task.class,
taskId );
-
- User user = em.find( User.class, userId );
-
+
+ User user = em.find( User.class,
+ userId );
+
TaskData taskData = task.getTaskData();
-
+
// task must be reserved or in progress and owned by user
- PeopleAssignments people = task.getPeopleAssignments();
- if ( (taskData.getStatus() == Status.Reserved || taskData.getStatus() == Status.InProgress) && ( taskData.getActualOwner().getId() == user.getId() || isAllowed( user, new List[] { people.getBusinessAdministrators() } ) ) ) {
+ PeopleAssignments people = task.getPeopleAssignments();
+ if ( (taskData.getStatus() == Status.Reserved || taskData.getStatus() == Status.InProgress) && (taskData.getActualOwner().getId() == user.getId() || isAllowed( user,
+ new List[]{people.getBusinessAdministrators()} )) ) {
em.getTransaction().begin();
taskData.setStatus( Status.Ready );
taskData.setActualOwner( null );
em.getTransaction().commit();
} else {
//@TODO Error
- }
+ }
}
- public void suspend(long taskId, long userId) {
+ public void suspend(long taskId,
+ long userId) {
Task task = em.find( Task.class,
taskId );
-
- User user = em.find( User.class, userId );
-
+
+ User user = em.find( User.class,
+ userId );
+
TaskData taskData = task.getTaskData();
-
+
List[] allowed;
PeopleAssignments people = task.getPeopleAssignments();
if ( taskData.getStatus() == Status.Ready ) {
// If it's ready then potential owners can suspect too
- allowed = new List[] { people.getPotentialOwners(), people.getBusinessAdministrators() };
+ allowed = new List[]{people.getPotentialOwners(), people.getBusinessAdministrators()};
} else {
- allowed = new List[] { people.getBusinessAdministrators() };
+ allowed = new List[]{people.getBusinessAdministrators()};
}
-
- if ( (taskData.getStatus() == Status.Ready || taskData.getStatus() == Status.Reserved || taskData.getStatus() == Status.InProgress) && ( ( taskData.getActualOwner() != null && taskData.getActualOwner().getId() == user.getId() ) || isAllowed( user, allowed ) ) ) {
+
+ if ( (taskData.getStatus() == Status.Ready || taskData.getStatus() == Status.Reserved || taskData.getStatus() == Status.InProgress)
+ && ((taskData.getActualOwner() != null && taskData.getActualOwner().getId() == user.getId()) || isAllowed( user,
+ allowed )) ) {
em.getTransaction().begin();
taskData.setStatus( Status.Suspended );
em.getTransaction().commit();
@@ -342,67 +395,75 @@
//@TODO Error
}
}
-
- public void resume(long taskId, long userId) {
+
+ public void resume(long taskId,
+ long userId) {
Task task = em.find( Task.class,
taskId );
-
- User user = em.find( User.class, userId );
-
+
+ User user = em.find( User.class,
+ userId );
+
TaskData taskData = task.getTaskData();
-
+
List[] allowed;
PeopleAssignments people = task.getPeopleAssignments();
if ( taskData.getPreviousStatus() == Status.Ready ) {
// If it's ready then potential owners can suspect too
- allowed = new List[] { people.getPotentialOwners(), people.getBusinessAdministrators() };
+ allowed = new List[]{people.getPotentialOwners(), people.getBusinessAdministrators()};
} else {
- allowed = new List[] { people.getBusinessAdministrators() };
+ allowed = new List[]{people.getBusinessAdministrators()};
}
-
- if ( (taskData.getStatus() == Status.Suspended) && ( ( taskData.getActualOwner() != null && taskData.getActualOwner().getId() == user.getId() ) || isAllowed( user, allowed ) ) ) {
+
+ if ( (taskData.getStatus() == Status.Suspended) && ((taskData.getActualOwner() != null && taskData.getActualOwner().getId() == user.getId()) || isAllowed( user,
+ allowed )) ) {
em.getTransaction().begin();
taskData.setStatus( taskData.getPreviousStatus() );
em.getTransaction().commit();
} else {
//@TODO Error
}
- }
-
- public void skip(long taskId, long userId) {
+ }
+
+ public void skip(long taskId,
+ long userId) {
Task task = em.find( Task.class,
taskId );
-
- User user = em.find( User.class, userId );
-
+
+ User user = em.find( User.class,
+ userId );
+
TaskData taskData = task.getTaskData();
-
+
List[] allowed;
PeopleAssignments people = task.getPeopleAssignments();
if ( taskData.getStatus() == Status.Ready ) {
// If it's ready then potential owners can skip too
- allowed = new List[] { people.getPotentialOwners(), people.getBusinessAdministrators() };
+ allowed = new List[]{people.getPotentialOwners(), people.getBusinessAdministrators()};
} else {
- allowed = new List[] { people.getBusinessAdministrators() };
+ allowed = new List[]{people.getBusinessAdministrators()};
}
-
- if ( task.getTaskData().isSkipable() && (taskData.getStatus() != Status.Completed && taskData.getStatus() != Status.Failed ) && ( ( taskData.getActualOwner() != null && taskData.getActualOwner().getId() == user.getId() ) || isAllowed( user, allowed ) ) ) {
+
+ if ( task.getTaskData().isSkipable() && (taskData.getStatus() != Status.Completed && taskData.getStatus() != Status.Failed) && ((taskData.getActualOwner() != null && taskData.getActualOwner().getId() == user.getId()) || isAllowed( user,
+ allowed )) ) {
em.getTransaction().begin();
taskData.setStatus( Status.Obselete );
em.getTransaction().commit();
} else {
//@TODO Error
}
- }
-
- public void complete(long taskId, long userId) {
+ }
+
+ public void complete(long taskId,
+ long userId) {
Task task = em.find( Task.class,
taskId );
-
- User user = em.find( User.class, userId );
-
+
+ User user = em.find( User.class,
+ userId );
+
TaskData taskData = task.getTaskData();
-
+
if ( taskData.getStatus() == Status.InProgress && taskData.getActualOwner().getId() == user.getId() ) {
// Status must be InProgress and actual owner, switch to Reserved
em.getTransaction().begin();
@@ -410,18 +471,20 @@
em.getTransaction().commit();
} else {
// @TODO Error
- return;
- }
- }
-
- public void fail(long taskId, long userId) {
+ return;
+ }
+ }
+
+ public void fail(long taskId,
+ long userId) {
Task task = em.find( Task.class,
taskId );
-
- User user = em.find( User.class, userId );
-
+
+ User user = em.find( User.class,
+ userId );
+
TaskData taskData = task.getTaskData();
-
+
if ( taskData.getStatus() == Status.InProgress && taskData.getActualOwner().getId() == user.getId() ) {
// Status must be InProgress and actual owner, switch to Reserved
em.getTransaction().begin();
@@ -429,8 +492,8 @@
em.getTransaction().commit();
} else {
// @TODO Error
- return;
- }
+ return;
+ }
}
public void addComment(long taskId,
@@ -479,7 +542,7 @@
list.add( attachment );
em.getTransaction().commit();
}
-
+
public void setDocumentContent(long taskId,
Content content) {
Task task = em.find( Task.class,
@@ -492,15 +555,15 @@
em.getTransaction().begin();
em.persist( content );
-
+
task.getTaskData().setDocumentContentId( content.getId() );
-
+
em.getTransaction().commit();
}
public Content getContent(long contentId) {
Content content = em.find( Content.class,
- contentId );
+ contentId );
return content;
}
@@ -648,17 +711,20 @@
this );
localEm.close();
}
-
- public boolean isAllowed(User user, List<OrganizationalEntity>[] people) {
+
+ public boolean isAllowed(User user,
+ List<OrganizationalEntity>[] people) {
for ( List<OrganizationalEntity> list : people ) {
- if ( isAllowed( user, list) ) {
+ if ( isAllowed( user,
+ list ) ) {
return true;
}
}
return false;
}
-
- public boolean isAllowed(User user, List<OrganizationalEntity> entities) {
+
+ public boolean isAllowed(User user,
+ List<OrganizationalEntity> entities) {
// for now just do a contains, I'll figure out group membership later.
for ( OrganizationalEntity entity : entities ) {
if ( entity.getId() == user.getId() ) {
Added: labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingEventResponseHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingEventResponseHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/BlockingEventResponseHandler.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -0,0 +1,34 @@
+/**
+ *
+ */
+package org.drools.task.service;
+
+import org.drools.eventmessaging.EventResponseHandler;
+import org.drools.eventmessaging.Payload;
+
+public class BlockingEventResponseHandler implements EventResponseHandler {
+ private volatile Payload payload;
+ private volatile boolean wait;
+
+ public synchronized void execute(Payload payload) {
+ this.payload = payload;
+ wait = true;
+ notifyAll();
+ }
+
+ public synchronized Payload getPayload() {
+ if ( !wait ) {
+ try {
+ wait( 300000 );
+ } catch ( InterruptedException e ) {
+ // swallow as this is just a notification
+ }
+ }
+
+ if ( !wait ) {
+ throw new RuntimeException("Timeout : unable to retrieve event payload" );
+ }
+
+ return payload;
+ }
+}
\ No newline at end of file
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/MockEventMessagingTest.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -0,0 +1,67 @@
+package org.drools.task.service;
+
+import java.io.StringReader;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.collections.map.HashedMap;
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+import org.drools.eventmessaging.EventKey;
+import org.drools.eventmessaging.EventTriggerTransport;
+import org.drools.eventmessaging.Payload;
+import org.drools.task.BaseTest;
+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.TaskClosedEvent;
+import org.drools.task.event.TaskEventKey;
+import org.drools.task.service.MinaTaskClient;
+import org.drools.task.service.MinaTaskServer;
+import org.drools.task.service.TaskClientHandler;
+
+public class MockEventMessagingTest extends BaseTest {
+ public void testMockTransport() throws Exception {
+ Map vars = new HashedMap();
+ vars.put( "users", users );
+ vars.put( "groups", groups );
+ vars.put( "now", new Date() );
+
+ // One potential owner, should go straight to state Reserved
+ String str = "(with (new Task()) { priority = 55, taskData = (with( new TaskData()) { } ), ";
+ str += "peopleAssignments = (with ( new PeopleAssignments() ) { potentialOwners = [users['bobba' ], users['darth'] ], }),";
+ str += "names = [ new I18NText( 'en-UK', 'This is my task name')] })";
+
+ Task task = ( Task ) eval( new StringReader( str ), vars );
+ taskService.addTask( task );
+
+ long taskId = task.getId();
+
+ EventKey key = new TaskEventKey(TaskClaimedEvent.class, taskId );
+ MockEventTriggerTransport transport = new MockEventTriggerTransport();
+ taskService.getEventKeys().register( key, transport );
+ taskService.claim( taskId, users.get( "darth" ).getId() );
+
+ assertEquals( 1, transport.list.size() );
+ assertEquals( taskId, ((TaskClaimedEvent) ((Payload) transport.list.get(0)).get()).getTaskId() );
+ assertEquals( users.get( "darth" ).getId(), (Long) ((TaskClaimedEvent) ((Payload) transport.list.get(0)).get()).getUserId() );
+
+ }
+
+ public static class MockEventTriggerTransport implements EventTriggerTransport {
+ List<Payload> list = new ArrayList<Payload>();
+
+ public void trigger(Payload payload) {
+ list.add( payload );
+ }
+
+ public boolean isRemove() {
+ return true;
+ }
+ }
+
+}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/test/java/org/drools/task/service/TaskServiceEventMessagingTest.java 2008-09-15 06:50:32 UTC (rev 22769)
@@ -0,0 +1,86 @@
+package org.drools.task.service;
+
+import java.io.StringReader;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.collections.map.HashedMap;
+import org.apache.mina.transport.socket.nio.NioSocketConnector;
+import org.drools.eventmessaging.EventKey;
+import org.drools.eventmessaging.EventResponseHandler;
+import org.drools.eventmessaging.EventTriggerTransport;
+import org.drools.eventmessaging.Payload;
+import org.drools.task.BaseTest;
+import org.drools.task.Status;
+import org.drools.task.Task;
+import org.drools.task.event.TaskClaimedEvent;
+import org.drools.task.event.TaskEventKey;
+import org.drools.task.service.MockEventMessagingTest.MockEventTriggerTransport;
+
+public class TaskServiceEventMessagingTest extends BaseTest {
+ MinaTaskServer server;
+ MinaTaskClient client;
+
+ @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 );
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ client.disconnect();
+ server.stop();
+ }
+
+ public void testClaimEvent() throws Exception {
+ Map vars = new HashedMap();
+ vars.put( "users", users );
+ vars.put( "groups", groups );
+ vars.put( "now", new Date() );
+
+ // One potential owner, should go straight to state Reserved
+ String str = "(with (new Task()) { priority = 55, taskData = (with( new TaskData()) { } ), ";
+ str += "peopleAssignments = (with ( new PeopleAssignments() ) { potentialOwners = [users['bobba' ], users['darth'] ], }),";
+ str += "names = [ new I18NText( 'en-UK', 'This is my task name')] })";
+
+ BlockingAddTaskResponseHandler addTaskResponseHandler = new BlockingAddTaskResponseHandler();
+ Task task = ( Task ) eval( new StringReader( str ), vars );
+ client.addTask( task, addTaskResponseHandler );
+
+ long taskId = addTaskResponseHandler.getTaskId();
+
+ // A Task with multiple potential owners moves to "Ready" state until someone claims it.
+ BlockingGetTaskResponseHandler getTaskResponseHandler = new BlockingGetTaskResponseHandler();
+ client.getTask( taskId, getTaskResponseHandler );
+ Task task1 = getTaskResponseHandler.getTask();
+ assertEquals( Status.Ready , task1.getTaskData().getStatus() );
+
+ EventKey key = new TaskEventKey(TaskClaimedEvent.class, taskId );
+ BlockingEventResponseHandler handler = new BlockingEventResponseHandler();
+ client.registerForEvent( key, true, handler );
+
+ taskService.claim( taskId, users.get( "darth" ).getId() );
+
+
+ Payload payload = handler.getPayload();
+ TaskClaimedEvent event = ( TaskClaimedEvent ) payload.get();
+ assertNotNull( event );
+ }
+
+}
More information about the jboss-svn-commits
mailing list