View Javadoc

1   package net.sourceforge.rpgee.messaging.network;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   
6   import org.apache.commons.logging.Log;
7   import org.apache.commons.logging.LogFactory;
8   
9   import net.sourceforge.rpgee.messaging.RpgMessage;
10  import net.sourceforge.rpgee.messaging.RpgMessageTransformer;
11  import net.sourceforge.rpgee.messaging.exceptions.RpgAbortUpdateException;
12  import net.sourceforge.rpgee.messaging.exceptions.RpgMessageException;
13  import net.sourceforge.rpgee.utility.BaseObservable;
14  import net.sourceforge.rpgee.utility.Observable;
15  import net.sourceforge.rpgee.utility.Observer;
16  
17  public class DefaultRpgMessageHandler extends BaseObservable<RpgMessage> implements Observer<RpgMessage> {
18      private static Log  log = LogFactory.getLog(DefaultRpgMessageHandler.class);
19      private     List<RpgMessageTransformer<RpgMessage,RpgMessage>>    transformers = new ArrayList<RpgMessageTransformer<RpgMessage,RpgMessage>>();
20      private     List<Observer<RpgMessage>>    handlers = new ArrayList<Observer<RpgMessage>>();
21  
22      public void update(Observable o, RpgMessage arg) throws RpgMessageException {
23          // @TODO Auto-generated method stub
24          RpgMessage a = arg;
25          log.debug("Got message : " + a);
26          for (RpgMessageTransformer<RpgMessage, RpgMessage> i : transformers) {
27              a = i.transform(a);
28              log.debug("Transformed to : " + a);
29              if (a == null)
30                  return;
31          }
32          for (Observer<RpgMessage> i : handlers) {
33              try {
34                  log.debug("Handling with " + i);
35                  i.update(o, a);
36                  if (a.isFinishedProcessing()) {
37                      log.debug("is finished processing " + a);
38                      return;
39                  }
40              } catch (RpgAbortUpdateException e) {
41                  log.error(e);
42                  throw e;
43              }
44          }
45      }
46      
47      public void setTransformers(List<RpgMessageTransformer<RpgMessage, RpgMessage>> transformers) {
48          this.transformers = transformers;
49      }
50      
51      public void setHandlers(List<Observer<RpgMessage>> handlers) {
52          this.handlers = handlers;
53      }
54  }