Changeset 1011


Ignore:
Timestamp:
Oct 28, 2010, 5:16:25 PM (6 years ago)
Author:
j.saito@…
Message:

Ticket #57. Unified getStudy and getStudies.

Note: Could not get authorization working. This still needs to be tested for getStudies, getAssays, and getSubjects.

File:
1 edited

Legend:

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

    r1010 r1011  
    5151                        return true
    5252                }
     53                return true
    5354        }
    5455
     
    8384        }
    8485
     86
    8587        /**
    8688         * REST resource for data modules.
     
    8890         * Provide a list of all studies owned by the supplied user.
    8991         *
    90          * @param       consumer        consumer name of the calling module
    91          * @param       token           token for the authenticated user (e.g. session_id)
    92          * @return JSON object list containing 'studyToken', and 'name' (title) for each study
     92         * @param       studyToken  optional parameter. If no studyToken is given, all studies available to user are returned.
     93         *                      Otherwise, the studies for which the studyTokens are given are be returned.
     94         * @param       consumer        consumer name of the calling module
     95         * @param       token           token for the authenticated user (e.g. session_id)
     96         * @return  JSON object list containing 'studyToken', and 'name' (title) for each study
     97         *
     98         *
     99         * Example 1. REST call without studyToken.
     100         *
     101         * Call: http://localhost:8080/gscf/rest/getStudies/query
     102         *
     103         * Result: [{"title":"NuGO PPS3 mouse study leptin module","studyToken":"PPS3_leptin_module",
     104         *                      "startDate":"2008-01-01T23:00:00Z","published":false,"Description":"C57Bl/6 mice were fed a high fat (45 en%)
     105         *                      or low fat (10 en%) diet after a four week run-in on low fat diet.","Objectives":null,"Consortium":null,
     106         *                      "Cohort name":null,"Lab id":null,"Institute":null,"Study protocol":null},
     107         *                      {"title":"NuGO PPS human study","studyToken":"PPSH","startDate":"2008-01-13T23:00:00Z","published":false,
     108         *                      "Description":"Human study performed at RRI; centres involved: RRI, IFR, TUM, Maastricht U.","Objectives":null,
     109         *                      "Consortium":null,"Cohort name":null,"Lab id":null,"Institute":null,"Study protocol":null}]
     110         *
     111         *
     112         * Example 2. REST call with one studyToken.
     113         *
     114         * Call: http://localhost:8080/gscf/rest/getStudies/query?studyToken=PPSH
     115         *
     116         * Result: [{"title":"NuGO PPS human study","studyToken":"PPSH","startDate":"2008-01-13T23:00:00Z",
     117         *              "published":false,"Description":"Human study performed at RRI; centres involved: RRI, IFR, TUM, Maastricht U.",
     118         *              "Objectives":null,"Consortium":null,"Cohort name":null,"Lab id":null,"Institute":null,"Study protocol":null}]
     119         *
     120         *
     121         *
     122         * Example 2. REST call with two studyTokens.
     123         *
     124         * http://localhost:8080/gscf/rest/getStudies/query?studyToken=PPSH&studyToken=PPS3_leptin_module
     125         *
     126         * Result: same as result of Example 1.
    93127         */
    94128        def getStudies = {
     129
     130                List returnStudies = []
    95131                List studies = []
    96                 Study.findAllByOwner(AuthenticationService.getRemotelyLoggedInUser( params.consumer, params.token )).each { study ->
    97                         studies.push( [ 'title':study.title, 'studyToken':study.getToken()] )
    98                 }
    99                 render studies as JSON
     132
     133                if( !params.studyToken ) {
     134                        studies = Study.findAll()
     135                }
     136                else if( params.studyToken instanceof String ) {
     137                        studies.push Study.findByCode( params.studyToken )
     138                }
     139                else {
     140                        params.studyToken.each{ studyToken ->
     141                                studies.push Study.findByCode( studyToken )
     142                        }
     143                }
     144
     145                studies.each { study ->
     146                        if(study) {
     147                                // Check whether the person is allowed to read the data of this study
     148                                if( !study.canRead(AuthenticationService.getRemotelyLoggedInUser( params.consumer, params.token ))) {
     149                                        response.sendError(401)
     150                                        return false
     151                                }
     152                                def items = [:]
     153                                study.giveFields().each { field ->
     154                                        def name = field.name
     155                                        def value = study.getFieldValue( name )
     156                                        if( name=='code' ) {
     157                                                name = 'studyToken'
     158                                        }
     159                                        items[name] = value
     160                                }
     161                                returnStudies.push items
     162                        }
     163                }
     164
     165                render returnStudies as JSON
    100166        }
    101167
     
    310376                                                assay.getSamples().each { sample ->
    311377                                                if( sampleTokens.find{ it == sample.name } ) {
    312                                                         println "adding"
    313378                                                        def item = [
    314379                                                                'sampleToken' : sample.name,
     
    340405
    341406
    342         /**
    343          * REST resource for dbNP modules.
    344          *
    345          * @param       studyToken String, the external identifier of the study
    346          * @param       consumer        consumer name of the calling module
    347          * @param       token           token for the authenticated user (e.g. session_id)
    348          * @return List of all fields of this study
    349          * @return
    350          *
    351          * If the user is not allowed to read this study, a 401 error is given
    352          *
    353          * Example REST call (without authentication):
    354      * http://localhost:8080/gscf/rest/getStudy/study?studyToken=PPSH
    355      *
    356          * Returns the JSON object:
    357          * {"title":"NuGO PPS human study","studyToken":"PPSH","startDate":"2008-01-13T23:00:00Z",
    358          * "Description":"Human study performed at RRI; centres involved: RRI, IFR, TUM, Maastricht U.",
    359          * "Objectives":null,"Consortium":null,"Cohort name":null,"Lab id":null,"Institute":null,
    360          * "Study protocol":null}
    361         */
    362         def getStudy = {
    363                 def items = [:]
    364                 if( params.studyToken ) {
    365                         def study = Study.find( "from Study as s where code=?",[params.studyToken])
    366                         if(study) {
    367                                 // Check whether the person is allowed to read the data of this study
    368                                 if( !study.canRead(AuthenticationService.getRemotelyLoggedInUser( params.consumer, params.token ))) {
    369                                         response.sendError(401)
    370                                         return false
    371                                 }
    372                                
    373                                 study.giveFields().each { field ->
    374                                         def name = field.name
    375                                         def value = study.getFieldValue( name )
    376                                         items[name] = value
    377                                 }
    378                         }
    379         }
    380                 render items as JSON
    381         }
    382 
    383 
    384 
    385407
    386408        /**
Note: See TracChangeset for help on using the changeset viewer.