Changeset 1011

Show
Ignore:
Timestamp:
28-10-10 17:16:25 (3 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.

Files:
1 modified

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        /**