Show
Ignore:
Timestamp:
31-01-11 20:16:03 (3 years ago)
Author:
robert@…
Message:

- Implemented a cache for module rest calls, to increase performance (see moduleCommunicationService)
- Implemented searching in module data.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/groovy/dbnp/query/SampleSearch.groovy

    r1456 r1458  
    1616 
    1717import dbnp.studycapturing.* 
     18import org.dbnp.gdt.* 
    1819 
    1920class SampleSearch extends Search { 
     21         
    2022        public SampleSearch() { 
    2123                this.entity = "Sample"; 
     
    9395                samples = filterOnAssayCriteria( samples ); 
    9496                 
     97                samples = filterOnModuleCriteria( samples ); 
     98                 
    9599                // Save matches 
    96100                results = samples; 
     
    103107         */ 
    104108        protected List filterOnStudyCriteria( List studies ) { 
    105                 return filterEntityList( studies, getEntityCriteria( 'Study' ), { study, criterion -> 
    106                         return criterion.matchOne( study ); 
    107                 }); 
     109                return filterOnTemplateEntityCriteria(studies, "Study", { study, criterion -> return criterion.getFieldValue( study ) }) 
    108110        } 
    109111 
     
    114116         */ 
    115117        protected List filterOnSubjectCriteria( List samples ) { 
    116                 return filterEntityList( samples, getEntityCriteria( 'Subject' ), { sample, criterion -> 
    117                         if( !sample.parentSubject ) 
    118                                 return false 
    119  
    120                         return criterion.matchOne( sample.parentSubject ); 
    121                 }); 
     118                return filterOnTemplateEntityCriteria(samples, "Subject", { sample, criterion -> 
     119                        return criterion.getFieldValue( sample.parentSubject ); 
     120                }) 
    122121        } 
    123122 
     
    128127         */ 
    129128        protected List filterOnSampleCriteria( List samples ) { 
    130                 return filterEntityList( samples, getEntityCriteria( 'Sample' ), { sample, criterion -> 
    131                         if( !sample  ) 
    132                                 return false 
    133  
    134                         return criterion.matchOne( sample ); 
    135                 }); 
     129                return filterOnTemplateEntityCriteria(samples, "Sample", { sample, criterion -> 
     130                        return criterion.getFieldValue( sample ); 
     131                }) 
    136132        } 
    137133 
     
    142138         */ 
    143139        protected List filterOnEventCriteria( List samples ) { 
    144                 println "Event criteria: " + getEntityCriteria( 'Event' ) 
    145                 return filterEntityList( samples, getEntityCriteria( 'Event' ), { sample, criterion -> 
     140                return filterOnTemplateEntityCriteria(samples, "Event", { sample, criterion -> 
    146141                        if( !sample || !sample.parentEventGroup || !sample.parentEventGroup.events || sample.parentEventGroup.events.size() == 0 ) 
    147                                 return false 
    148                  
    149                         return criterion.matchAny( sample.parentEventGroup.events.toList() ); 
    150                 }); 
     142                                return null 
     143 
     144                        return criterion.getFieldValue( sample.parentEventGroup.events.toList() ); 
     145                }) 
    151146        } 
    152147 
     
    157152         */ 
    158153        protected List filterOnSamplingEventCriteria( List samples ) { 
    159                 return filterEntityList( samples, getEntityCriteria( 'SamplingEvent' ), { sample, criterion -> 
    160                         if( !sample.parentEvent ) 
    161                                 return false 
    162  
    163                         return criterion.matchOne( sample.parentEvent ); 
    164                 }); 
    165         } 
    166  
     154                return filterOnTemplateEntityCriteria(samples, "SamplingEvent", { sample, criterion -> 
     155                        return criterion.getFieldValue( sample.parentEvent ); 
     156                }) 
     157        } 
    167158 
    168159        /** 
     
    180171                // There is no sample.assays property, so we have to look for assays another way: just find 
    181172                // all assays that match the criteria 
    182                 def assays = filterEntityList( Assay.list(), getEntityCriteria( 'Assay' ), { assay, criterion -> 
     173                def criteria = getEntityCriteria( 'Assay' ); 
     174                def assays = filterEntityList( Assay.list(), criteria, { assay, criterion -> 
    183175                        if( !assay ) 
    184176                                return false 
     
    190182                if( assays.size() == 0 ) 
    191183                        return []; 
     184                 
     185                // Save sample data for later use 
     186                saveResultFields( samples, criteria, { sample, criterion ->  
     187                         def sampleAssays = Assay.findByStudy( sample.parent ).findAll { it.samples?.contains( sample ) }; 
     188                         if( sampleAssays && sampleAssays.size() > 0 )  
     189                                return sampleAssays.collect( criterion.getFieldValue( it ) ) 
     190                        else  
     191                                return null 
     192                }); 
    192193                         
    193194                // Now filter the samples on whether they are attached to the filtered assays 
     
    208209                } 
    209210        } 
    210  
    211211}