Revision 5390
Added by berkley almost 14 years ago
ResourceHandler.java | ||
---|---|---|
33 | 33 |
import javax.servlet.http.HttpServletResponse; |
34 | 34 |
import java.text.DateFormat; |
35 | 35 |
|
36 |
import org.apache.commons.httpclient.util.DateParser; |
|
36 | 37 |
import org.apache.commons.io.IOUtils; |
37 | 38 |
import org.apache.log4j.Logger; |
38 | 39 |
import org.dataone.service.exceptions.BaseException; |
... | ... | |
190 | 191 |
private static final String RESOURCE_META = "meta"; |
191 | 192 |
private static final String RESOURCE_SESSION = "session"; |
192 | 193 |
private static final String RESOURCE_IDENTIFIER = "identifier"; |
194 |
private static final String RESOURCE_LOG = "log"; |
|
193 | 195 |
|
194 | 196 |
/* |
195 | 197 |
* API Functions used as URL parameters |
... | ... | |
349 | 351 |
status = true; |
350 | 352 |
} |
351 | 353 |
|
354 |
} else if (resource.equals(RESOURCE_LOG)) { |
|
355 |
//handle log events |
|
356 |
if(httpVerb == GET) |
|
357 |
{ |
|
358 |
getLog(); |
|
359 |
status = true; |
|
360 |
} |
|
361 |
else |
|
362 |
{ |
|
363 |
printError("POST, PUT, DELETE is not supported for logs.", response); |
|
364 |
status = true; |
|
365 |
} |
|
366 |
|
|
352 | 367 |
} |
368 |
|
|
353 | 369 |
if (!status) |
354 | 370 |
printError("Incorrect parameters!", response); |
355 | 371 |
} else { |
... | ... | |
362 | 378 |
} |
363 | 379 |
|
364 | 380 |
/** |
381 |
* get the logs from the CrudService based on passed params. Available |
|
382 |
* params are token, fromDate, toDate, event. See |
|
383 |
* http://mule1.dataone.org/ArchitectureDocs/mn_api_crud.html#MN_crud.getLogRecords |
|
384 |
* for more info |
|
385 |
*/ |
|
386 |
private void getLog() |
|
387 |
{ |
|
388 |
OutputStream out = null; |
|
389 |
try |
|
390 |
{ |
|
391 |
out = response.getOutputStream(); |
|
392 |
AuthToken token = new AuthToken(sessionId); |
|
393 |
String fromDateS = params.get("fromDate")[0]; |
|
394 |
Date fromDate = null; |
|
395 |
String toDateS = params.get("toDate")[0]; |
|
396 |
Date toDate = null; |
|
397 |
String eventS = params.get("event")[0]; |
|
398 |
Event event = null; |
|
399 |
if(fromDateS != null) |
|
400 |
{ |
|
401 |
fromDate = DateParser.parseDate(fromDateS); |
|
402 |
} |
|
403 |
if(toDateS != null) |
|
404 |
{ |
|
405 |
toDate = DateParser.parseDate(toDateS); |
|
406 |
} |
|
407 |
if(eventS != null) |
|
408 |
{ |
|
409 |
event = Event.convert(eventS); |
|
410 |
} |
|
411 |
|
|
412 |
Log log = CrudService.getInstance().getLogRecords(token, fromDate, toDate, event); |
|
413 |
serializeServiceType(Log.class, log, out); |
|
414 |
} |
|
415 |
catch(Exception e) |
|
416 |
{ |
|
417 |
String msg = "Could not get logs from CrudService: " + e.getMessage(); |
|
418 |
ServiceFailure sf = new ServiceFailure("1490", msg); |
|
419 |
logMetacat.error(msg); |
|
420 |
e.printStackTrace(); |
|
421 |
serializeException(sf, out); |
|
422 |
} |
|
423 |
} |
|
424 |
|
|
425 |
/** |
|
365 | 426 |
* copies request parameters to a hashtable which is given as argument to native metacathandler functions |
366 | 427 |
*/ |
367 | 428 |
private void initParams() { |
... | ... | |
625 | 686 |
out = response.getOutputStream(); |
626 | 687 |
// Serialize and write it to the output stream |
627 | 688 |
try { |
628 |
IBindingFactory bfact = BindingDirectory.getFactory(ObjectList.class); |
|
629 |
IMarshallingContext mctx = bfact.createMarshallingContext(); |
|
630 |
mctx.marshalDocument(ol, "UTF-8", null, out); |
|
689 |
serializeServiceType(ObjectList.class, ol, out); |
|
631 | 690 |
} catch (JiBXException e) { |
632 | 691 |
throw new ServiceFailure("1190", "Failed to serialize ObjectList: " + e.getMessage()); |
633 | 692 |
} |
... | ... | |
657 | 716 |
|
658 | 717 |
// Serialize and write it to the output stream |
659 | 718 |
try { |
660 |
IBindingFactory bfact = BindingDirectory.getFactory(SystemMetadata.class); |
|
661 |
IMarshallingContext mctx = bfact.createMarshallingContext(); |
|
662 |
mctx.marshalDocument(sysmeta, "UTF-8", null, out); |
|
719 |
serializeServiceType(SystemMetadata.class, sysmeta, out); |
|
663 | 720 |
} catch (JiBXException e) { |
664 | 721 |
throw new ServiceFailure("1190", "Failed to serialize SystemMetadata: " + e.getMessage()); |
665 | 722 |
} |
... | ... | |
674 | 731 |
} |
675 | 732 |
|
676 | 733 |
/** |
734 |
* serialize an object of type to out |
|
735 |
* @param type the class of the object to serialize (i.e. SystemMetadata.class) |
|
736 |
* @param object the object to serialize |
|
737 |
* @param out the stream to serialize it to |
|
738 |
* @throws JiBXException |
|
739 |
*/ |
|
740 |
private void serializeServiceType(Class type, Object object, OutputStream out) |
|
741 |
throws JiBXException |
|
742 |
{ |
|
743 |
IBindingFactory bfact = BindingDirectory.getFactory(type); |
|
744 |
IMarshallingContext mctx = bfact.createMarshallingContext(); |
|
745 |
mctx.marshalDocument(object, "UTF-8", null, out); |
|
746 |
} |
|
747 |
|
|
748 |
/** |
|
749 |
* deserialize an object of type from is |
|
750 |
* @param type the class of the object to serialize (i.e. SystemMetadata.class) |
|
751 |
* @param is the stream to deserialize from |
|
752 |
* @throws JiBXException |
|
753 |
*/ |
|
754 |
private Object deserializeServiceType(Class type, InputStream is) |
|
755 |
throws JiBXException |
|
756 |
{ |
|
757 |
IBindingFactory bfact = BindingDirectory.getFactory(type); |
|
758 |
IUnmarshallingContext uctx = bfact.createUnmarshallingContext(); |
|
759 |
Object o = (Object) uctx.unmarshalDocument(is, null); |
|
760 |
return o; |
|
761 |
} |
|
762 |
|
|
763 |
/** |
|
677 | 764 |
* Earthgrid API > Query Service > Query Function : translates ecogrid query document to metacat query |
678 | 765 |
* then calls DBQuery > createResultDocument function and then again translate resultset to ecogrid resultset |
679 | 766 |
* |
Also available in: Unified diff
adding getlogrecords to the rest interface.