Ignore:
Timestamp:
Jan 21, 2011, 4:30:04 PM (10 years ago)
Author:
robert@…
Message:

Improved querying and created a possibility to search for assays

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/controllers/dbnp/query/AdvancedQueryController.groovy

    r1415 r1424  
    3636                // Create a search object and let it do the searching
    3737                Search search;
     38                String view;
    3839                switch( params.entity ) {
    39                         case "Study":   search = new StudySearch();             break;
    40                         case "Sample":  search = new SampleSearch();    break;
     40                        case "Study":   search = new StudySearch();             view = "studyresults";  break;
     41                        case "Sample":  search = new SampleSearch();    view = "sampleresults"; break;
    4142                       
    4243                        // This exception will only be thrown if the entitiesToSearchFor contains more entities than
     
    4748                search.execute( parseCriteria( params.criteria ) );
    4849               
    49                 render( view: search.getView(), model: [search: search] );
     50                render( view: view, model: [search: search] );
    5051        }
    5152       
     
    6465                                def templateFields = TemplateField.findAllByEntity( entity )
    6566                               
    66                                 fields[ it ] = ( domainFields + templateFields ).collect { it.name }.unique().sort { a, b -> a[0].toUpperCase() + a[1..-1] <=> b[0].toUpperCase() + b[1..-1] };
     67                                def fieldNames = ( domainFields + templateFields ).collect { it.name }.unique() + 'Template'
     68                               
     69                                fields[ it ] = fieldNames.sort { a, b -> a[0].toUpperCase() + a[1..-1] <=> b[0].toUpperCase() + b[1..-1] };
    6770                        }
    6871                }
     
    8689         *      ]
    8790         *
    88          * @return      List with [entity: ..., field: ..., entityfield: ..., operator: ..., value: ...] tuples.
     91         * @return      List with Criterion objects
    8992         */
    9093        protected List parseCriteria( def c ) {
     
    9497                c.each {
    9598                        if( it.key ==~ /[0-9]+/ ) {
    96                                 def criterium = it.value;
     99                                def formCriterion = it.value;
     100                                Criterion criterion = new Criterion();
    97101                               
    98                                 def field = criterium.entityfield?.split( /\./ );
     102                                // Split entity and field
     103                                def field = formCriterion.entityfield?.split( /\./ );
    99104                               
    100105                                if( field.size() > 1 ) {
    101                                         criterium.entity = field[0].toString();
    102                                         criterium.field = field[1].toString();
     106                                        criterion.entity = field[0].toString();
     107                                        criterion.field = field[1].toString();
    103108                                } else {
    104                                         criterium.entity = null;
    105                                         criterium.field = field;
     109                                        criterion.entity = null;
     110                                        criterion.field = field;
    106111                                }
    107112                               
    108                                 list << criterium;
     113                                // Convert operator string to Operator-enum field
     114                                switch( formCriterion.operator ) {
     115                                        case ">=":                      criterion.operator = Operator.gte; break;
     116                                        case ">":                       criterion.operator = Operator.gt;  break;
     117                                        case "<":                       criterion.operator = Operator.lte; break;
     118                                        case "<=":                      criterion.operator = Operator.lt;  break;
     119                                        case "contains":        criterion.operator = Operator.contains; break;
     120                                        case "equals":          criterion.operator = Operator.equals; break;
     121                                }
     122                               
     123                                // Copy value
     124                                criterion.value = formCriterion.value;
     125                                 
     126                                list << criterion;
    109127                        }
    110128                }
Note: See TracChangeset for help on using the changeset viewer.