/** * */ package de.unihalle.informatik.Alida.workflows; import java.util.concurrent.BlockingDeque; import java.util.concurrent.LinkedBlockingDeque; import de.unihalle.informatik.Alida.workflows.events.ALDWorkflowEvent.ALDWorkflowEventType; import de.unihalle.informatik.Alida.workflows.events.ALDWorkflowEventListener; import de.unihalle.informatik.Alida.workflows.events.ALDWorkflowEvent; /** * @author posch * */ class ALDWorkflowEventManager implements Runnable{ /** * The event queue associated with the listener */ protected final BlockingDeque<ALDWorkflowEvent> eventQueue; /** * The listener for which to handle events */ private final ALDWorkflowEventListener listener; /** * if true the thread is asked to terminate its run method */ // TODO use interrupt of thread private boolean termiate; public ALDWorkflowEventManager(ALDWorkflowEventListener listener) { super(); this.eventQueue = new LinkedBlockingDeque<ALDWorkflowEvent>(); this.listener = listener; this.termiate = false; } @Override public void run() { ALDWorkflowEvent event = null; while ( true) { try { event = eventQueue.take(); if ( termiate) { break; } if ( ALDWorkflow.debug >= 1) { System.out.println( " ALDWorkflowEventManager::run got new event <" + event.getTimeStamp() + "> of type " + event.getEventType() + ": " + event.getEventMessage()); } listener.handleALDWorkflowEvent( event); if ( event.getEventType() == ALDWorkflowEventType.EXECUTION_FINISHED || event.getEventType() == ALDWorkflowEventType.USER_INTERRUPT || event.getEventType() == ALDWorkflowEventType.RUN_FAILURE ) { if ( ALDWorkflow.debug >=1) { System.out.println("ALDWorkflowEventManager::run terminated due to terminate or user interrupt or run failure event"); } return; } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * @return the terminate */ protected boolean isTermiate() { return termiate; } /** * @param termiate the terminate state to set */ protected void setTermiate(boolean termiate) { this.termiate = termiate; } }