1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package org.bitrepository.pillar.checksumpillar.messagehandler;
26
27 import java.util.ArrayList;
28 import java.util.List;
29
30 import org.bitrepository.bitrepositoryelements.FileIDs;
31 import org.bitrepository.bitrepositoryelements.ResponseCode;
32 import org.bitrepository.bitrepositoryelements.ResponseInfo;
33 import org.bitrepository.bitrepositorymessages.IdentifyPillarsForGetChecksumsRequest;
34 import org.bitrepository.bitrepositorymessages.IdentifyPillarsForGetChecksumsResponse;
35 import org.bitrepository.bitrepositorymessages.MessageResponse;
36 import org.bitrepository.common.utils.TimeMeasurementUtils;
37 import org.bitrepository.pillar.cache.ChecksumStore;
38 import org.bitrepository.pillar.common.MessageHandlerContext;
39 import org.bitrepository.service.exception.IdentifyContributorException;
40 import org.bitrepository.service.exception.RequestHandlerException;
41
42
43
44
45 public class IdentifyPillarsForGetChecksumsRequestHandler
46 extends ChecksumPillarMessageHandler<IdentifyPillarsForGetChecksumsRequest> {
47
48
49
50
51
52
53 public IdentifyPillarsForGetChecksumsRequestHandler(MessageHandlerContext context, ChecksumStore refCache) {
54 super(context, refCache);
55 }
56
57 @Override
58 public Class<IdentifyPillarsForGetChecksumsRequest> getRequestClass() {
59 return IdentifyPillarsForGetChecksumsRequest.class;
60 }
61
62 @Override
63 public void processRequest(IdentifyPillarsForGetChecksumsRequest message) throws RequestHandlerException {
64 validateCollectionID(message);
65 validateMessage(message);
66 checkThatAllRequestedFilesAreAvailable(message);
67 respondSuccesfullIdentification(message);
68 }
69
70 @Override
71 public MessageResponse generateFailedResponse(IdentifyPillarsForGetChecksumsRequest message) {
72 return createFinalResponse(message);
73 }
74
75
76
77
78
79 private void validateMessage(IdentifyPillarsForGetChecksumsRequest message) throws RequestHandlerException {
80 validateChecksumSpec(message.getChecksumRequestForExistingFile(), message.getCollectionID());
81 }
82
83
84
85
86
87
88
89 public void checkThatAllRequestedFilesAreAvailable(IdentifyPillarsForGetChecksumsRequest message)
90 throws RequestHandlerException {
91 FileIDs fileids = message.getFileIDs();
92 validateFileID(message.getFileIDs().getFileID());
93
94 List<String> missingFiles = new ArrayList<String>();
95 String fileID = fileids.getFileID();
96 if(fileID != null && !getCache().hasFile(fileID, message.getCollectionID())) {
97 missingFiles.add(fileID);
98 }
99
100
101 if(!missingFiles.isEmpty()) {
102 ResponseInfo irInfo = new ResponseInfo();
103 irInfo.setResponseCode(ResponseCode.FILE_NOT_FOUND_FAILURE);
104
105 throw new IdentifyContributorException(irInfo, message.getCollectionID());
106 }
107 }
108
109
110
111
112
113 private void respondSuccesfullIdentification(IdentifyPillarsForGetChecksumsRequest request) {
114 IdentifyPillarsForGetChecksumsResponse response = createFinalResponse(request);
115
116 response.setTimeToDeliver(TimeMeasurementUtils.getTimeMeasurementFromMiliseconds(
117 getSettings().getReferenceSettings().getPillarSettings().getTimeToStartDeliver()));
118
119 ResponseInfo irInfo = new ResponseInfo();
120 irInfo.setResponseCode(ResponseCode.IDENTIFICATION_POSITIVE);
121 response.setResponseInfo(irInfo);
122
123 dispatchResponse(response, request);
124 }
125
126
127
128
129
130
131
132
133
134
135
136
137 private IdentifyPillarsForGetChecksumsResponse createFinalResponse(
138 IdentifyPillarsForGetChecksumsRequest msg) {
139 IdentifyPillarsForGetChecksumsResponse res
140 = new IdentifyPillarsForGetChecksumsResponse();
141 res.setFileIDs(msg.getFileIDs());
142 res.setChecksumRequestForExistingFile(msg.getChecksumRequestForExistingFile());
143 res.setPillarID(getSettings().getReferenceSettings().getPillarSettings().getPillarID());
144 res.setPillarChecksumSpec(getChecksumType());
145
146 return res;
147 }
148 }