Changeset 381


Ignore:
Timestamp:
Apr 26, 2010, 3:50:22 PM (13 years ago)
Author:
duh
Message:
  • null bugfix
  • improved template field handling
Location:
trunk/grails-app
Files:
3 edited

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>
Note: See TracChangeset for help on using the changeset viewer.