Ignore:
Timestamp:
Feb 10, 2011, 1:04:32 PM (9 years ago)
Author:
robert@…
Message:

Improved query views

File:
1 edited

Legend:

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

    r1482 r1512  
    419419         * Example 3: two sampleTokens given.
    420420         * Query:
    421          * http://localhost:8080/gscf/rest/getSamples/query?assayToken=PPSH-Glu-A&sampleToken=5_A
     421         * http://localhost:8080/gscf/rest/getSamples/query?assayToken=PPSH-Glu-A&sampleToken=5_A&sampleToken=6_A
    422422         *
    423423         * Result:
    424424         * [{"sampleToken":"5_A","material":"blood plasma","subject":"5","event":"Blood extraction","startTime":"4 days, 6 hours"},
    425425         *  {"sampleToken":"6_A","material":"blood plasma","subject":"6","event":"Blood extraction","startTime":"4 days, 6 hours"}]
     426         *
     427         *
     428         * Example 4: no assaytoken given
     429         * Query:
     430         * http://localhost:8080/gscf/rest/getSamples/query?sampleToken=5_A&sampleToken=6_A
     431         *
     432         * Result:
     433         * [{"sampleToken":"5_A","material":"blood plasma","subject":"5","event":"Blood extraction","startTime":"4 days, 6 hours"},
     434         *  {"sampleToken":"6_A","material":"blood plasma","subject":"6","event":"Blood extraction","startTime":"4 days, 6 hours"}]
     435         *
    426436         */
    427437        def getSamples = {
    428438                def items = []
     439                def samples
    429440                if( params.assayToken ) {
    430441                        def assay = Assay.findByAssayUUID( params.assayToken );
     
    437448                                }
    438449                               
    439                                 def samples = assay.getSamples() // on all samples
    440 
    441                                 if( params.sampleToken ) {       // or on a subset of samples?
    442                                         def sampleTokens = (params.sampleToken instanceof String) ?
    443                                                 [params.sampleToken] : params.sampleToken
    444                                         samples = []
    445                                         sampleTokens.each{ sampleToken ->
    446                                                 samples.addAll(assay.getSamples().find{ sample -> sampleToken == sample.giveUUID() })
    447                                         }
    448                                 }
    449 
    450                                 samples.each { sample ->
    451 
    452                                         def item = [
    453                                                 'sampleToken' : sample.giveUUID(),
    454                                                 'material'        : sample.material?.name,
    455                                                 'subject'         : sample.parentSubject?.name,
    456                                                 'event'           : sample.parentEvent?.template?.name,
    457                                                 'startTime'       : sample.parentEvent?.getStartTimeString()
    458                                         ]
    459 
    460                                         sample.giveFields().each { field ->
    461                                                 def name = field.name
    462                                                 def value = sample.getFieldValue( name )
    463                                                 if(name!='material')
    464                                                 {
    465                                                         item[name]=value
    466                                                 }
    467                                         }
    468 
    469                                         if(sample.parentEvent) {
    470                                                 def parentEvent = sample.parentEvent
    471                                                 def eventHash = [:]
    472                                                 parentEvent.giveFields().each { field ->
    473                                                         def name = field.name
    474                                                         if( name !='sampleTemplate' && name != 'fields') {
    475                                                                 def value = parentEvent.getFieldValue( name )
    476                                                                 eventHash[name]=value
    477                                                         }
    478                                                 }
    479                                                 item['eventObject'] = eventHash
    480                                         }
    481 
    482                                         if(sample.parentSubject) {
    483                                                 def parentSubject = sample.parentSubject
    484                                                 def subject = [:]
    485                                                 parentSubject.giveFields().each { field ->
    486                                                         def name = field.name
    487                                                         if( name!='fields') {
    488                                                                 def value = parentSubject.getFieldValue( name )
    489                                                                 subject[name]=value
    490                                                         }
    491                                                 }
    492                                                 item['subjectObject'] = subject
    493                                         }
    494 
    495                                         items.push item
    496                                 }
     450                                samples = assay.getSamples() // on all samples
    497451                        } else {
    498452                                // Assay not found
     
    500454                                return false
    501455                        }
    502                 }
     456                } else {
     457                        // Find all samples from studies the user can read
     458                        def studies = Study.list().findAll { it.canRead( AuthenticationService.getRemotelyLoggedInUser( params.consumer, params.token ) ) };
     459                        samples = studies*.getSamples().flatten();
     460                }
     461               
     462                // Check whether only a subset of samples should be returned
     463                if( params.sampleToken ) {
     464                        def sampleTokens = params.list( "sampleToken" );
     465                        samples = samples.findAll { sampleTokens.contains( it.giveUUID() ) }
     466                }
     467
     468                samples.each { sample ->
     469
     470                        def item = [
     471                                'sampleToken' : sample.giveUUID(),
     472                                'material'        : sample.material?.name,
     473                                'subject'         : sample.parentSubject?.name,
     474                                'event'           : sample.parentEvent?.template?.name,
     475                                'startTime'       : sample.parentEvent?.getStartTimeString()
     476                        ]
     477
     478                        sample.giveFields().each { field ->
     479                                def name = field.name
     480                                def value = sample.getFieldValue( name )
     481                                if(name!='material')
     482                                {
     483                                        item[name]=value
     484                                }
     485                        }
     486
     487                        if(sample.parentEvent) {
     488                                def parentEvent = sample.parentEvent
     489                                def eventHash = [:]
     490                                parentEvent.giveFields().each { field ->
     491                                        def name = field.name
     492                                        if( name !='sampleTemplate' && name != 'fields') {
     493                                                def value = parentEvent.getFieldValue( name )
     494                                                eventHash[name]=value
     495                                        }
     496                                }
     497                                item['eventObject'] = eventHash
     498                        }
     499
     500                        if(sample.parentSubject) {
     501                                def parentSubject = sample.parentSubject
     502                                def subject = [:]
     503                                parentSubject.giveFields().each { field ->
     504                                        def name = field.name
     505                                        if( name!='fields') {
     506                                                def value = parentSubject.getFieldValue( name )
     507                                                subject[name]=value
     508                                        }
     509                                }
     510                                item['subjectObject'] = subject
     511                        }
     512
     513                        items.push item
     514                }
     515
    503516                render items as JSON
    504517        }
Note: See TracChangeset for help on using the changeset viewer.