Changeset 147


Ignore:
Timestamp:
Oct 20, 2010, 1:35:20 PM (6 years ago)
Author:
j.saito@…
Message:

Added four methods according to specs on module section of dbnp.org:
getAssayMetadataFields, getAssayMetadataValues, getSampleMetadata, getSampleMetadataFields.

Methods still need to be tested and examples need to be added in the documentation.

(Tickent #131).

File:
1 edited

Legend:

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

    r146 r147  
    463463
    464464
     465    /**
     466     * @param   (no parameters)
     467     * @return  metadata fields that can be available for any assay stored in the module
     468     */
     469    def getAssayMetadataFields = {
     470                def exampleType = SimpleAssayMeasurementType.find()
     471                def list = []
     472                exampleType.giveFields.each{
     473                        list.push( it.name )
     474                }
     475                render list as JSON     
     476    }
     477
     478
     479
     480    /**
     481     *
     482     * @param   assayToken
     483     * @param   measurementTokens
     484     * @return  metadata values for the specified assay
     485     */
     486    def getAssayMetadataValues = {
     487                def error = CommunicationManager.hasValidParameters( params, 'assayToken' )
     488                if(error) {
     489                        render error as JSON
     490                        return
     491                }
     492                def assay = SimpleAssay.findByExternalAssayID( params.assayToken )
     493                def types = []
     494                def hash = []
     495                token.getMeasurements.each {
     496                        types.push( it.type     )
     497                }
     498                types.unique.each { type ->
     499                        type.fields.each { field ->
     500                                hash[field.name] = field.value
     501                        }
     502                }
     503                render hash as JSON
     504        }
     505
     506
     507
     508    /**
     509     * @param   assayToken
     510     * @return  list of metadata fields that are available for the samples in the specified assay
     511     */
     512    def getSampleMetadataFields = {
     513                def error = CommunicationManager.hasValidParameters( params, 'assayToken' )
     514                if(error) {
     515                        render error as JSON
     516                        return
     517                }
     518                def assay = SimpleAssay.findByExternalAssayID( params.assayToken )
     519                def types = []
     520                assay.getTypes.each{
     521                        types.push(it.name)     
     522                }
     523                render types as JSON
     524    }
     525
     526
     527 
     528    /**
     529     * @param   assayToken
     530     * @param   list of sampleTokens
     531     * @return  List of sample metadata values for the specified samples in the specified assay.
     532     *          Each element of the list is a hash containing values for one sample.
     533     *          The hash contains the key "sampleToken" to indentify the sample. The other keys
     534     *          of the hash contain information on the actual metadata values for the sample.
     535     *          The keys are metadata fields, the values are the values of the corresponding
     536     *          SimpleAssayMeasurements.
     537     */
     538    def getSampleMetadata = {
     539                def error = CommunicationManager.hasValidParameters( params, 'assayToken', 'sampleToken' )
     540                if(error) {
     541                        render error as JSON
     542                        return
     543                }
     544                def assay = SimpleAssay.findByExternalAssayID( params.assayToken )
     545                def samples = []
     546                def list = []
     547                params.sampleToken.each{
     548                        if( SimpleAssaySample.findByName(it).assay == assay ) {
     549                                samples.push(it)
     550                        }
     551                }
     552                samples.each{ sample ->
     553                        def hash = ['sampleToken':sample.name]
     554                        SimpleAssayMeasurement.findAllBySample(sample).each{ measurement ->
     555                                hash[measurement.type.name]=measumrent.value
     556                        }
     557                        list.push hash
     558                }
     559                render list as JSON
     560    }
     561
     562
     563
     564
     565
    465566    /**  Launch a Searchable query and return its result object
    466567     *
Note: See TracChangeset for help on using the changeset viewer.