wrapper for conditionally passing picks onto the client application
[vamsas.git] / src / uk / ac / vamsas / client / simpleclient / SimplePickManager.java
1 package uk.ac.vamsas.client.simpleclient;\r
2 \r
3 import org.apache.commons.logging.*;\r
4 \r
5 import uk.ac.vamsas.client.picking.IMessageHandler;\r
6 import uk.ac.vamsas.client.picking.IPickManager;\r
7 import uk.ac.vamsas.client.picking.Message;\r
8 import uk.ac.vamsas.client.picking.SocketManager;\r
9 /**\r
10  * Blocking message handler\r
11  * @author\r
12  *\r
13  */\r
14 public class SimplePickManager implements IPickManager {\r
15   private Log log = LogFactory.getLog(SimplePickManager.class);\r
16   \r
17   SocketManager manager=null;\r
18   SimplePickManager(SocketManager manager) {\r
19     this.manager=manager;\r
20     final SimplePickManager me=this;\r
21     /**\r
22      * add a handler that calls the SimplePickManager message handler\r
23      */\r
24     manager.registerMessageHandler(new IMessageHandler() {\r
25       public void handleMessage(Message message) {\r
26         me.handleMessage(message);\r
27       }\r
28     });\r
29     \r
30   }\r
31   /**\r
32    * when false, messages are queued in a FIFO until thread can restart.\r
33    */\r
34   private boolean passThru=true;\r
35   /**\r
36    * the client apps message handler\r
37    */\r
38   IMessageHandler pickHandler=null;\r
39   public void registerMessageHandler(IMessageHandler handler) {\r
40     pickHandler=handler; \r
41     \r
42   }\r
43 \r
44   public void sendMessage(Message message) {\r
45     manager.sendMessage(message);\r
46   }\r
47   /**\r
48    * pass message onto the Apps handler, or wait until\r
49    * passThru is true before passing message on.\r
50    * @param message\r
51    */\r
52   protected void handleMessage(Message message) {\r
53     while (!passThru) {\r
54       try {\r
55         Thread.sleep(5);\r
56       } catch (InterruptedException e) {};\r
57     }\r
58     if (passThru)\r
59       pickHandler.handleMessage(message);\r
60   }\r
61 \r
62   /**\r
63    * @return true if messages are being passed to handlers\r
64    */\r
65   public boolean isPassThru() {\r
66     return passThru;\r
67   }\r
68 \r
69   /**\r
70    * @param true to pass messages on to handlers, false to hold messages in queue\r
71    */\r
72   public void setPassThru(boolean passThru) {\r
73     this.passThru = passThru;\r
74   }\r
75   public void haltPickManager() {\r
76       // TODO: FIX haltPickManager to cleanly end after SimpleClient.finalize() is called\r
77       manager.haltManager();\r
78       \r
79   }\r
80 }\r