Changeset 189


Ignore:
Timestamp:
Feb 10, 2010, 5:35:11 PM (8 years ago)
Author:
duh
Message:
  • previous commits broke application bootstrapping:
    • fixed some domain classes where nullable and / or blank were not correctly implemented
    • commented out the PPSH study which is still buggy
  • improved wizard data handeling, error reporting and javascript
Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/conf/BootStrap.groovy

    r188 r189  
    3131                        ).with { if (!validate()) { errors.each { println it} } else save()}
    3232
    33 
    3433                        def humanBodyOntology = new Ontology(
    3534                                name: 'Foundational Model of Anatomy',
     
    6766                                accession: 'P-MDMXGE-264'
    6867                        ).with { if (!validate()) { errors.each { println it} } else save()}
    69 
    70 
    7168
    7269                        def treatmentProtocol = new Protocol(
     
    158155                        .addToSubjectFields(new TemplateSubjectField(
    159156                                name: 'Cage',type: TemplateFieldType.INTEGER))
     157                        .addToSubjectFields(new TemplateSubjectField(
     158                                name: 'Some float', type: TemplateFieldType.FLOAT))
     159                        .addToSubjectFields(new TemplateSubjectField(
     160                                name: 'Some ontology', type: TemplateFieldType.ONTOLOGYTERM))
    160161                        .with { if (!validate()) { errors.each { println it} } else save()}
    161162
     
    238239                        }
    239240
    240 
     241/*
    241242                        println 'Adding PPSH study...'
    242243
    243                         def humanStudy = new Study(
     244            def humanStudy = new Study(
    244245                                title:"NuGO PPS human study",
    245246                                code:"PPSH",
     
    355356                        humanStudy.addToAssays(lipidAssayRef);
    356357                        humanStudy.save()
    357 
     358*/
    358359                }
    359 
    360360        }
    361361
  • trunk/grails-app/controllers/dbnp/studycapturing/WizardController.groovy

    r183 r189  
    6767                }
    6868
    69                 // render the study page and handle study logic
     69                // render and handle the study page
    7070                study {
    7171                        render(view: "_study")
     
    100100                }
    101101
    102                 // render page two
     102                // render and handle subjects page
    103103                subjects {
    104104                        render(view: "_subjects")
     
    146146                }
    147147
     148                // render and handle group page
    148149                groups {
    149150                        render(view: "_groups")
     
    190191                        return false
    191192                } else {
     193                        def names = new LinkedHashMap();
    192194                        def errors = false;
    193195                        def id = 0;
     196
     197                        // iterate through subjects
    194198                        flow.subjects.each() {
    195199                                // store subject properties
     200                                def name = params.get('subject_' + id + '_name')
    196201                                it.name = params.get('subject_' + id + '_name')
    197202                                it.species = Term.findByName(params.get('subject_' + id + '_species'))
    198203
     204                                // remember name and check for duplicates
     205                                if (!names[ it.name ]) {
     206                                        names[ it.name ] = [count: 1, first: 'subject_' + id + '_name']
     207                                } else {
     208                                        // duplicate name found, set error flag
     209                                        names[ it.name ]['count']++
     210
     211                                        // second occurence?
     212                                        if (names[ it.name ]['count'] == 2) {
     213                                                // yeah, also mention the first
     214                                                // occurrence in the error message
     215                                                this.appendErrorMap([[names[ it.name ]['first']]: 'The subject name needs to be unique!'], flash.errors)
     216                                        }
     217
     218                                        // add to error map
     219                                        this.appendErrorMap([['subject_' + id + '_name']: 'The subject name needs to be unique!'], flash.errors)
     220                                        errors = true
     221                                }
     222
    199223                                // clear lists
    200                                 def stringList = new LinkedHashMap();
    201                                 def intList = new LinkedHashMap();
     224                                def stringList  = new LinkedHashMap();
     225                                def intList             = new LinkedHashMap();
     226                                def floatList   = new LinkedHashMap();
     227                                def termList    = new LinkedHashMap();
    202228
    203229                                // get all template fields
    204230                                flow.study.template.subjectFields.each() {
     231                                        // valid type?
     232                                        if (!it.type) throw new NoSuchFieldException("Field name ${fieldName} not recognized")
     233
    205234                                        // get value
    206235                                        def value = params.get('subject_' + id + '_' + it.name);
    207 
    208236                                        if (value) {
    209237                                                // add to template parameters
    210238                                                switch (it.type) {
    211239                                                        case 'STRINGLIST':
    212                                                                 stringList[it.name] = value
     240                                                                stringList[it.name]     = value
    213241                                                                break;
    214242                                                        case 'INTEGER':
    215                                                                 intList[it.name] = value
     243                                                                intList[it.name]        = value
     244                                                                break;
     245                                                        case 'FLOAT':
     246                                                                floatList[it.name]      = value
    216247                                                                break;
    217248                                                        default:
    218249                                                                // unsupported type?
    219                                                                 println "ERROR: unsupported type: " + it.type
     250                                                                throw new NoSuchFieldException("Field type ${it.type} not recognized")
    220251                                                                break;
    221252                                                }
     
    224255
    225256                                // set field data
    226                                 it.templateStringFields = stringList
    227                                 it.templateIntegerFields = intList
     257                                it.templateStringFields         = stringList
     258                                it.templateIntegerFields        = intList
     259                                it.templateFloatFields          = floatList
     260                                it.templateTermFields           = termList
    228261
    229262                                // validate subject
  • trunk/grails-app/domain/dbnp/clinicaldata/ClinicalAssay.groovy

    r186 r189  
    11package dbnp.clinicaldata
    2 
     2/**
     3 * class description
     4 *
     5 * Revision information:
     6 * $Rev$
     7 * $Author$
     8 * $Date$
     9 */
    310class ClinicalAssay {
    411
  • trunk/grails-app/domain/dbnp/studycapturing/EventDescription.groovy

    r186 r189  
    77 * For the moment, EventDescription is not linked to a specific study or user.
    88 * This means that the user can add events of all possible event types as defined by the (global) EventDescription collection.
     9 *
     10 * Revision information:
     11 * $Rev$
     12 * $Author$
     13 * $Date$
    914 */
    10 class EventDescription {
    11 
     15class EventDescription implements Serializable {
    1216        String name
    1317        String description
     
    1721
    1822        static constraints = {
    19                 classification(nullable: true)
     23                classification(nullable: true, blank: true)
    2024        }
    21 
    2225}
  • trunk/grails-app/domain/dbnp/studycapturing/Protocol.groovy

    r186 r189  
    88 * For the moment, there is one global Protocol store. From user experience, it should become clear if this store
    99 * has to remain global or should be bound to specific templates, users, user groups or even studies.
     10 *
     11 * Revision information:
     12 * $Rev$
     13 * $Author$
     14 * $Date$
    1015 */
    11 class Protocol {
    12 
     16class Protocol implements Serializable {
    1317    String name
    1418    Term   reference
     
    1620    static hasMany = [parameters : ProtocolParameter, compounds: Compound]
    1721    static constraints = {
    18         reference(nullable: true)
     22        reference(nullable: true, blank: true)
    1923    }
    20 
    21 
    2224}
  • trunk/grails-app/domain/dbnp/studycapturing/Study.groovy

    r188 r189  
    2929                        samplingEvents: SamplingEvent,
    3030                        assays: Assay,
    31                         persons: StudyPerson,
    32                         publications: Publication
     31            persons: StudyPerson,
     32            publications: Publication
    3333        ]
    3434
  • trunk/grails-app/taglib/dbnp/studycapturing/WizardTagLib.groovy

    r180 r189  
    4242         * @see http://www.grails.org/Tag+-+submitToRemote
    4343         * @todo perhaps some methods should be moved to a more generic
    44          *        'webflow' taglib
     44         *        'webflow' taglib or plugin
    4545         * @param Map attributes
    4646         * @param Closure body
     
    357357                def intFields           = subject.templateIntegerFields
    358358                def stringFields        = subject.templateStringFields
     359                def floatFields         = subject.templateFloatFields
     360                def termFields          = subject.templateTermFields
    359361
    360362                // output columns for these subjectFields
     
    383385                                        )
    384386                                        break;
     387                                case 'FLOAT':
     388                                        // render float subjectfield
     389                                        out << textField(
     390                                                name: attrs.name + '_' + it.name,
     391                                                value: (floatFields) ? floatFields.get(it.name) : ''
     392                                        )
     393                                        break;
    385394                                default:
    386395                                        // unsupported field type
    387                                         out << '<span class="error">unsuported type '+it.type+'</span>'
     396                                        out << '<span class="error">!'+it.type+'</span>'
    388397                                        break;
    389398                        }
  • trunk/web-app/js/grouping.js

    r180 r189  
    1414function Grouping() {
    1515}
    16 /*
    1716Grouping.prototype = {
    1817    itemsIdentifier:    null,
     
    3332
    3433    initItems: function() {
    35         $(this.itemsIdentifier).
     34        //$(this.itemsIdentifier).
    3635    }
    3736}
    38 */
     37/*
    3938
    4039Grouping.prototype = {
     
    156155    }
    157156}
    158 
     157*/
  • trunk/web-app/js/wizard.js

    r178 r189  
    3232// @see _wizard.gsp, _navigation.gsp, _subjects.gsp
    3333function onWizardPage() {
     34    // GENERAL
    3435    attachHelpTooltips();
    3536    attachDatePickers();
    3637
    37     // SUBJECTS
     38    // SUBJECT PAGE
    3839    attachTableEvents();
    3940    resizeWizardTable();
     
    4142    new TableEditor().init('div.table','div.row','div.column');
    4243   
    43     // GROUPING
     44    // GROUPING PAGE
    4445    new Grouping().init('div.subjects', 'div.subject', 'div.groups', 'div.group');
    4546}
Note: See TracChangeset for help on using the changeset viewer.