Changeset 147

Show
Ignore:
Timestamp:
20-10-10 13:35:20 (4 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).

Files:
1 modified

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     *