Changeset 1424 for trunk/grails-app


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

Location:
trunk/grails-app
Files:
1 added
5 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                }
  • trunk/grails-app/domain/dbnp/studycapturing/RelTime.groovy

    r959 r1424  
    2121package dbnp.studycapturing
    2222
    23 class RelTime {
     23class RelTime implements Comparable {
    2424        final static long s = 1L;
    2525        final static long m = 60L * s;
     
    285285
    286286        public void computeDifference(Date start, Date end) {
    287                 println([start, end]);
    288                 println([start.getTime(), end.getTime()]);
    289 
    290287                if (start && end) {
    291288                        long seconds = (end.getTime() - start.getTime()) / 1000L;
     
    301298                return reltime;
    302299        }
     300       
     301        public boolean equals( Object o ) {
     302                if( o == null )
     303                        return false
     304                if( !( o instanceof RelTime ) )
     305                        return false
     306               
     307                RelTime rt = (RelTime) o;
     308               
     309                return rt.reltimeValue == this.reltimeValue;
     310        }
     311       
     312        public int compareTo( Object o ) throws ClassCastException {
     313                if( o == null || !( o instanceof RelTime ) )
     314                        throw new ClassCastException( "Can't cast object " + o + " of class " + o.class.getName() + " to RelTime for comparison.")
     315               
     316                RelTime rt = (RelTime) o;
     317               
     318                return rt.reltimeValue <=> this.reltimeValue;
     319        }
    303320}
  • trunk/grails-app/views/advancedQuery/index.gsp

    r1415 r1424  
    1313<form id="input_criteria">
    1414        <h2>Add criterium</h2>
     15        <p>
     16                N.B. Comparing numerical values is done without taking into
     17                account the units. E.g. a weight of 1 kg equals 1 grams.
     18        </p>
    1519        <label for="field">Field</label>
    1620                <select name="field">
     
    2731                </select>
    2832               
     33        <label for="value">Comparison</label>
     34                <select name="operator">
     35                        <option value="equals">Equals</option>
     36                        <option value="contains">Contains</option>
     37                        <option value="&gt;=">Greater than or equals</option>
     38                        <option value="&gt;">Greater than</option>
     39                        <option value="&lt;">Lower than</option>
     40                        <option value="&lt;=">Lower than or equals</option>
     41                </select>
     42
    2943        <label for="value">Value</label>
    3044                <input class='text' type="text" name="value" />
  • trunk/grails-app/views/advancedQuery/results.gsp

    r1415 r1424  
    1515</p>
    1616<ul id="criteria">
    17         <g:each in="${search.getCriteria()}" var="criterium">
     17        <g:each in="${search.getCriteria()}" var="criterion">
    1818                <li>
    19                         <span class="entityfield">${criterium.entityfield}</span>
    20                         <span class="operator">${criterium.operator}</span>
    21                         <span class="value">${criterium.value}</span>
     19                        <span class="entityfield">${criterion.entity}.${criterion.field}</span>
     20                        <span class="operator">${criterion.operator}</span>
     21                        <span class="value">${criterion.value}</span>
    2222                </li>
    2323        </g:each>
  • trunk/grails-app/views/advancedQuery/studyresults.gsp

    r1415 r1424  
    1515</p>
    1616<ul id="criteria">
    17         <g:each in="${search.getCriteria()}" var="criterium">
     17        <g:each in="${search.getCriteria()}" var="criterion">
    1818                <li>
    19                         <span class="entityfield">${criterium.entityfield}</span>
    20                         <span class="operator">${criterium.operator}</span>
    21                         <span class="value">${criterium.value}</span>
     19                        <span class="entityfield">${criterion.entity}.${criterion.field}</span>
     20                        <span class="operator">${criterion.operator}</span>
     21                        <span class="value">${criterion.value}</span>
    2222                </li>
    2323        </g:each>
Note: See TracChangeset for help on using the changeset viewer.