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 |
*
|
adding getlogrecords to the rest interface.