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