/** * Copyright 2010 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. */ package org.drools.grid.task; import java.rmi.RemoteException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; import org.drools.eventmessaging.EventKey; import org.drools.grid.ConnectorException; import org.drools.grid.GenericNodeConnector; import org.drools.grid.internal.Message; import org.drools.grid.task.TaskClientMessageHandlerImpl.AddAttachmentMessageResponseHandler; import org.drools.grid.task.TaskClientMessageHandlerImpl.AddCommentMessageResponseHandler; import org.drools.grid.task.TaskClientMessageHandlerImpl.AddTaskMessageResponseHandler; import org.drools.grid.task.TaskClientMessageHandlerImpl.DeleteAttachmentMessageResponseHandler; import org.drools.grid.task.TaskClientMessageHandlerImpl.DeleteCommentMessageResponseHandler; import org.drools.grid.task.TaskClientMessageHandlerImpl.GetContentMessageResponseHandler; import org.drools.grid.task.TaskClientMessageHandlerImpl.GetTaskMessageResponseHandler; import org.drools.grid.task.TaskClientMessageHandlerImpl.SetDocumentMessageResponseHandler; import org.drools.grid.task.TaskClientMessageHandlerImpl.TaskOperationMessageResponseHandler; import org.drools.grid.task.TaskClientMessageHandlerImpl.TaskSummaryMessageResponseHandler; import org.drools.grid.task.eventmessaging.EventMessageResponseHandler; import org.drools.task.Attachment; import org.drools.task.Comment; import org.drools.task.Content; import org.drools.task.Task; import org.drools.task.service.Command; import org.drools.task.service.CommandName; import org.drools.task.service.ContentData; import org.drools.task.service.FaultData; import org.drools.task.service.Operation; /** * @author salaboy * @author Lucas Amador * */ public class HumanTaskServiceRemoteClient implements HumanTaskService { private final GenericNodeConnector connector; private final AtomicInteger counter; private int sessionId; private String clientName; private int DEFAULT_WAIT_TIME = 3000; public HumanTaskServiceRemoteClient(GenericNodeConnector connector, int sessionId) { this.connector = connector; this.counter = new AtomicInteger(); this.clientName = String.valueOf( sessionId ); this.sessionId = sessionId; } public void disconnect() throws ConnectorException { try { this.connector.disconnect(); } catch ( RemoteException ex ) { Logger.getLogger( HumanTaskServiceRemoteClient.class.getName() ).log( Level.SEVERE, null, ex ); } } public void addTask(Task task, ContentData content, AddTaskMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 2 ); args.add( task ); args.add( content ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.AddTaskRequest, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public Task getTask(long taskId, GetTaskMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 1 ); args.add( taskId ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.GetTaskRequest, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); return null; } public void addComment(long taskId, Comment comment, AddCommentMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 2 ); args.add( taskId ); args.add( comment ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.AddCommentRequest, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void deleteComment(long taskId, long commentId, DeleteCommentMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 2 ); args.add( taskId ); args.add( commentId ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.DeleteCommentRequest, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void addAttachment(long taskId, Attachment attachment, Content content, AddAttachmentMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 3 ); args.add( taskId ); args.add( attachment ); args.add( content ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.AddAttachmentRequest, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void deleteAttachment(long taskId, long attachmentId, long contentId, DeleteAttachmentMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 3 ); args.add( taskId ); args.add( attachmentId ); args.add( contentId ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.DeleteAttachmentRequest, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void setDocumentContent(long taskId, Content content, SetDocumentMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 2 ); args.add( taskId ); args.add( content ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.SetDocumentContentRequest, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void getContent(long contentId, GetContentMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 1 ); args.add( contentId ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.GetContentRequest, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void claim(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 3 ); args.add( Operation.Claim ); args.add( taskId ); args.add( userId ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.OperationRequest, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void start(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 3 ); args.add( Operation.Start ); args.add( taskId ); args.add( userId ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.OperationRequest, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void stop(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 3 ); args.add( Operation.Stop ); args.add( taskId ); args.add( userId ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.OperationRequest, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void release(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 3 ); args.add( Operation.Release ); args.add( taskId ); args.add( userId ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.OperationRequest, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void suspend(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 3 ); args.add( Operation.Suspend ); args.add( taskId ); args.add( userId ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.OperationRequest, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void resume(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 3 ); args.add( Operation.Resume ); args.add( taskId ); args.add( userId ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.OperationRequest, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void skip(long taskId, String userId, TaskOperationMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 3 ); args.add( Operation.Skip ); args.add( taskId ); args.add( userId ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.OperationRequest, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void delegate(long taskId, String userId, String targetUserId, TaskOperationMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 4 ); args.add( Operation.Delegate ); args.add( taskId ); args.add( userId ); args.add( targetUserId ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.OperationRequest, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void forward(long taskId, String userId, String targetEntityId, TaskOperationMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 4 ); args.add( Operation.Forward ); args.add( taskId ); args.add( userId ); args.add( targetEntityId ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.OperationRequest, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void complete(long taskId, String userId, ContentData outputData, TaskOperationMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 5 ); args.add( Operation.Complete ); args.add( taskId ); args.add( userId ); args.add( null ); args.add( outputData ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.OperationRequest, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void fail(long taskId, String userId, FaultData faultData, TaskOperationMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 5 ); args.add( Operation.Fail ); args.add( taskId ); args.add( userId ); args.add( null ); args.add( faultData ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.OperationRequest, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void getTasksOwned(String userId, String language, TaskSummaryMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 2 ); args.add( userId ); args.add( language ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.QueryTasksOwned, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void getTasksAssignedAsBusinessAdministrator(String userId, String language, TaskSummaryMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 2 ); args.add( userId ); args.add( language ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.QueryTasksAssignedAsBusinessAdministrator, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void getTasksAssignedAsExcludedOwner(String userId, String language, TaskSummaryMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 2 ); args.add( userId ); args.add( language ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.QueryTasksAssignedAsExcludedOwner, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void getTasksAssignedAsPotentialOwner(String userId, String language, TaskSummaryMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 2 ); args.add( userId ); args.add( language ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.QueryTasksAssignedAsPotentialOwner, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void getTasksAssignedAsPotentialOwner(String userId, List<String> groupIds, String language, TaskSummaryMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 2 ); args.add( userId ); args.add( groupIds ); args.add( language ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.QueryTasksAssignedAsPotentialOwnerWithGroup, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void getSubTasksAssignedAsPotentialOwner(long parentId, String userId, String language, TaskSummaryMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 2 ); args.add( parentId ); args.add( userId ); args.add( language ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.QuerySubTasksAssignedAsPotentialOwner, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void getSubTasksByParent(long parentId, TaskSummaryMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 2 ); args.add( parentId ); //@TODO: un hard code this args.add( "en-UK" ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.QueryGetSubTasksByParentTaskId, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void getTasksAssignedAsRecipient(String userId, String language, TaskSummaryMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 2 ); args.add( userId ); args.add( language ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.QueryTasksAssignedAsRecipient, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void getTasksAssignedAsTaskInitiator(String userId, String language, TaskSummaryMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 2 ); args.add( userId ); args.add( language ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.QueryTasksAssignedAsTaskInitiator, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void getTasksAssignedAsTaskStakeholder(String userId, String language, TaskSummaryMessageResponseHandler responseHandler) { List<Object> args = new ArrayList<Object>( 2 ); args.add( userId ); args.add( language ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.QueryTasksAssignedAsTaskStakeholder, args ); Message msg = new Message( this.sessionId, this.counter.incrementAndGet(), false, cmd ); this.connector.write( msg, responseHandler ); } public void registerForEvent(EventKey key, boolean remove, EventMessageResponseHandler responseHandler) { //@TODO: look for the event stuff List<Object> args = new ArrayList<Object>( 3 ); args.add( key ); args.add( remove ); args.add( this.clientName ); Command cmd = new Command( this.counter.getAndIncrement(), CommandName.RegisterForEventRequest, args ); int responseId = this.counter.incrementAndGet(); Message msg = new Message( this.sessionId, responseId, false, cmd ); this.connector.write( msg, responseHandler ); } public String getId() throws ConnectorException, RemoteException { return "Remote:Task:"; } public ServiceType getServiceType() throws ConnectorException, RemoteException { return ServiceType.REMOTE; } }