Changeset 1800
- Timestamp:
- May 2, 2011, 5:03:36 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/grails-app/controllers/dbnp/query/AdvancedQueryController.groovy
r1799 r1800 265 265 */ 266 266 protected def getSearchableFields() { 267 def fields = [ :];267 def fields = [ '*' : [ '*' ] ]; // Searches for all fields in all objects 268 268 269 269 // Retrieve all local search fields … … 308 308 } 309 309 } 310 310 311 311 return fields; 312 312 } … … 332 332 ArrayList list = []; 333 333 flash.error = ""; 334 334 335 // Loop through all keys of c and remove the non-numeric ones 335 336 for( c in formCriteria ) { -
trunk/grails-app/views/advancedQuery/index.gsp
r1780 r1800 18 18 entity.key.toString() + '.' + field.toString() + ' ' + 19 19 entity.key.toString() + ' ' + field.toString() + ' ' + 20 (field == '*' ? 'any field' : '') 20 (field == '*' ? 'any field' : '') + ' ' + 21 (field == '*' && entity.key == '*' ? 'any field in any object' : '') 21 22 ).encodeAsJavaScript()}", 22 23 show: "${ 23 24 (field == '*' ? 24 '[Any field in ' + entity.key.toString() + ']':25 ( entity.key == '*' ? '[Any field in any object]' : '[Any field in ' + entity.key.toString() + ']' ) : 25 26 (field?.size() > 1 ? 26 27 field[0].toUpperCase() + field[1..-1] : -
trunk/src/groovy/dbnp/query/Criterion.groovy
r1717 r1800 43 43 public String humanReadableEntityField() { 44 44 if( field == '*' ) { 45 return "any field in " + entity.toString(); 45 if( entity == '*' ) { 46 return "any field in any object" 47 } else { 48 return "any field in " + entity.toString(); 49 } 46 50 } else { 47 51 return entityField(); -
trunk/src/groovy/dbnp/query/SampleSearch.groovy
r1717 r1800 112 112 samples = filterOnSamplingEventCriteria( samples ); 113 113 samples = filterOnAssayCriteria( samples ); 114 114 115 // Filter on criteria for which the entity is unknown 116 samples = filterOnAllFieldsCriteria( samples ); 117 118 // Filter on module criteria 115 119 samples = filterOnModuleCriteria( samples ); 116 120 … … 186 190 case "Assay": 187 191 return { sample, criterion -> 188 println "Find value for " + sample + " and " + criterion189 192 def sampleAssays = Assay.findByParent( sample.parent ).findAll { it.samples?.contains( sample ) }; 190 193 if( sampleAssays && sampleAssays.size() > 0 ) -
trunk/src/groovy/dbnp/query/Search.groovy
r1798 r1800 166 166 objects = filterOnAssayCriteria( objects ); 167 167 168 // Filter on criteria for which the entity is unknown 169 objects = filterOnAllFieldsCriteria( objects ); 170 171 // Filter on module criteria 168 172 objects = filterOnModuleCriteria( objects ); 169 173 … … 197 201 objects = ( objects + filterOnSamplingEventCriteria( allObjects - objects ) ).unique(); 198 202 objects = ( objects + filterOnAssayCriteria( allObjects - objects ) ).unique(); 203 204 // Filter on criteria for which the entity is unknown 205 objects = ( objects + filterOnAllFieldsCriteria( allObjects - objects ) ).unique(); 199 206 200 207 // All objects (including the ones already found by another criterion) are sent to … … 484 491 def entity = "Assay" 485 492 return filterOnTemplateEntityCriteria(studies, entity, valueCallback( entity ) ) 493 } 494 495 496 /** 497 * Filters the given list of entities on criteria that mention all fields (e.g. search for studies with 'bacteria' in any field) 498 * @param objects Original list of entities. 499 * @return List of all entities that match the given criteria 500 */ 501 protected List filterOnAllFieldsCriteria( List objects ) { 502 def criteria = getEntityCriteria( "*" ); 503 504 // Find methods to determine a value for a criterion, based on all entities 505 def valueCallbacks = [:]; 506 def entities = [ "Study", "Subject", "Sample", "Event", "SamplingEvent", "Assay" ]; 507 entities.each { 508 valueCallbacks[ it ] = valueCallback( it ); 509 } 510 511 // Create a closure that checks all entities 512 def checkCallback = { object, criterion -> 513 def value = ""; 514 for( def entity in entities ) { 515 value = valueCallbacks[ entity ]( object, criterion ); 516 517 if( value == null ) { 518 continue; 519 } 520 521 if( value instanceof Collection ) { 522 if( criterion.matchAny( value ) ) 523 return true; 524 } else { 525 if( criterion.match( value ) ) 526 return true; 527 } 528 } 529 530 // If no match is found, return 531 return false; 532 } 533 534 return filterEntityList( objects, criteria, checkCallback); 486 535 } 487 536 -
trunk/src/groovy/dbnp/query/StudySearch.groovy
r1526 r1800 122 122 * @return 123 123 */ 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 124 protected Closure valueCallback( String entity ) { 125 switch( entity ) { 126 case "Study": 127 return { study, criterion -> return criterion.getFieldValue( study ) } 128 case "Subject": 129 return { study, criterion -> return study.subjects?.collect { criterion.getFieldValue( it ); } } 130 case "Sample": 131 return { study, criterion -> return study.samples?.collect { criterion.getFieldValue( it ); } } 132 case "Event": 133 return { study, criterion -> return study.events?.collect { criterion.getFieldValue( it ); } } 134 case "SamplingEvent": 135 return { study, criterion -> return study.samplingEvents?.collect { criterion.getFieldValue( it ); } } 136 case "Assay": 137 return { study, criterion -> return study.assays?.collect { criterion.getFieldValue( it ); } } 138 default: 139 return super.valueCallback( entity ); 140 } 141 } 142 142 143 143 /**
Note: See TracChangeset
for help on using the changeset viewer.