Ignore:
Timestamp:
Sep 28, 2010, 5:06:38 PM (6 years ago)
Author:
jahn
Message:

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

File:
1 edited

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}
Note: See TracChangeset for help on using the changeset viewer.