Show
Ignore:
Timestamp:
28-09-10 17:06:38 (4 years ago)
Author:
jahn
Message:

Added 2.5 new REST methods exposing the assay related data according to specs.

Files:
1 modified

Legend:

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

    r123 r128  
    6969     * Uses Searchable plugin.  
    7070     * 
    71      * @param measurement name 
     71     * @param assayToken  
     72     * @return list of meassurements for token. Each member of the list is a hash. 
     73         *                      the hash contains the three keys values pairs: value, sampleToken, and  
     74         *                      measurementMetadata. 
     75     * 
     76     * Example REST call:  
     77     * http://localhost:8182/sam/rest/getMeasurements/z?assayToken=2 
     78     * 
     79     * Resulting JSON object:  
     80     * 
     81     * [{"value":135,"sampleToken":"1_A","measurementToken":"total carbon dioxide (tCO)"}, 
     82         * {"value":4.2,"sampleToken":"1_A","measurementToken":"sodium (Na+)"} ] 
     83     */ 
     84    def getMeasurements = { 
     85                def assayToken = params.assayToken 
     86        if( !assayToken ) { return render [] as JSON } 
     87 
     88                def list = [] 
     89                def assay = SimpleAssay.find( "from SimpleAssay as a where a.id = " + assayToken ) 
     90                def mesaurements = SimpleAssayMeasurement 
     91                        .findAll( "from SimpleAssayMeasurement as m where m.assay =?", [assay] ) 
     92                                .each{ measurement ->  
     93                                        def tripple = [:] 
     94                                tripple['value'] = measurement.value 
     95                                tripple['sampleToken'] = measurement.sample.externalSampleId 
     96                                tripple['measurementToken'] = measurement.type.name 
     97                                        list.push tripple 
     98                                } 
     99                render list as JSON 
     100    } 
     101 
     102 
     103    /** 
     104     * Return measurement metadata for measurement  
     105     * 
     106     * @param assayToken 
     107     * @param measurementTokens 
    72108     * @return list of measurements 
    73      */ 
    74     def getMeasurements = { 
    75         if (!params.q?.trim()) { 
    76             return [:] 
    77         } 
    78         try { 
    79             render params 
    80             render searchableService.search(params.q, params).results 
    81             return [searchResult: searchableService.search(params.q, params)] 
    82         } catch (SearchEngineQueryParseException ex) { 
    83             return [parseException: true] 
    84         } 
    85     } 
    86  
    87  
    88  
    89  
     109     * 
     110     * Example REST call:  
     111         * http://localhost:8182/sam/rest/getMeasurementMetadata/33?assayToken=2 
     112     *      &measurementToken=total calcium (Ca) 
     113         *              &measurementToken=glucose 
     114     * 
     115     * Resulting JSON object:  
     116     * 
     117         * [ {"name":"glucose","unit":"mg/dl","referenceValues":null,"correctionMethod":null,"isDrug":false, 
     118         *    "isIntake":false,"inSerum":false,"isNew":false}, 
     119         *   {"name":"total calcium (Ca)","unit":"mg/dl", 
     120         *    "referenceValues":null,"correctionMethod":null,"isDrug":false,"isIntake":false,"inSerum":false, 
     121         *    "isNew":false} ] 
     122         */ 
     123    def getMeasurementMetadata = { 
     124 
     125                def assayToken = params.assayToken 
     126                def measurementTokens = params.measurementToken 
     127 
     128        if( !assayToken || !measurementTokens ) { 
     129                        return render [] as JSON  
     130                } 
     131 
     132        def list = [] 
     133        def types = [] 
     134        def assay = SimpleAssay.find( "from SimpleAssay as a where a.id = " + assayToken ) 
     135 
     136                if( measurementTokens.class == java.lang.String ) { 
     137                        measurementTokens = [ measurementTokens ] 
     138                } 
     139 
     140        SimpleAssayMeasurement 
     141            .findAll( "from SimpleAssayMeasurement as m where m.assay =?", [assay] ) 
     142                .each{ if( !types.contains(it.type)) types.push( it.type ) } 
     143    
     144        types.each { type -> 
     145                        def isInList = false 
     146                    measurementTokens.each { if(it==type.name) { isInList = true } } 
     147                        println type 
     148                        if(     isInList ) { 
     149                        def tuple = [:] 
     150                        tuple['name'] = type.name 
     151                        tuple['unit'] = type.unit 
     152                        tuple['referenceValues'] = type.referenceValues 
     153                        tuple['correctionMethod'] = type.correctionMethod 
     154                        tuple['isDrug'] = type.isDrug 
     155                        tuple['isIntake'] = type.isIntake 
     156                        tuple['inSerum'] = type.inSerum 
     157                        tuple['isNew'] = type.isNew 
     158                        list.push tuple  
     159                }  
     160        }  
     161 
     162        render list as JSON 
     163    } 
     164 
     165 
     166 
     167    /* 
     168     * Return list of metadata fields available for the samples in an assay 
     169     * 
     170     * @param assayTokes 
     171     * @param measurementTokens  
     172     * @param sampleTokens  
     173     * @return  table with values for given samples and measurements 
     174     */ 
     175    def getMeasurementData = { 
     176                def assayToken = params.assayToken 
     177                def measurementTokens = params.assayToken 
     178                def samlpeTokens = params.sampleToken 
     179 
     180        if( !assayToken || !measurementTokens || !sampleToken ) { 
     181                        return render [] as JSON  
     182                } 
     183 
     184                if( measurementTokens.class == java.lang.String ) { 
     185                        measurementTokens = [ measurementTokens ] 
     186                } 
     187 
     188                if( sampleTokens.class == java.lang.String ) { 
     189                        sampleTokens = [ sampleTokens ] 
     190                } 
     191 
     192        def assay = SimpleAssay.find( "from SimpleAssay as a where a.id = " + assayToken ) 
     193 
     194 
     195                /* to be continued */ 
     196 
     197    } 
     198 
     199 
     200 
     201    /** 
     202     * Return  
     203     * 
     204     * @param assayToken 
     205     * @param list of sampleTokens 
     206     * @return sample metadata for samples in assay 
     207     */ 
     208    def getSampleMetadata = { 
     209    } 
    90210 
    91211 
     
    364484 
    365485 
     486        def test = {  
     487                params.x.each{ println it } 
     488                render params  
     489        } 
    366490 
    367491}