Changeset 381

Show
Ignore:
Timestamp:
26-04-10 15:50:22 (4 years ago)
Author:
duh
Message:

- null bugfix
- improved template field handling

Location:
trunk/grails-app
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/domain/dbnp/studycapturing/TemplateEntity.groovy

    r375 r381  
    302302                                // Set the value of the found template field 
    303303                                // Convenience setter for template string list fields: find TemplateFieldListItem by name 
    304                                 if (field.type == TemplateFieldType.STRINGLIST && value.class == String) { 
     304                                if (field.type == TemplateFieldType.STRINGLIST && value && value.class == String) { 
    305305                                        // Kees insensitive pattern matching ;) 
    306306                                        value = field.listEntries.find { it.name ==~ /(?i)($value)/ } 
  • trunk/grails-app/taglib/dbnp/studycapturing/WizardTagLib.groovy

    r374 r381  
    209209         */ 
    210210        def baseElement = {inputElement, attrs, help -> 
     211println "rendering " + inputElement + " with name " + attrs.get('name') 
    211212                // work variables 
    212213                def description = attrs.remove('description') 
     
    661662        } 
    662663 
    663         /** 
    664          * render table input elements for all subjectFields in a template 
    665          * @param Map attributes 
    666          */ 
    667         def templateColumns = {attrs, body -> 
    668                 def subject = attrs.remove('subject') 
    669                 def subjectId = attrs.remove('id') 
    670                 def template = attrs.remove('template') 
    671                 def intFields = subject.templateIntegerFields 
    672                 def stringFields = subject.templateStringFields 
    673                 def floatFields = subject.templateFloatFields 
    674                 def termFields = subject.templateTermFields 
    675  
    676                 // output columns for these subjectFields 
    677                 template.fields.each() { 
    678                         def fieldValue = subject.getFieldValue(it.name) 
    679  
    680                         // output div 
    681                         out << '<div class="' + attrs.get('class') + '">' 
    682  
    683                         // handle field types 
    684                         switch (it.type.toString()) { 
    685                                 case ['STRING', 'TEXT', 'INTEGER', 'FLOAT', 'DOUBLE']: 
    686                                         out << textField( 
    687                                                 name: attrs.name + '_' + it.escapedName(), 
    688                                                 value: fieldValue 
    689                                         ) 
    690                                         break 
    691                                 case 'STRINGLIST': 
    692                                         // render stringlist subjectfield 
    693                                         if (!it.listEntries.isEmpty()) { 
    694                                                 out << select( 
    695                                                         name: attrs.name + '_' + it.escapedName(), 
    696                                                         from: it.listEntries, 
    697                                                         value: fieldValue 
    698                                                 ) 
    699                                         } else { 
    700                                                 out << '<span class="warning">no values!!</span>' 
    701                                         } 
    702                                         break 
    703                                 case 'DATE': 
    704                                         // transform value? 
    705                                         if (fieldValue instanceof Date) { 
    706                                                 if (fieldValue.getHours() == 0 && fieldValue.getMinutes() == 0) { 
    707                                                         // transform date instance to formatted string (dd/mm/yyyy) 
    708                                                         fieldValue = String.format('%td/%<tm/%<tY', fieldValue) 
    709                                                 } else { 
    710                                                         // transform to date + time 
    711                                                         fieldValue = String.format('%td/%<tm/%<tY %<tH:%<tM', fieldValue) 
    712                                                 } 
    713                                         } 
    714  
    715                                         // output a date field (not the 'rel' which makes the 
    716                                         // javascript front-end bind the jquery-ui datepicker) 
    717                                         out << textField( 
    718                                                 name: attrs.name + '_' + it.escapedName(), 
    719                                                 value: fieldValue, 
    720                                                 rel: 'date' 
    721                                         ) 
    722                                         break 
    723                                 case 'ONTOLOGYTERM': 
    724                                         // @see http://www.bioontology.org/wiki/index.php/NCBO_Widgets#Term-selection_field_on_a_form 
    725                                         // @see ontology-chooser.js, table-editor.js 
    726                                         //out << it.getClass() 
    727                                         out << textField( 
    728                                                 name: attrs.name + '_' + it.escapedName(), 
    729                                                 value: fieldValue, 
    730                                                 rel: 'ontology-all-name', 
    731                                                 size: 100 
    732                                         ) 
    733                                         out << hiddenField( 
    734                                                 name: attrs.name + '_' + it.escapedName() + '-concept_id' 
    735                                         ) 
    736                                         out << hiddenField( 
    737                                                 name: attrs.name + '_' + it.escapedName() + '-ontology_id' 
    738                                         ) 
    739                                         out << hiddenField( 
    740                                                 name: attrs.name + '_' + it.escapedName() + '-full_id' 
    741                                         ) 
    742                                         break 
    743                                 default: 
    744                                         // unsupported field type 
    745                                         out << '<span class="warning">!' + it.type + '</span>' 
    746                                         break 
    747                         } 
    748  
    749                         out << '</div>' 
    750                 } 
     664        def templateColumns = { attrs -> 
     665                // render template fields as columns 
     666                attrs.renderType = 'column' 
     667                out << renderTemplateFields(attrs) 
     668        } 
     669 
     670        def templateElements = { attrs -> 
     671                // render template fields as form elements 
     672                attrs.renderType = 'element' 
     673                out << renderTemplateFields(attrs) 
    751674        } 
    752675 
     
    756679         * @param String body 
    757680         */ 
    758         def templateElements = {attrs -> 
    759                 def entity = (attrs.get('entity')) 
    760                 def template = (entity && entity instanceof TemplateEntity) ? entity.template : null 
     681        def renderTemplateFields = { attrs -> 
     682                def renderType  = attrs.remove('renderType') 
     683                def entity              = (attrs.get('entity')) 
     684                def template    = (entity && entity instanceof TemplateEntity) ? entity.template : null 
     685                def inputElement= null 
    761686 
    762687                // got a template? 
     
    766691                                def fieldValue = entity.getFieldValue(it.name) 
    767692 
     693                                // output column opening element? 
     694                                if (renderType == 'column') { 
     695                                        out << '<div class="' + attrs.get('class') + '">' 
     696                                } 
     697 
    768698                                switch (it.type.toString()) { 
    769699                                        case ['STRING', 'TEXT', 'INTEGER', 'FLOAT', 'DOUBLE']: 
    770                                                 out << textFieldElement( 
     700                                                inputElement = (renderType == 'element') ? 'textFieldElement' : 'textField' 
     701                                                out << "$inputElement"( 
    771702                                                        description: it.name, 
    772703                                                        name: it.escapedName(), 
     
    775706                                                break 
    776707                                        case 'STRINGLIST': 
     708                                                inputElement = (renderType == 'element') ? 'selectElement' : 'select' 
    777709                                                if (!it.listEntries.isEmpty()) { 
    778                                                         out << selectElement( 
     710                                                        out << "$inputElement"( 
    779711                                                                description: it.name, 
    780712                                                                name: it.escapedName(), 
     
    789721                                                // @see http://www.bioontology.org/wiki/index.php/NCBO_Widgets#Term-selection_field_on_a_form 
    790722                                                // @see ontology-chooser.js 
    791                                                 out << textFieldElement( 
     723                                                inputElement = (renderType == 'element') ? 'textFieldElement' : 'textField' 
     724                                                out << "$inputElement"( 
    792725                                                        name: it.escapedName(), 
    793726                                                        value: fieldValue, 
     
    809742                                                break 
    810743                                        case 'DATE': 
    811                                                 out << dateElement( 
     744                                                inputElement = (renderType == 'element') ? 'dateElement' : 'textField' 
     745 
     746                                                // transform value? 
     747                                                if (fieldValue instanceof Date) { 
     748                                                        if (fieldValue.getHours() == 0 && fieldValue.getMinutes() == 0) { 
     749                                                                // transform date instance to formatted string (dd/mm/yyyy) 
     750                                                                fieldValue = String.format('%td/%<tm/%<tY', fieldValue) 
     751                                                        } else { 
     752                                                                // transform to date + time 
     753                                                                fieldValue = String.format('%td/%<tm/%<tY %<tH:%<tM', fieldValue) 
     754                                                        } 
     755                                                } 
     756 
     757                                                // render element 
     758                                                out << "$inputElement"( 
    812759                                                        description: it.name, 
    813760                                                        name: it.escapedName(), 
    814                                                         value: fieldValue 
     761                                                        value: fieldValue, 
     762                                                        rel: 'date' 
    815763                                                ) 
    816764                                                break 
    817765                                        default: 
    818                                                 out << "unkown field type '" + it.type + "'<br/>" 
     766                                                // unsupported field type 
     767                                                out << '<span class="warning">!' + it.type + '</span>' 
    819768                                                break 
    820769                                } 
     770 
     771                                // output column closing element? 
     772                                if (renderType == 'column') { 
     773                                        out << '</div>' 
     774                                } 
    821775                        } 
    822776                } 
  • trunk/grails-app/views/wizard/pages/_subjects.gsp

    r367 r381  
    5757                                        <wizard:termSelect value="${subjects[ subjectId ].species}" name="subject_${subjectId}_species" ontology="1132" /> 
    5858                                </div> 
    59                                 <wizard:templateColumns id="${subjectId}" template="${subjects[ subjectId ].template}" name="subject_${subjectId}" class="column" subject="${subjects[ subjectId ]}" />                          
     59                                <wizard:templateColumns id="${subjectId}" entity="${subjects[ subjectId ]}" template="${subjects[ subjectId ].template}" name="subject_${subjectId}" class="column" subject="${subjects[ subjectId ]}" />                                
    6060                        </div> 
    6161                </g:each>