/** * 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.util.Arrays; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.drools.SystemEventListener; import org.drools.eventmessaging.Payload; import org.drools.grid.internal.GenericIoWriter; import org.drools.grid.internal.GenericMessageHandler; import org.drools.grid.internal.Message; import org.drools.grid.internal.MessageResponseHandler; import org.drools.grid.task.eventmessaging.EventMessageResponseHandler; import org.drools.grid.task.responseHandlers.BlockingTaskSummaryMessageResponseHandler; import org.drools.task.Content; import org.drools.task.Task; import org.drools.task.query.TaskSummary; import org.drools.task.service.Command; public class TaskClientMessageHandlerImpl implements GenericMessageHandler { /** * Listener used for logging */ private SystemEventListener systemEventListener; protected Map<Integer, MessageResponseHandler> responseHandlers; public TaskClientMessageHandlerImpl(SystemEventListener systemEventListener) { this.systemEventListener = systemEventListener; this.responseHandlers = new ConcurrentHashMap<Integer, MessageResponseHandler>();; } public void exceptionCaught(GenericIoWriter session, Throwable cause) throws Exception { this.systemEventListener.exception( "Uncaught exception on client", cause ); } public void messageReceived(GenericIoWriter session, Message msg) throws Exception { Command cmd = (Command) msg.getPayload(); this.systemEventListener.debug( "Message receieved redirected to the client 1111111111: " + cmd.getName() ); this.systemEventListener.debug( "Arguments : " + Arrays.toString( cmd.getArguments().toArray() ) ); switch ( cmd.getName() ) { case OperationResponse : { TaskOperationMessageResponseHandler responseHandler = (TaskOperationMessageResponseHandler) this.responseHandlers.remove( cmd.getId() ); if ( responseHandler != null ) { if ( !cmd.getArguments().isEmpty() && cmd.getArguments().get( 0 ) instanceof RuntimeException ) { responseHandler.setError( (RuntimeException) cmd.getArguments().get( 0 ) ); } else { responseHandler.setIsDone( true ); System.out.println( "IS DONDEEEE" ); } } break; } case GetTaskResponse : { GetTaskMessageResponseHandler responseHandler = (GetTaskMessageResponseHandler) this.responseHandlers.remove( cmd.getId() ); if ( responseHandler != null ) { if ( !cmd.getArguments().isEmpty() && cmd.getArguments().get( 0 ) instanceof RuntimeException ) { responseHandler.setError( (RuntimeException) cmd.getArguments().get( 0 ) ); } else { Task task = (Task) cmd.getArguments().get( 0 ); responseHandler.execute( task ); } } break; } case AddTaskResponse : { AddTaskMessageResponseHandler responseHandler = (AddTaskMessageResponseHandler) this.responseHandlers.remove( msg.getResponseId() ); System.out.println( "response id searched: " + msg.getResponseId() ); if ( responseHandler != null ) { if ( !cmd.getArguments().isEmpty() && cmd.getArguments().get( 0 ) instanceof RuntimeException ) { responseHandler.setError( (RuntimeException) cmd.getArguments().get( 0 ) ); } else { long taskId = (Long) cmd.getArguments().get( 0 ); responseHandler.execute( taskId ); } } break; } case AddCommentResponse : { AddCommentMessageResponseHandler responseHandler = (AddCommentMessageResponseHandler) this.responseHandlers.remove( cmd.getId() ); if ( responseHandler != null ) { if ( !cmd.getArguments().isEmpty() && cmd.getArguments().get( 0 ) instanceof RuntimeException ) { responseHandler.setError( (RuntimeException) cmd.getArguments().get( 0 ) ); } else { long commentId = (Long) cmd.getArguments().get( 0 ); responseHandler.execute( commentId ); } } break; } case DeleteCommentResponse : { DeleteCommentMessageResponseHandler responseHandler = (DeleteCommentMessageResponseHandler) this.responseHandlers.remove( cmd.getId() ); if ( responseHandler != null ) { if ( !cmd.getArguments().isEmpty() && cmd.getArguments().get( 0 ) instanceof RuntimeException ) { responseHandler.setError( (RuntimeException) cmd.getArguments().get( 0 ) ); } else { responseHandler.setIsDone( true ); } } break; } case AddAttachmentResponse : { AddAttachmentMessageResponseHandler responseHandler = (AddAttachmentMessageResponseHandler) this.responseHandlers.remove( cmd.getId() ); if ( responseHandler != null ) { if ( !cmd.getArguments().isEmpty() && cmd.getArguments().get( 0 ) instanceof RuntimeException ) { responseHandler.setError( (RuntimeException) cmd.getArguments().get( 0 ) ); } else { long attachmentId = (Long) cmd.getArguments().get( 0 ); long contentId = (Long) cmd.getArguments().get( 1 ); responseHandler.execute( attachmentId, contentId ); } } break; } case DeleteAttachmentResponse : { DeleteAttachmentMessageResponseHandler responseHandler = (DeleteAttachmentMessageResponseHandler) this.responseHandlers.remove( cmd.getId() ); if ( responseHandler != null ) { if ( !cmd.getArguments().isEmpty() && cmd.getArguments().get( 0 ) instanceof RuntimeException ) { responseHandler.setError( (RuntimeException) cmd.getArguments().get( 0 ) ); } else { responseHandler.setIsDone( true ); } } break; } case GetContentResponse : { GetContentMessageResponseHandler responseHandler = (GetContentMessageResponseHandler) this.responseHandlers.remove( cmd.getId() ); if ( responseHandler != null ) { if ( !cmd.getArguments().isEmpty() && cmd.getArguments().get( 0 ) instanceof RuntimeException ) { responseHandler.setError( (RuntimeException) cmd.getArguments().get( 0 ) ); } else { Content content = (Content) cmd.getArguments().get( 0 ); responseHandler.execute( content ); } } break; } case SetDocumentContentResponse : { SetDocumentMessageResponseHandler responseHandler = (SetDocumentMessageResponseHandler) this.responseHandlers.remove( cmd.getId() ); if ( responseHandler != null ) { if ( !cmd.getArguments().isEmpty() && cmd.getArguments().get( 0 ) instanceof RuntimeException ) { responseHandler.setError( (RuntimeException) cmd.getArguments().get( 0 ) ); } else { long contentId = (Long) cmd.getArguments().get( 0 ); responseHandler.execute( contentId ); } } break; } case QueryTaskSummaryResponse : { BlockingTaskSummaryMessageResponseHandler responseHandler = (BlockingTaskSummaryMessageResponseHandler) this.responseHandlers.remove( msg.getResponseId() ); System.out.println( "responseHandler: " + responseHandler + " id searched: " + msg.getResponseId() ); if ( responseHandler != null ) { if ( !cmd.getArguments().isEmpty() && cmd.getArguments().get( 0 ) instanceof RuntimeException ) { responseHandler.setError( (RuntimeException) cmd.getArguments().get( 0 ) ); } else { List<TaskSummary> results = (List<TaskSummary>) cmd.getArguments().get( 0 ); responseHandler.execute( results ); } } break; } case EventTriggerResponse : { EventMessageResponseHandler responseHandler = (EventMessageResponseHandler) this.responseHandlers.remove( cmd.getId() ); //@TODO view messaging stuff System.out.println( "EVENT TRIGGER RESPONSE " + responseHandler + " size " + this.responseHandlers.size() + " id " + cmd.getId() ); if ( responseHandler != null ) { System.out.println( "responseHandler---: " + responseHandler ); if ( !cmd.getArguments().isEmpty() && cmd.getArguments().get( 0 ) instanceof RuntimeException ) { responseHandler.setError( (RuntimeException) cmd.getArguments().get( 0 ) ); System.out.println( "EEerror" ); } else { Payload payload = (Payload) cmd.getArguments().get( 0 ); System.out.println( "EExecute " ); responseHandler.execute( payload ); } } break; } } } public static interface GetTaskMessageResponseHandler extends MessageResponseHandler { public void execute(Task task); } public static interface AddTaskMessageResponseHandler extends MessageResponseHandler { public void execute(long taskId); } public static interface TaskOperationMessageResponseHandler extends MessageResponseHandler { public void setIsDone(boolean done); } public static interface AddCommentMessageResponseHandler extends MessageResponseHandler { public void execute(long commentId); } public static interface DeleteCommentMessageResponseHandler extends MessageResponseHandler { public void setIsDone(boolean done); } public static interface AddAttachmentMessageResponseHandler extends MessageResponseHandler { public void execute(long attachmentId, long contentId); } public static interface DeleteAttachmentMessageResponseHandler extends MessageResponseHandler { public void setIsDone(boolean done); } public static interface SetDocumentMessageResponseHandler extends MessageResponseHandler { public void execute(long contentId); } public static interface GetContentMessageResponseHandler extends MessageResponseHandler { public void execute(Content content); } public static interface TaskSummaryMessageResponseHandler extends MessageResponseHandler { public void execute(List<TaskSummary> results); } }