1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.bitrepository.service.contributor;
23
24 import org.bitrepository.bitrepositorymessages.Message;
25 import org.bitrepository.bitrepositorymessages.MessageRequest;
26 import org.bitrepository.protocol.messagebus.MessageBus;
27 import org.bitrepository.protocol.messagebus.MessageListener;
28 import org.bitrepository.protocol.utils.MessageUtils;
29 import org.bitrepository.service.contributor.handler.RequestHandler;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
32
33 import java.util.HashMap;
34 import java.util.Map;
35
36
37
38
39
40 @SuppressWarnings("rawtypes")
41 public abstract class AbstractContributorMediator implements ContributorMediator {
42
43 private Logger log = LoggerFactory.getLogger(getClass());
44
45 private final Map<String, RequestHandler> handlerMap = new HashMap<String, RequestHandler>();
46
47 private final MessageBus messageBus;
48
49 private final GeneralRequestHandler messageHandler;
50
51
52
53
54
55 public AbstractContributorMediator(MessageBus messageBus) {
56 this.messageBus = messageBus;
57 messageHandler = new GeneralRequestHandler();
58 }
59
60
61
62
63
64 public final void start() {
65 for (RequestHandler handler : createListOfHandlers()) {
66 handlerMap.put(handler.getRequestClass().getSimpleName(), handler);
67 }
68 messageBus.addListener(getContext().getSettings().getContributorDestinationID(), messageHandler);
69 System.out.println("Referencepillar: adding lister to pillar topic: " + getContext().getSettings().getContributorDestinationID());
70 messageBus.addListener(getContext().getSettings().getCollectionDestination(), messageHandler);
71 }
72
73
74
75
76 protected abstract RequestHandler[] createListOfHandlers();
77
78
79
80
81 protected abstract ContributorContext getContext();
82
83
84
85
86
87
88
89 protected abstract void handleRequest(MessageRequest request, RequestHandler handler);
90
91
92
93
94 private class GeneralRequestHandler implements MessageListener {
95 @Override
96 public void onMessage(Message message) {
97 if (message instanceof MessageRequest) {
98 RequestHandler handler = handlerMap.get(message.getClass().getSimpleName());
99 if (handler != null) {
100 handleRequest((MessageRequest) message, handler);
101 } else {
102 if (MessageUtils.isIdentifyRequest(message)) {
103 log.trace("Received unhandled identity request: \n{}", message);
104 } else
105 log.warn("Unable to handle messages of this type: \n{}", message);
106 }
107 } else {
108 log.trace("Can only handle message requests, but received: \n{}", message);
109 }
110 }
111 }
112
113
114
115
116 @Override
117 public void close() {
118 messageBus.removeListener(getContext().getSettings().getCollectionDestination(), messageHandler);
119 messageBus.removeListener(getContext().getSettings().getReceiverDestinationID(), messageHandler);
120 }
121 }