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
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
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 }