140 |
140 |
super.handle(httpVerb);
|
141 |
141 |
|
142 |
142 |
try {
|
143 |
|
String resourcePrefix = RESOURCE_BASE_URL + "/mn/";
|
144 |
|
String resource = request.getServletPath();
|
|
143 |
// get the resource
|
|
144 |
String resource = request.getPathInfo();
|
|
145 |
resource = resource.substring(resource.indexOf("/") + 1);
|
145 |
146 |
|
146 |
|
if (resource.endsWith(resourcePrefix)) {
|
|
147 |
// default to node info
|
|
148 |
if (resource.equals("")) {
|
147 |
149 |
resource = RESOURCE_NODE;
|
148 |
150 |
}
|
149 |
|
else {
|
150 |
|
// remove prefix
|
151 |
|
resource = resource.substring(resource.indexOf(resourcePrefix) + resourcePrefix.length());
|
152 |
|
resource = resource.trim();
|
|
151 |
|
|
152 |
// get the rest of the path info
|
|
153 |
String extra = null;
|
|
154 |
if (resource.lastIndexOf("/") != -1) {
|
|
155 |
extra = resource.substring(resource.lastIndexOf("/") + 1);
|
153 |
156 |
}
|
154 |
157 |
|
155 |
158 |
logMetacat.debug("handling verb " + httpVerb + " request with resource '" + resource + "'");
|
... | ... | |
158 |
161 |
|
159 |
162 |
if (resource != null) {
|
160 |
163 |
|
161 |
|
if (resource.equals(RESOURCE_NODE)) {
|
|
164 |
if (resource.startsWith(RESOURCE_NODE)) {
|
162 |
165 |
// node response
|
163 |
166 |
node();
|
164 |
167 |
status = true;
|
165 |
|
|
166 |
|
} else if (resource.equals(RESOURCE_ACCESS_RULES)) {
|
|
168 |
} else if (resource.startsWith(RESOURCE_ACCESS_RULES)) {
|
167 |
169 |
if (httpVerb == POST) {
|
168 |
170 |
// set the access rules
|
169 |
171 |
setAccess();
|
170 |
172 |
status = true;
|
171 |
173 |
logMetacat.debug("done setting access");
|
172 |
174 |
}
|
173 |
|
} else if (resource.equals(RESOURCE_IS_AUTHORIZED)) {
|
|
175 |
} else if (resource.startsWith(RESOURCE_IS_AUTHORIZED)) {
|
174 |
176 |
if (httpVerb == GET) {
|
175 |
177 |
// check the access rules
|
176 |
|
String objectId = request.getPathInfo();
|
177 |
|
if (objectId != null && objectId.length() > 1) {
|
178 |
|
objectId = request.getPathInfo().substring(1);
|
179 |
|
}
|
180 |
|
isAuthorized(objectId);
|
|
178 |
isAuthorized(extra);
|
181 |
179 |
status = true;
|
182 |
180 |
logMetacat.debug("done getting access");
|
183 |
181 |
}
|
184 |
|
} else if (resource.equals(RESOURCE_META)) {
|
|
182 |
} else if (resource.startsWith(RESOURCE_META)) {
|
185 |
183 |
logMetacat.debug("Using resource 'meta'");
|
186 |
|
String objectId = request.getPathInfo();
|
187 |
|
if (objectId != null && objectId.length() > 1) {
|
188 |
|
objectId = request.getPathInfo().substring(1);
|
189 |
|
}
|
190 |
|
|
191 |
184 |
// get
|
192 |
185 |
if (httpVerb == GET) {
|
193 |
|
getSystemMetadataObject(objectId);
|
|
186 |
getSystemMetadataObject(extra);
|
194 |
187 |
status = true;
|
195 |
188 |
}
|
196 |
189 |
|
197 |
|
} else if (resource.equals(RESOURCE_OBJECTS)) {
|
|
190 |
} else if (resource.startsWith(RESOURCE_OBJECTS)) {
|
198 |
191 |
logMetacat.debug("Using resource 'object'");
|
199 |
|
|
200 |
|
String objectId = request.getPathInfo();
|
201 |
|
if (objectId != null && objectId.length() > 1) {
|
202 |
|
objectId = request.getPathInfo().substring(1);
|
203 |
|
} else {
|
204 |
|
objectId = null;
|
205 |
|
}
|
206 |
192 |
|
207 |
|
logMetacat.debug("objectId: " + objectId);
|
|
193 |
logMetacat.debug("objectId: " + extra);
|
208 |
194 |
logMetacat.debug("verb:" + httpVerb);
|
209 |
195 |
|
210 |
196 |
if (httpVerb == GET) {
|
211 |
|
getObject(objectId);
|
|
197 |
getObject(extra);
|
212 |
198 |
status = true;
|
213 |
199 |
} else if (httpVerb == POST) {
|
214 |
|
putObject(objectId, FUNCTION_NAME_INSERT);
|
|
200 |
putObject(extra, FUNCTION_NAME_INSERT);
|
215 |
201 |
status = true;
|
216 |
202 |
} else if (httpVerb == PUT) {
|
217 |
|
putObject(objectId, FUNCTION_NAME_UPDATE);
|
|
203 |
putObject(extra, FUNCTION_NAME_UPDATE);
|
218 |
204 |
status = true;
|
219 |
205 |
} else if (httpVerb == DELETE) {
|
220 |
|
deleteObject(objectId);
|
|
206 |
deleteObject(extra);
|
221 |
207 |
status = true;
|
222 |
208 |
} else if (httpVerb == HEAD) {
|
223 |
|
describeObject(objectId);
|
|
209 |
describeObject(extra);
|
224 |
210 |
status = true;
|
225 |
211 |
}
|
226 |
212 |
|
227 |
|
} else if (resource.equals(RESOURCE_LOG)) {
|
|
213 |
} else if (resource.startsWith(RESOURCE_LOG)) {
|
228 |
214 |
logMetacat.debug("Using resource 'log'");
|
229 |
215 |
// handle log events
|
230 |
216 |
if (httpVerb == GET) {
|
231 |
217 |
getLog();
|
232 |
218 |
status = true;
|
233 |
219 |
}
|
234 |
|
} else if (resource.equals(RESOURCE_CHECKSUM)) {
|
|
220 |
} else if (resource.startsWith(RESOURCE_CHECKSUM)) {
|
235 |
221 |
logMetacat.debug("Using resource 'checksum'");
|
236 |
222 |
// handle checksum requests
|
237 |
223 |
if (httpVerb == GET) {
|
238 |
|
checksum();
|
|
224 |
checksum(extra);
|
239 |
225 |
status = true;
|
240 |
226 |
}
|
241 |
227 |
} else if (resource.startsWith(RESOURCE_MONITOR)) {
|
242 |
228 |
// there are various parts to monitoring
|
243 |
229 |
if (httpVerb == GET) {
|
244 |
230 |
// health monitoring calls
|
245 |
|
status = monitor();
|
|
231 |
status = monitor(extra);
|
246 |
232 |
}
|
247 |
|
} else if (resource.equals(RESOURCE_REPLICATE)) {
|
|
233 |
} else if (resource.startsWith(RESOURCE_REPLICATE)) {
|
248 |
234 |
if (httpVerb == POST) {
|
249 |
235 |
logMetacat.debug("processing replicate request");
|
250 |
236 |
replicate();
|
251 |
237 |
status = true;
|
252 |
238 |
}
|
253 |
|
} else if (resource.equals(RESOURCE_ERROR)) {
|
|
239 |
} else if (resource.startsWith(RESOURCE_ERROR)) {
|
254 |
240 |
// sync error
|
255 |
241 |
if (httpVerb == POST) {
|
256 |
242 |
syncError();
|
... | ... | |
346 |
332 |
* @throws IOException
|
347 |
333 |
* @throws JiBXException
|
348 |
334 |
*/
|
349 |
|
private boolean monitor() throws NotFound, ParseException, NotImplemented, ServiceFailure, NotAuthorized, InvalidRequest, InsufficientResources, UnsupportedType, IOException, JiBXException {
|
|
335 |
private boolean monitor(String pathInfo) throws NotFound, ParseException, NotImplemented, ServiceFailure, NotAuthorized, InvalidRequest, InsufficientResources, UnsupportedType, IOException, JiBXException {
|
350 |
336 |
logMetacat.debug("processing monitor request");
|
351 |
|
String pathInfo = request.getPathInfo();
|
352 |
337 |
|
353 |
338 |
logMetacat.debug("verb is GET");
|
354 |
339 |
logMetacat.debug("pathInfo is " + pathInfo);
|
355 |
|
pathInfo = pathInfo.substring(1);
|
356 |
340 |
|
357 |
341 |
if (pathInfo.toLowerCase().equals("ping")) {
|
358 |
342 |
logMetacat.debug("processing ping request");
|
... | ... | |
436 |
420 |
* @throws NotFound
|
437 |
421 |
* @throws InvalidRequest
|
438 |
422 |
*/
|
439 |
|
private void checksum() throws NotImplemented, JiBXException, IOException, InvalidToken, ServiceFailure, NotAuthorized, NotFound, InvalidRequest {
|
|
423 |
private void checksum(String guid) throws NotImplemented, JiBXException, IOException, InvalidToken, ServiceFailure, NotAuthorized, NotFound, InvalidRequest {
|
440 |
424 |
String checksumAlgorithm = "MD5";
|
441 |
|
String guid = request.getPathInfo();
|
442 |
|
if (guid != null && guid.length() > 1) {
|
443 |
|
guid = request.getPathInfo().substring(1); // trim the slash
|
444 |
|
}
|
|
425 |
|
445 |
426 |
Identifier guidid = new Identifier();
|
446 |
427 |
guidid.setValue(guid);
|
447 |
428 |
try {
|
simplify the MN rest servlet mapping to match CN mappings - also streamlined the handler code to share extra path info parsing