View Javadoc
1   package net.sourceforge.rpgee;
2   
3   import java.util.Properties;
4   
5   import org.apache.commons.logging.Log;
6   import org.apache.commons.logging.LogFactory;
7   
8   import net.sourceforge.rpgee.messaging.RpgMessage;
9   import net.sourceforge.rpgee.messaging.exceptions.RpgMessageException;
10  import net.sourceforge.rpgee.utility.BaseObservable;
11  import net.sourceforge.rpgee.utility.Observable;
12  import net.sourceforge.rpgee.utility.Observer;
13  import net.sourceforge.rpgee.utility.SystemMessages;
14  
15  public class ObserverObservingThread extends BaseObservable<RpgMessage> implements Observer<RpgMessage>, Runnable {
16      private static Log  log = LogFactory.getLog(ObserverObservingThread.class);
17      private boolean                running   = false;
18      private boolean                outerLoop = true;
19  
20      private Observer<RpgMessage> handler;
21  
22      public ObserverObservingThread(Properties m) {
23          super(m.getProperty(ID));
24          // @TODO Validate m
25          this.setName(m.getProperty(NAME));
26      }
27      
28      public void update(Observable o, RpgMessage arg) throws RpgMessageException {
29          Object msg = arg.getMessage();
30          if (arg.getMessage() instanceof SystemMessages) {
31              SystemMessages s = (SystemMessages) msg;
32              log.debug("System Message: " + s);
33              if (s == SystemMessages.STOP) {
34                      running = false;
35              } else if (s == SystemMessages.START) {
36                  running = true;
37              } else if (s == SystemMessages.SHUTDOWN) {
38                  running = false;
39                  outerLoop = false;
40              }
41          }
42          handler.update(o, arg);
43      }
44  
45      /**
46       * Test main function for starting a ObserverObservingThread
47       * @param args
48       */
49      public static void main(String[] args) {
50          // @TODO Parse arguments into some properties
51          Properties p = new Properties();
52          p.put(ID, "TESTID");
53          p.put(NAME, "TESTNAME");
54          ObserverObservingThread s = new ObserverObservingThread(p);
55          Thread a = new Thread(s);
56          a.start();
57      }
58  
59      public void setHandler(Observer<RpgMessage> _handler) {
60          this.handler = _handler;
61      }
62  
63      public void run() {
64          log.info("Starting " + this);
65          while (outerLoop) {
66              while (running) {
67                  try {
68                      Thread.sleep(200);
69                  } catch (InterruptedException e) {
70                  }
71              }
72          }
73          log.info("Finished" + this);
74      }
75  }