Project

General

Profile

« Previous | Next » 

Revision 5390

Added by berkley almost 14 years ago

adding getlogrecords to the rest interface.

View differences:

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