Changeset 550


Ignore:
Timestamp:
Jun 10, 2010, 1:33:37 AM (9 years ago)
Author:
keesvb
Message:

added entity property to TemplateField?; added validator to Template to ensure fields are of the correct entity, updated BootStrap? accordingly, updated tests accordingly

Location:
trunk
Files:
8 edited

Legend:

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

    r536 r550  
    44import dbnp.data.Term
    55import org.codehaus.groovy.grails.commons.GrailsApplication
     6import grails.util.GrailsUtil
    67
    78/**
     
    145146
    146147                        // Create 30 persons to test pagination
    147                         def personCounter = 1;
    148                         30.times { new Person( firstName: "Person #${personCounter}", lastName: "Testperson", email: "email${personCounter++}@testdomain.com" ).save() }
     148                        if (GrailsUtil.environment == GrailsApplication.ENV_DEVELOPMENT) {
     149                                def personCounter = 1;
     150                                30.times { new Person( firstName: "Person #${personCounter}", lastName: "Testperson", email: "email${personCounter++}@testdomain.com" ).save() }
     151                        }
    149152
    150153                        // Create a few publications
     
    171174
    172175                        def genderField = new TemplateField(
    173                                 name: 'Gender',type: TemplateFieldType.STRINGLIST,
     176                                name: 'Gender',type: TemplateFieldType.STRINGLIST, entity: Subject,
    174177                                listEntries: [new TemplateFieldListItem(name:'Male'),new TemplateFieldListItem(name: 'Female'),new TemplateFieldListItem(name: 'Unknown')])
    175178                        .with { if (!validate()) { errors.each { println it} } else save()}
    176179
    177180                        def ageField = new TemplateField(
    178                                 name: 'Age',type: TemplateFieldType.INTEGER,unit: 'years',comment: 'Either include age at the start of the study or date of birth (if known)')
     181                                name: 'Age',type: TemplateFieldType.INTEGER,entity: Subject,unit: 'years',comment: 'Either include age at the start of the study or date of birth (if known)')
    179182                        .with { if (!validate()) { errors.each { println it} } else save()}
    180183
    181184                        def genotypeField = new TemplateField(
    182                                 name: 'Genotype', type: TemplateFieldType.STRING,
     185                                name: 'Genotype', type: TemplateFieldType.STRING,entity: Subject,
    183186                                comment: 'If present, indicate the genetic variance of the subject (e.g., mutagenized populations,knock-out/in,transgene etc)')
    184187                        .with { if (!validate()) { errors.each { println it} } else save()}
    185188
    186189                def genotypeTypeField = new TemplateField(
    187                                 name: 'Genotype type',type: TemplateFieldType.STRINGLIST,
     190                                name: 'Genotype type',type: TemplateFieldType.STRINGLIST,entity: Subject,
    188191                                listEntries: [new TemplateFieldListItem(name:'wildtype'),
    189192                                        new TemplateFieldListItem(name:'transgenic'),
     
    194197
    195198                def varietyField = new TemplateField(
    196                                 name: 'Variety', type: TemplateFieldType.STRING,
     199                                name: 'Variety', type: TemplateFieldType.STRING,entity: Subject,
    197200                        comment: 'taxonomic category consisting of members of a species that differ from others of the same species in minor but heritable characteristics')
    198201                        .with { if (!validate()) { errors.each { println it} } else save()}
    199202
    200203                        def ecotypeField = new TemplateField(
    201                         name: 'Ecotype', type: TemplateFieldType.STRING,
     204                        name: 'Ecotype', type: TemplateFieldType.STRING,entity: Subject,
    202205                        comment: 'a type or subspecies of life that is especially well adapted to a certain environment'
    203206                        )
     
    211214                                entity: dbnp.studycapturing.Study
    212215                        )
    213                         .addToFields(new TemplateField(name: 'Description',type: TemplateFieldType.TEXT,comment:'Describe here the type of subjects and the treatment, challenges and sampling.'))
     216                        .addToFields(new TemplateField(name: 'Description',type: TemplateFieldType.TEXT, entity: Study,comment:'Describe here the type of subjects and the treatment, challenges and sampling.'))
    214217                        .addToFields(new TemplateField(
    215218                                name: 'Study code',
    216219                                type: TemplateFieldType.STRING,
     220                entity: Study,
    217221                                preferredIdentifier:true,
    218222                                comment: 'Fill out the code by which many people will recognize your study')
    219223                        )
    220                         .addToFields(new TemplateField(name: 'Objectives',type: TemplateFieldType.TEXT,comment:'Fill out the aim or questions of the study'))
    221                         .addToFields(new TemplateField(name: 'Consortium',type: TemplateFieldType.STRING,comment:'If the study was performed within a consortium (e.g. NMC, NuGO), you can indicate this here'))
    222                         .addToFields(new TemplateField(name: 'Cohort name',type: TemplateFieldType.STRING,comment:'If a cohort was used the name or code of the cohort can be define here (define a cohort template)'))
    223                         //.addToFields(new TemplateField(name: 'Time zone',type: TemplateFieldType.STRING,comment:'In the database the local time will be stored. This field is essential to be able to generalize time.'))
    224                         .addToFields(new TemplateField(name: 'Responsible scientist',type: TemplateFieldType.STRING,comment:'Fill out the project leader of principle investigator of the study. (soon to be replaced with persons input)'))
    225                         .addToFields(new TemplateField(name: 'Lab id',type: TemplateFieldType.STRING,comment:'In which lab was the study performed; indicate the roomnumber.'))
    226                         .addToFields(new TemplateField(name: 'Institute',type: TemplateFieldType.STRING,comment:'In which institute was the study performed; indicate the full address information (to be replaced by persons-affiliations?)'))
    227                         //commented out because of bug #84:.addToFields(new TemplateField(name: 'Study protocol',type: TemplateFieldType.FILE,comment:'Optionally attach a file in which the protocol in the study is described'))
     224                        .addToFields(new TemplateField(name: 'Objectives',type: TemplateFieldType.TEXT,entity: Study,comment:'Fill out the aim or questions of the study'))
     225                        .addToFields(new TemplateField(name: 'Consortium',type: TemplateFieldType.STRING,entity: Study,comment:'If the study was performed within a consortium (e.g. NMC, NuGO), you can indicate this here'))
     226                        .addToFields(new TemplateField(name: 'Cohort name',type: TemplateFieldType.STRING,entity: Study,comment:'If a cohort was used the name or code of the cohort can be define here (define a cohort template)'))
     227                        .addToFields(new TemplateField(name: 'Lab id',type: TemplateFieldType.STRING,entity: Study,comment:'In which lab was the study performed; indicate the roomnumber.'))
     228                        .addToFields(new TemplateField(name: 'Institute',type: TemplateFieldType.STRING,entity: Study,comment:'In which institute was the study performed; indicate the full address information (to be replaced by persons-affiliations?)'))
     229                        .addToFields(new TemplateField(name: 'Study protocol',type: TemplateFieldType.FILE,entity: Study,comment:'Optionally attach a file in which the protocol in the study is described'))
    228230                        .with { if (!validate()) { errors.each { println it} } else save()}
    229231
     
    233235                                name: 'Mouse', entity: dbnp.studycapturing.Subject)
    234236                        .addToFields(new TemplateField(
    235                                 name: 'Strain', type: TemplateFieldType.ONTOLOGYTERM, ontologies: [nciOntology], comment: "This is an ontology term, if the right strain is not in the list please add it with 'add more'"))
     237                                name: 'Strain', type: TemplateFieldType.ONTOLOGYTERM, ontologies: [nciOntology], entity: Subject, comment: "This is an ontology term, if the right strain is not in the list please add it with 'add more'"))
    236238                        .addToFields(genotypeField)
    237239                        .addToFields(genotypeTypeField)
    238240                        .addToFields(genderField)
    239241                        .addToFields(new TemplateField(
    240                                 name: 'Age', type: TemplateFieldType.INTEGER, unit: 'weeks', comment: 'Age at start of study'))
    241                         .addToFields(new TemplateField(
    242                                 name: 'Age type',type: TemplateFieldType.STRINGLIST,
     242                                name: 'Age', type: TemplateFieldType.INTEGER, entity: Subject, unit: 'weeks', comment: 'Age at start of study'))
     243                        .addToFields(new TemplateField(
     244                                name: 'Age type',type: TemplateFieldType.STRINGLIST,entity: Subject,
    243245                                listEntries: [new TemplateFieldListItem(name:'postnatal'),new TemplateFieldListItem(name:'embryonal')]))
    244246                        .addToFields(new TemplateField(
    245                                 name: 'Cage',type: TemplateFieldType.STRING,comment:'Indicate the cage used for housing (type and/or size)'))
    246                         .addToFields(new TemplateField(
    247                                 name: '#Mice in cage',type: TemplateFieldType.INTEGER,comment:'If known, indicate the number of mice per cage'))
    248                         .addToFields(new TemplateField(
    249                                 name: 'Litter size',type: TemplateFieldType.INTEGER,comment:'If known, indicate the litter size of the litter from which the subject originates'))
    250                         .addToFields(new TemplateField(
    251                                 name: 'Weight', type: TemplateFieldType.DOUBLE, unit: 'gram',comment:'If known indicate the weight of the subject in grams at the start of the study'))
     247                                name: 'Cage',type: TemplateFieldType.STRING,entity: Subject,comment:'Indicate the cage used for housing (type and/or size)'))
     248                        .addToFields(new TemplateField(
     249                                name: '#Mice in cage',type: TemplateFieldType.INTEGER,entity: Subject,comment:'If known, indicate the number of mice per cage'))
     250                        .addToFields(new TemplateField(
     251                                name: 'Litter size',type: TemplateFieldType.INTEGER,entity: Subject,comment:'If known, indicate the litter size of the litter from which the subject originates'))
     252                        .addToFields(new TemplateField(
     253                                name: 'Weight', type: TemplateFieldType.DOUBLE, unit: 'gram',entity: Subject,comment:'If known indicate the weight of the subject in grams at the start of the study'))
    252254                        .with { if (!validate()) { errors.each { println it} } else save()}
    253255
     
    259261                        .addToFields(ageField)
    260262                        .addToFields(new TemplateField(
    261                                 name: 'DOB',type: TemplateFieldType.DATE,comment:'Date of birth'))
    262                         .addToFields(new TemplateField(
    263                                 name: 'Height',type: TemplateFieldType.DOUBLE, unit: 'm'))
    264                         .addToFields(new TemplateField(
    265                                 name: 'Weight',type: TemplateFieldType.DOUBLE, unit: 'kg'))
    266                         .addToFields(new TemplateField(
    267                                 name: 'BMI',type: TemplateFieldType.DOUBLE, unit: 'kg/m2',comment:'Body-mass-index'))
    268                         .addToFields(new TemplateField(
    269                                 name: 'Race',type: TemplateFieldType.STRING,comment:'If known and of interest the ethnic group can be indicated'))
    270                         .addToFields(new TemplateField(
    271                                 name: 'Waist circumference',type: TemplateFieldType.FLOAT, unit: 'cm',comment:'The waist circumference is measured just above the hip bone. Indicate the measure at the start of the study.'))
    272                         .addToFields(new TemplateField(
    273                                 name: 'Hip circumference',type: TemplateFieldType.FLOAT, unit: 'cm',comment:'The hip circumference is measured at the level of the two bony prominences front of the hips. Indicate the measure at the start of the study.'))
    274                         .addToFields(new TemplateField(
    275                                 name: 'Systolic blood pressure',type: TemplateFieldType.FLOAT, unit: 'mmHg',comment:'Indicate the levels at the start of the study in mmHG'))
    276                         .addToFields(new TemplateField(
    277                                 name: 'Diastolic blood pressure',type: TemplateFieldType.FLOAT, unit: 'mmHg',comment:'Indicate the levels at the start of the study in mmHG'))
    278                         .addToFields(new TemplateField(
    279                                 name: 'Heart rate',type: TemplateFieldType.FLOAT, unit: 'beats/min',comment:'Indicate the heart rate at the start of in study in beats per minute'))
    280                         .addToFields(new TemplateField(
    281                                 name: 'Run-in-food',type: TemplateFieldType.TEXT,comment:'If defined, give a short description of the food used before the measurements'))
     263                                name: 'DOB',type: TemplateFieldType.DATE,entity: Subject,comment:'Date of birth'))
     264                        .addToFields(new TemplateField(
     265                                name: 'Height',type: TemplateFieldType.DOUBLE, entity: Subject, unit: 'm'))
     266                        .addToFields(new TemplateField(
     267                                name: 'Weight',type: TemplateFieldType.DOUBLE, entity: Subject, unit: 'kg'))
     268                        .addToFields(new TemplateField(
     269                                name: 'BMI',type: TemplateFieldType.DOUBLE, entity: Subject, unit: 'kg/m2',comment:'Body-mass-index'))
     270                        .addToFields(new TemplateField(
     271                                name: 'Race',type: TemplateFieldType.STRING,entity: Subject, comment:'If known and of interest the ethnic group can be indicated'))
     272                        .addToFields(new TemplateField(
     273                                name: 'Waist circumference',type: TemplateFieldType.FLOAT, unit: 'cm',entity: Subject, comment:'The waist circumference is measured just above the hip bone. Indicate the measure at the start of the study.'))
     274                        .addToFields(new TemplateField(
     275                                name: 'Hip circumference',type: TemplateFieldType.FLOAT, unit: 'cm',entity: Subject, comment:'The hip circumference is measured at the level of the two bony prominences front of the hips. Indicate the measure at the start of the study.'))
     276                        .addToFields(new TemplateField(
     277                                name: 'Systolic blood pressure',type: TemplateFieldType.FLOAT, unit: 'mmHg',entity: Subject, comment:'Indicate the levels at the start of the study in mmHG'))
     278                        .addToFields(new TemplateField(
     279                                name: 'Diastolic blood pressure',type: TemplateFieldType.FLOAT, unit: 'mmHg',entity: Subject, comment:'Indicate the levels at the start of the study in mmHG'))
     280                        .addToFields(new TemplateField(
     281                                name: 'Heart rate',type: TemplateFieldType.FLOAT, unit: 'beats/min',entity: Subject, comment:'Indicate the heart rate at the start of in study in beats per minute'))
     282                        .addToFields(new TemplateField(
     283                                name: 'Run-in-food',type: TemplateFieldType.TEXT,entity: Subject, comment:'If defined, give a short description of the food used before the measurements'))
    282284                        .with { if (!validate()) { errors.each { println it} } else save()}
    283285
     
    285287                        def sampleRemarksField = new TemplateField(
    286288                                name: 'Remarks',
    287                                 type: TemplateFieldType.TEXT
     289                                type: TemplateFieldType.TEXT,
     290                entity: Sample
    288291                        )
    289292                        .with { if (!validate()) { errors.each { println it} } else save()}
     
    292295                        def sampleVialTextField = new TemplateField(
    293296                                name: 'Text on vial',
    294                                 type: TemplateFieldType.STRING
     297                                type: TemplateFieldType.STRING,
     298                entity: Sample
    295299                        )
    296300                        .with { if (!validate()) { errors.each { println it} } else save()}
     
    308312                        name: 'Sample measured weight',
    309313                        unit: 'mg',
    310                         type: TemplateFieldType.FLOAT
     314                        type: TemplateFieldType.FLOAT,
     315                    entity: Sample
    311316                                )
    312317                        )
     
    325330                        name: 'Sample measured volume',
    326331                        unit: 'ml',
    327                         type: TemplateFieldType.FLOAT
     332                        type: TemplateFieldType.FLOAT,
     333                                        entity: Sample
    328334                                )
    329335                        )
     
    377383                                        name: 'Chamber no.',
    378384                                        type: TemplateFieldType.STRING,
     385                                        entity: Subject,
    379386                                        comment: 'Chamber number in the Greenhouse'
    380387                                )
     
    383390                                new TemplateField(
    384391                                        name: 'Growth type',
     392                                        entity: Subject,
    385393                                        type: TemplateFieldType.STRINGLIST,
    386394                                        listEntries: [
     
    392400                        )
    393401                        .addToFields(new TemplateField(
    394                                 name: 'Growth protocol', type: TemplateFieldType.TEXT))
     402                                name: 'Growth protocol', entity: Subject, type: TemplateFieldType.TEXT))
    395403                .addToFields(new TemplateField(
    396                                 name: 'Position X', type: TemplateFieldType.FLOAT))
    397                         .addToFields(new TemplateField(
    398                                 name: 'Position Y', type: TemplateFieldType.FLOAT))
    399                         .addToFields(new TemplateField(
    400                                 name: 'Block', type: TemplateFieldType.STRING))
    401                         .addToFields(new TemplateField(
    402                                 name: 'Temperature at day', type: TemplateFieldType.FLOAT))
    403                         .addToFields(new TemplateField(
    404                                 name: 'Temperature at night', type: TemplateFieldType.FLOAT))
    405                         .addToFields(new TemplateField(
    406                                 name: 'Photo period', type: TemplateFieldType.STRING))
    407                         .addToFields(new TemplateField(
    408                                 name: 'Light intensity', type: TemplateFieldType.STRING))
    409                         .addToFields(new TemplateField(
    410                                 name: 'Start date', type: TemplateFieldType.DATE))
    411                         .addToFields(new TemplateField(
    412                                 name: 'Harvest date', type: TemplateFieldType.DATE))
    413                         .addToFields(new TemplateField(
    414                                 name: 'Harvest delay', type: TemplateFieldType.TEXT))
    415                         .addToFields(new TemplateField(
    416                                 name: 'Additional info', type: TemplateFieldType.TEXT))
     404                                name: 'Position X', entity: Subject, type: TemplateFieldType.FLOAT))
     405                        .addToFields(new TemplateField(
     406                                name: 'Position Y', entity: Subject, type: TemplateFieldType.FLOAT))
     407                        .addToFields(new TemplateField(
     408                                name: 'Block', entity: Subject, type: TemplateFieldType.STRING))
     409                        .addToFields(new TemplateField(
     410                                name: 'Temperature at day', entity: Subject, type: TemplateFieldType.FLOAT))
     411                        .addToFields(new TemplateField(
     412                                name: 'Temperature at night', entity: Subject, type: TemplateFieldType.FLOAT))
     413                        .addToFields(new TemplateField(
     414                                name: 'Photo period', entity: Subject, type: TemplateFieldType.STRING))
     415                        .addToFields(new TemplateField(
     416                                name: 'Light intensity', entity: Subject, type: TemplateFieldType.STRING))
     417                        .addToFields(new TemplateField(
     418                                name: 'Start date', entity: Subject, type: TemplateFieldType.DATE))
     419                        .addToFields(new TemplateField(
     420                                name: 'Harvest date', entity: Subject, type: TemplateFieldType.DATE))
     421                        .addToFields(new TemplateField(
     422                                name: 'Harvest delay', entity: Subject, type: TemplateFieldType.TEXT))
     423                        .addToFields(new TemplateField(
     424                                name: 'Additional info', entity: Subject, type: TemplateFieldType.TEXT))
    417425                .with { if (!validate()) { errors.each { println it} } else save()}
    418426
     
    426434                        .addToFields(genotypeField)
    427435            .addToFields(new TemplateField(
    428                                 name: 'Start date', type: TemplateFieldType.DATE))
    429                         .addToFields(new TemplateField(
    430                                 name: 'Harvest date', type: TemplateFieldType.DATE))
    431                         .addToFields(new TemplateField(
    432                                 name: 'Growth type', type: TemplateFieldType.STRINGLIST,
     436                                name: 'Start date', entity: Subject, type: TemplateFieldType.DATE))
     437                        .addToFields(new TemplateField(
     438                                name: 'Harvest date', entity: Subject, type: TemplateFieldType.DATE))
     439                        .addToFields(new TemplateField(
     440                                name: 'Growth type', entity: Subject, type: TemplateFieldType.STRINGLIST,
    433441                                listEntries: [new TemplateFieldListItem(name:'Standard'),new TemplateFieldListItem(name: 'Experimental')]))
    434442                        .addToFields(new TemplateField(
    435                                 name: 'Growth protocol', type: TemplateFieldType.TEXT))
    436                         .addToFields(new TemplateField(
    437                                 name: 'Harvest delay', type: TemplateFieldType.TEXT))
     443                                name: 'Growth protocol', entity: Subject, type: TemplateFieldType.TEXT))
     444                        .addToFields(new TemplateField(
     445                                name: 'Harvest delay', entity: Subject, type: TemplateFieldType.TEXT))
    438446                .with { if (!validate()) { errors.each { println it} } else save()}
    439447
     
    461469                        */
    462470                        .addToFields(new TemplateField(
    463                                 name: 'Room', type: TemplateFieldType.STRING,
     471                                name: 'Room', type: TemplateFieldType.STRING, entity: Subject,
    464472                                comment: 'room number'))
    465473                        .addToFields(new TemplateField(
    466                                 name: 'Chamber no.', type: TemplateFieldType.STRING,
     474                                name: 'Chamber no.', type: TemplateFieldType.STRING, entity: Subject,
    467475                                comment: 'Chamber number'))
    468476                        .addToFields(new TemplateField(
    469                                 name: 'Block', type: TemplateFieldType.STRING))
    470                         .addToFields(new TemplateField(
    471                                 name: 'Position X', type: TemplateFieldType.FLOAT))
    472                         .addToFields(new TemplateField(
    473                                 name: 'Position Y', type: TemplateFieldType.FLOAT))
    474                         .addToFields(new TemplateField(
    475                                 name: 'Temperature at day', type: TemplateFieldType.FLOAT))
    476                         .addToFields(new TemplateField(
    477                                 name: 'Temperature at night', type: TemplateFieldType.FLOAT))
    478                         .addToFields(new TemplateField(
    479                                 name: 'Photo period', type: TemplateFieldType.STRING))
    480                         .addToFields(new TemplateField(
    481                                 name: 'Light intensity', type: TemplateFieldType.STRING))
    482                         .addToFields(new TemplateField(
    483                                 name: 'Start date', type: TemplateFieldType.DATE))
    484                         .addToFields(new TemplateField(
    485                                 name: 'Harvest date', type: TemplateFieldType.DATE))
    486                         .addToFields(new TemplateField(
    487                                 name: 'Growth type', type: TemplateFieldType.STRINGLIST,
     477                                name: 'Block', type: TemplateFieldType.STRING, entity: Subject))
     478                        .addToFields(new TemplateField(
     479                                name: 'Position X', type: TemplateFieldType.FLOAT, entity: Subject))
     480                        .addToFields(new TemplateField(
     481                                name: 'Position Y', type: TemplateFieldType.FLOAT, entity: Subject))
     482                        .addToFields(new TemplateField(
     483                                name: 'Temperature at day', type: TemplateFieldType.FLOAT, entity: Subject))
     484                        .addToFields(new TemplateField(
     485                                name: 'Temperature at night', type: TemplateFieldType.FLOAT, entity: Subject))
     486                        .addToFields(new TemplateField(
     487                                name: 'Photo period', type: TemplateFieldType.STRING, entity: Subject))
     488                        .addToFields(new TemplateField(
     489                                name: 'Light intensity', type: TemplateFieldType.STRING, entity: Subject))
     490                        .addToFields(new TemplateField(
     491                                name: 'Start date', type: TemplateFieldType.DATE, entity: Subject))
     492                        .addToFields(new TemplateField(
     493                                name: 'Harvest date', type: TemplateFieldType.DATE, entity: Subject))
     494                        .addToFields(new TemplateField(
     495                                name: 'Growth type', type: TemplateFieldType.STRINGLIST, entity: Subject,
    488496                                listEntries: [new TemplateFieldListItem(name:'Standard'),new TemplateFieldListItem(name: 'Experimental')]))
    489497                        .addToFields(new TemplateField(
    490                                 name: 'Growth protocol', type: TemplateFieldType.TEXT))
    491                         .addToFields(new TemplateField(
    492                                 name: 'Harvest delay', type: TemplateFieldType.TEXT))
     498                                name: 'Growth protocol', type: TemplateFieldType.TEXT, entity: Subject))
     499                        .addToFields(new TemplateField(
     500                                name: 'Harvest delay', type: TemplateFieldType.TEXT, entity: Subject))
    493501                        .with { if (!validate()) { errors.each { println it} } else save()}
    494502
     
    511519                                name: 'Tissue',
    512520                                type: TemplateFieldType.STRING,
     521                                entity: Event,
    513522                comment: 'organ/ fraction of culture/ plant part')
    514523                        )
     
    517526                                        name: 'Grinding',
    518527                                        type: TemplateFieldType.STRINGLIST,
     528                                        entity: Event,
    519529                        listEntries: [
    520530                                                new TemplateFieldListItem(name:'yes'),
     
    527537                                new TemplateField(
    528538                                        name: 'Storage location',
    529                                         type: TemplateFieldType.STRING
     539                                        type: TemplateFieldType.STRING,
     540                                        entity: Event
    530541                                )
    531542                        )
     
    533544                                new TemplateField(
    534545                                        name: 'protocol reference',
    535                                         type: TemplateFieldType.STRING
     546                                        type: TemplateFieldType.STRING,
     547                                        entity: Event
    536548                                )
    537549                        )
     
    541553                        println ".adding diet treatement template"
    542554                        def dietTreatmentTemplate = new Template(
    543                                 name: 'Diet treatment HF45/LF10',
     555                                name: 'Diet treatment',
    544556                                entity: dbnp.studycapturing.Event
    545557                        )
     
    548560                                        name: 'Diet',
    549561                                        type: TemplateFieldType.STRINGLIST,
     562                                        entity: Event,
    550563                                        listEntries: [
    551564                                                new TemplateFieldListItem(name:'10% fat (palm oil)'),
     
    566579                                        name: 'Compound',
    567580                                        type: TemplateFieldType.STRINGLIST,
     581                                        entity: Event,
    568582                                        listEntries: [
    569583                                                new TemplateFieldListItem(name:'Vehicle'),
     
    584598                                new TemplateField(
    585599                                        name: 'Fasting period',
    586                                         type: TemplateFieldType.STRING
     600                                        type: TemplateFieldType.STRING,
     601                                        entity: Event
    587602                                )
    588603                        )
     
    593608            def samplingProtocolField = new TemplateField(
    594609                name: 'Sample Protocol',
     610                    entity: SamplingEvent,
    595611                                type: TemplateFieldType.STRING
    596612                        )
     
    609625                                        name: 'Sample weight',
    610626                                        unit: 'mg',
     627                                        entity: SamplingEvent,
    611628                                        type: TemplateFieldType.FLOAT
    612629                                )
     
    625642                                new TemplateField(
    626643                                        name: 'Sample volume',
     644                                        entity: SamplingEvent,
    627645                                        unit: 'ml',
    628646                                        type: TemplateFieldType.FLOAT
     
    644662                                        name: 'Sample weight',
    645663                                        unit: 'ul',
     664                                        entity: SamplingEvent,
    646665                                        type: TemplateFieldType.FLOAT
    647666                                )
     
    651670                                        name: 'Sample when measured',
    652671                                        type: TemplateFieldType.STRINGLIST,
     672                                        entity: SamplingEvent,
    653673                        listEntries: [
    654674                                                 new TemplateFieldListItem(name:'Dried'),
     
    673693                                        name: 'material',
    674694                        comment: 'physical charecteristic. e.g, grounded powder of tomato seed or liquid',
     695                                        entity: SamplingEvent,
    675696                                        type: TemplateFieldType.STRING
    676697                                )
     
    679700                                new TemplateField(
    680701                                        name: 'Desription',
    681                                         type: TemplateFieldType.STRING
     702                                        type: TemplateFieldType.STRING,
     703                                        entity: SamplingEvent
    682704                                )
    683705                        )
     
    686708                                        name: 'extracted material',
    687709                                        comment: 'substance to be extracted. e.g., lipids, volatiles, primary metabolites etc',
    688                                         type: TemplateFieldType.STRING
     710                                        type: TemplateFieldType.STRING,
     711                                        entity: SamplingEvent
    689712                                )
    690713                        )
     
    692715                                new TemplateField(
    693716                                        name: 'Text on vial',
     717                                        entity: SamplingEvent,
    694718                                        type: TemplateFieldType.STRING
    695719                                )
  • trunk/grails-app/domain/dbnp/studycapturing/Template.groovy

    r540 r550  
    2121        static constraints = {
    2222                description(nullable: true, blank: true)
     23
     24                fields(validator: { fields, obj, errors ->
     25                        // 'obj' refers to the actual Template object
     26
     27                        // define a boolean
     28                        def error = false
     29
     30                        // iterate through fields
     31                        fields.each { field ->
     32                                // check if the field entity is the same as the template entity
     33                                if (!field.entity.equals(obj.entity)) {
     34                                        error = true
     35                                        errors.rejectValue(
     36                                                'fields',
     37                                                'templateEntity.entityMismatch',
     38                                                [field.name, obj.entity, field.entity] as Object[],
     39                                                'Template field {0} must be of entity {1} and is currently of entity {2}'
     40                                                )
     41                                }
     42                        }
     43
     44                        // got an error, or not?
     45                        return (!error)
     46                })
     47
    2348                // outcommented for now due to bug in Grails / Hibernate
    2449                // see http://jira.codehaus.org/browse/GRAILS-6020
  • trunk/grails-app/domain/dbnp/studycapturing/TemplateEntity.groovy

    r540 r550  
    518518                        // got a value?
    519519                        if (value) {
    520                                 println ".setting [" + ((super) ? super.class : '??') + "] domain field: [" + fieldName + "] ([" + value.toString() + "] of type [" + value.class + "])"
     520                                //debug message: println ".setting [" + ((super) ? super.class : '??') + "] domain field: [" + fieldName + "] ([" + value.toString() + "] of type [" + value.class + "])"
    521521
    522522                                // set value
    523523                                this[field.name] = value
    524524                        } else {
    525                                 println ".unsetting [" + ((super) ? super.class : '??') + "] domain field: [" + fieldName + "]"
     525                                //debug message: println ".unsetting [" + ((super) ? super.class : '??') + "] domain field: [" + fieldName + "]"
    526526
    527527                                // remove value. For numbers, this is done by setting
  • trunk/grails-app/domain/dbnp/studycapturing/TemplateField.groovy

    r540 r550  
    1414        String name
    1515        TemplateFieldType type
     16    Class entity
    1617        String unit
    1718        String comment // help string for the user interface
     
    2728        static constraints = {
    2829                // TODO: verify that TemplateField names are unique within templates of each super entity
     30                name(nullable: false, blank: false)
     31                type(nullable: false, blank: false)
     32                entity(nullable: false, blank: false)
    2933                unit(nullable: true, blank: true)
    3034                comment(nullable: true, blank: true)
  • trunk/grails-app/domain/dbnp/studycapturing/TemplateFieldType.groovy

    r540 r550  
    1919        RELTIME('Relative time'), // relative date, e.g. days since start of study
    2020        FILE('File')
     21    // TODO: add a timezone-aware date type to use for study start date
     22    // TODO: add a BOOLEAN type (checkbox)
    2123
    22         String name
     24    String name
    2325
    2426        TemplateFieldType(String name) {
  • trunk/test/unit/dbnp/studycapturing/FileServiceTests.groovy

    r507 r550  
    2929        // available in testcases
    3030        fileService.metaClass.getUploadDir = {
    31             return new File( 'D:/isdat/dbNP/Sources/gscf mei/web-app/fileuploads' );
     31            return new File( System.properties['base.dir'] + File.separator + 'web-app' + File.separator + 'fileuploads' );
    3232        }
    3333
  • trunk/test/unit/dbnp/studycapturing/TemplateEntityTests.groovy

    r536 r550  
    44
    55class TemplateEntityTests extends GrailsUnitTestCase {
    6    
    7     def testStudy;
    8     def eventTemplate1;
    9     def eventTemplate2;
    10     def sampleTemplate1;
    11     protected void setUp() {
    12         // We create a study with 2 events (with 2 different templates),
    13         // 2 samples with the same template + 1 sample without a template and
    14         // 2 subjects without a template
    15         // There are no sampling events
    16         super.setUp()
    176
    18         // Create the template itself
    19         eventTemplate1 = new Template(
    20                 name: 'Event Template 1',
    21                 entity: dbnp.studycapturing.Event,
    22                 fields: [
    23                     new TemplateField(
    24                         name: 'testStartDate',
    25                         type: TemplateFieldType.DATE
    26                     )
    27                 ]
    28             );
     7        def testStudy;
     8        def eventTemplate1;
     9        def eventTemplate2;
     10        def sampleTemplate1;
    2911
    30         // Create the template itself
    31         eventTemplate2 = new Template(
    32                 name: 'Event Template 2',
    33                 entity: dbnp.studycapturing.Event,
    34                 fields: [
    35                     new TemplateField(
    36                         name: 'testStartDate',
    37                         type: TemplateFieldType.RELTIME
    38                     )
    39                 ]
    40             );
     12        protected void setUp() {
     13                // We create a study with 2 events (with 2 different templates),
     14                // 2 samples with the same template + 1 sample without a template and
     15                // 2 subjects without a template
     16                // There are no sampling events
     17                super.setUp()
    4118
    42         // Create the template itself
    43         sampleTemplate1 = new Template(
    44                 name: 'Sample Template 1',
    45                 entity: dbnp.studycapturing.Event,
    46                 fields: [
    47                     new TemplateField(
    48                         name: 'testStartDate',
    49                         type: TemplateFieldType.RELTIME
    50                     )
    51                 ]
    52             );
     19                // Create the template itself
     20                eventTemplate1 = new Template(
     21                        name: 'Event Template 1',
     22                        entity: Event,
     23                        fields: [
     24                                new TemplateField(
     25                                        name: 'testStartDate',
     26                                        type: TemplateFieldType.DATE,
     27                                        entity: Event
     28                                )
     29                        ]
     30                );
    5331
    54         testStudy = new Study(
    55             title: 'Test study',
    56             events: [
    57                 new Event(
    58                     template: eventTemplate1,
    59                     startTime: 3600,
    60                     endTime: 7200
    61                 ),
    62                 new Event(
    63                     template: eventTemplate2,
    64                     startTime: 3600,
    65                     endTime: 7200
    66                 )
    67             ],
    68             samples: [
    69                 new Sample(
    70                     template: sampleTemplate1
    71                 ),
    72                 new Sample(
    73                     template: sampleTemplate1
    74                 ),
    75                 new Sample(
    76                    
    77                 )
    78             ],
    79             subjects: [
    80                 new Subject(
    81                     name: 'Wihout template 1'
    82                 ),
    83                 new Subject(
    84                     name: 'Wihout template 2'
    85                 )
    86             ]
     32                // Create the template itself
     33                eventTemplate2 = new Template(
     34                        name: 'Event Template 2',
     35                        entity: Event,
     36                        fields: [
     37                                new TemplateField(
     38                                        name: 'testStartDate',
     39                                        type: TemplateFieldType.RELTIME,
     40                                        entity: Event
     41                                )
     42                        ]
     43                );
    8744
    88         )
     45                // Create the template itself
     46                sampleTemplate1 = new Template(
     47                        name: 'Sample Template 1',
     48                        entity: dbnp.studycapturing.Event,
     49                        fields: [
     50                                new TemplateField(
     51                                        name: 'testStartDate',
     52                                        type: TemplateFieldType.RELTIME,
     53                                        entity: Event
     54                                )
     55                        ]
     56                );
    8957
    90     }
     58                testStudy = new Study(
     59                        title: 'Test study',
     60                        events: [
     61                                new Event(
     62                                        template: eventTemplate1,
     63                                        startTime: 3600,
     64                                        endTime: 7200
     65                                ),
     66                                new Event(
     67                                        template: eventTemplate2,
     68                                        startTime: 3600,
     69                                        endTime: 7200
     70                                )
     71                        ],
     72                        samples: [
     73                                new Sample(
     74                                        template: sampleTemplate1
     75                                ),
     76                                new Sample(
     77                                        template: sampleTemplate1
     78                                ),
     79                                new Sample(
    9180
    92     protected void tearDown() {
    93         super.tearDown()
    94     }
     81                                )
     82                        ],
     83                        subjects: [
     84                                new Subject(
     85                                        name: 'Wihout template 1'
     86                                ),
     87                                new Subject(
     88                                        name: 'Wihout template 2'
     89                                )
     90                        ]
    9591
    96     void testGiveTemplates() {
    97         def eventTemplates = TemplateEntity.giveTemplates( testStudy.events );
    98         assert eventTemplates.size() == 2
    99         assert eventTemplates.contains( eventTemplate1 );
    100         assert eventTemplates.contains( eventTemplate2 );
     92                )
    10193
    102         def sampleTemplates = TemplateEntity.giveTemplates( testStudy.samples );
    103         assert sampleTemplates.size() == 1
    104         assert sampleTemplates.contains( sampleTemplate1 )
     94        }
    10595
    106         def subjectTemplates = TemplateEntity.giveTemplates( testStudy.subjects );
    107         assert subjectTemplates.size() == 0
    108     }
     96        protected void tearDown() {
     97                super.tearDown()
     98        }
     99
     100        void testGiveTemplates() {
     101                def eventTemplates = TemplateEntity.giveTemplates(testStudy.events);
     102                assert eventTemplates.size() == 2
     103                assert eventTemplates.contains(eventTemplate1);
     104                assert eventTemplates.contains(eventTemplate2);
     105
     106                def sampleTemplates = TemplateEntity.giveTemplates(testStudy.samples);
     107                assert sampleTemplates.size() == 1
     108                assert sampleTemplates.contains(sampleTemplate1)
     109
     110                def subjectTemplates = TemplateEntity.giveTemplates(testStudy.subjects);
     111                assert subjectTemplates.size() == 0
     112        }
     113
     114        /** *
     115         *  This test assures that adding of a TemplateField that has another entity than the Template fails.
     116         */
     117        void testTemplateFieldEntity() {
     118                eventTemplate1.addToFields(
     119                        new TemplateField(name: 'Should fail',type: TemplateFieldType.STRING, entity: Sample)
     120                )
     121                assert !eventTemplate1.validate()
     122                assert !eventTemplate1.save()
     123        }
    109124
    110125
  • trunk/test/unit/dbnp/studycapturing/TemplateFieldFileTests.groovy

    r507 r550  
    1616        // available in testcases
    1717        fileService.metaClass.getUploadDir = {
    18             return new File( 'D:/isdat/dbNP/Sources/gscf mei/web-app/fileuploads' );
     18            return new File( System.properties['base.dir'] + File.separator + 'web-app' + File.separator + 'fileuploads' );
    1919        }
    2020       
     
    2626                    new TemplateField(
    2727                        name: 'testRelTime',
    28                         type: TemplateFieldType.RELTIME
     28                        type: TemplateFieldType.RELTIME,
     29                            entity: Event
    2930                    ),
    3031                    new TemplateField(
Note: See TracChangeset for help on using the changeset viewer.