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.bitrepositoryelements.ResponseCode;
25 import org.bitrepository.bitrepositoryelements.ResponseInfo;
26 import org.bitrepository.bitrepositorymessages.MessageRequest;
27 import org.bitrepository.bitrepositorymessages.MessageResponse;
28 import org.bitrepository.common.settings.Settings;
29 import org.bitrepository.protocol.messagebus.MessageBus;
30 import org.bitrepository.service.AlarmDispatcher;
31 import org.bitrepository.service.audit.AuditTrailManager;
32 import org.bitrepository.service.contributor.handler.GetAuditTrailsRequestHandler;
33 import org.bitrepository.service.contributor.handler.GetStatusRequestHandler;
34 import org.bitrepository.service.contributor.handler.IdentifyContributorsForGetAuditTrailsRequestHandler;
35 import org.bitrepository.service.contributor.handler.IdentifyContributorsForGetStatusRequestHandler;
36 import org.bitrepository.service.contributor.handler.RequestHandler;
37 import org.bitrepository.service.exception.RequestHandlerException;
38 import org.slf4j.Logger;
39 import org.slf4j.LoggerFactory;
40
41 import java.util.ArrayList;
42 import java.util.List;
43
44
45
46
47
48
49
50
51 public class SimpleContributorMediator extends AbstractContributorMediator {
52
53 private Logger log = LoggerFactory.getLogger(getClass());
54
55 private final ContributorContext context;
56
57 private AuditTrailManager auditManager;
58
59
60
61
62
63
64
65 public SimpleContributorMediator(MessageBus messageBus, Settings settings, AuditTrailManager auditManager) {
66 super(messageBus);
67 context = new ContributorContext(
68 new ResponseDispatcher(settings, messageBus),
69 new AlarmDispatcher(settings, messageBus),
70 settings);
71 this.auditManager = auditManager;
72 }
73
74 @SuppressWarnings("rawtypes")
75 @Override
76 protected RequestHandler[] createListOfHandlers() {
77 List<RequestHandler> handlers = new ArrayList<RequestHandler>();
78
79 handlers.add(new IdentifyContributorsForGetStatusRequestHandler(getContext()));
80 handlers.add(new GetStatusRequestHandler(getContext()));
81
82 if(auditManager != null) {
83 handlers.add(new IdentifyContributorsForGetAuditTrailsRequestHandler(getContext()));
84 handlers.add(new GetAuditTrailsRequestHandler(getContext(), auditManager));
85 }
86
87 return handlers.toArray(new RequestHandler[handlers.size()]);
88 }
89
90 @Override
91 protected ContributorContext getContext() {
92 return context;
93 }
94
95 @SuppressWarnings({ "rawtypes", "unchecked" })
96 @Override
97 protected void handleRequest(MessageRequest request, RequestHandler handler) {
98 try {
99 handler.processRequest(request);
100 } catch (RequestHandlerException e) {
101 log.info("Invalid Message exception caught. Sending failed response.", e);
102 MessageResponse response = handler.generateFailedResponse(request);
103 response.setResponseInfo(e.getResponseInfo());
104 context.getResponseDispatcher().dispatchResponse(response, request);
105 } catch (Exception e) {
106 log.warn("Unexpected exception caught.", e);
107 ResponseInfo responseInfo = new ResponseInfo();
108 responseInfo.setResponseCode(ResponseCode.FAILURE);
109 responseInfo.setResponseText(e.toString());
110
111 MessageResponse response = handler.generateFailedResponse(request);
112 response.setResponseInfo(responseInfo);
113 context.getResponseDispatcher().dispatchResponse(response, request);
114 }
115 }
116 }