Ignore:
Timestamp:
Jun 3, 2010, 9:48:33 AM (8 years ago)
Author:
jahn
Message:

REST resources for communicating with the Simple Assay Module.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/controllers/RestController.groovy

    r480 r515  
    11/**
    2  * RestController Controler
     2 * ModuleCommunicationController Controler
    33 *
    4  * Description this is for testing the dbNP.rest.CCMCommunicationManager only and should be removed,
    5  * once the CCMCommunicationManager works with an exteneral server (nbx5)!!!!
     4 * This controler provides a REST service.
     5 * The names of the RESET resources are the same as the names of this
     6 * controller's actions. E.g., the resources called getStudies simply
     7 * corresponds to the action getStudies. Some of the resources are parameterized.
     8 * The parameters are passed as parameters in the url and are available in the
     9 * params respecting Grails' conventions. In this file, we adher to the javadoc 
     10 * convention for describing parameters ("@param"), but actually we mean
     11 * key-value pairs in the params object of each Grails action we comment on.
    612 *
    7  * This class renders two REST related requests (features and get_json).
    8  *
    9  * @author  Jahn
    10  * @since   20100526
     13 * @author      Jahn
     14 * @since       20100601
    1115 *
    1216 */
    1317
    14 import grails.converters.JSON
     18import data.*
     19import dbnp.studycapturing.Study
     20import dbnp.studycapturing.Assay
     21import grails.converters.*
    1522import org.codehaus.groovy.grails.web.json.*
    16 import dbnp.studycapturing.TemplateFieldListItem
    17 import dbnp.studycapturing.Template
    18 import dbnp.rest.CCMCommunicationManager
     23
    1924
    2025
     
    2227
    2328
    24     /**
    25      * result of querying the Clinical Chemistry Module
    26      * if assay in the database : return the Clinical Assay
    27      * else : return the list of all Assays in the database
    28      * @return Clinical Assay
    29      */
    30     def features = {
    31             //def items = TemplateFieldListItem.list()
    32             def items = Template.list()
    33             items.each{ render (it as JSON) }
    34             render params
    35     }
     29        /* REST resources for Simple Assay Module (SAM) */
    3630
    3731
    38     /* Use a REST resource to get data using the CCMCommunicationManager */
    39     def get_json = {
    40         def json_result = new CCMCommunicationManager().getFeatures()
    41         json_result.each { render "Value : ${it}\n"}
    42     }
     32        /**
     33        * REST resource for the Simple Assay Module.
     34        * Provide a list of all studies.
     35        *
     36        *
     37        * Examlpe call of the getAssays REST resource: http://localhost:8080/gscf/rest/getAssays/json?externalStudyID=1
     38        *
     39        * @return as JSON object list of members externalStudyID, and title for all studies
     40        */
     41        def getStudies = {
     42                List studies = []
     43                Study.list().each { study ->
     44                    studies.push( [ 'externalStudyID': study.externalStudyID, 'name':study.title ] )
     45                }
     46                render studies as JSON
     47        }
     48
     49
     50        /**
     51        * REST resource for the Simple Assay Module.
     52        * Provide a list of all assays for a given study
     53        *
     54        * Example for calling this resource: http://localhost:8080/gscf/rest/getAssays/json?externalStudyID=2
     55        *
     56        * @param  externalStudyID
     57        * @return list of assays as JSON object
     58        */
     59        def getAssays = {
     60                List assays = []
     61                if( params.externalStudyID ) {
     62                        def id = Long.parseLong(params.externalStudyID)
     63                        def study = Study.find( "from Study as s where s.externalStudyID=?", [id])
     64                        study.assays.each{ assay -> assays.push assay.externalAssayID }
     65                }
     66                render assays as JSON
     67        }
     68
     69
     70        /**
     71        * REST resource for the Simple Assay Module.
     72        * Provide all samples of a given Assay. The result is an enriched list with additional informatin on a sample.
     73        *
     74        * Example for calling this resource: http://localhost:8080/gscf/rest/getAssays/json?externalStudyID=2
     75        *
     76        * @param  assayID (externalAssayID of some Assay in GSCF)
     77        * @return list of element of  Sample.name x Sample.material x Sample.subject.name x Sample.Event.name x Sample.Event.time
     78        */
     79        def getSamples = {
     80                def items = []
     81                if( params.externalAssayID ) {
     82                        def id = Long.parseLong(params.externalAssayID)
     83                        Assay.find( "from Assay as a where externalAssayID=?",[id]).getSamples().each { sample ->
     84                                def item = [
     85                                        'name'            : sample.name,
     86                                        'material'        : sample.material.name,
     87                                        'subject'         : sample.parentSubject.name,
     88                                        //'event'         : sample.parentEvent.name,  // get the freaking name
     89                                        'startTime'       : sample.parentEvent.startTime
     90                                ]
     91                                items.push item
     92                        }
     93                }
     94                render items as JSON
     95        }
    4396
    4497}
Note: See TracChangeset for help on using the changeset viewer.