Ignore:
Timestamp:
Mar 2, 2010, 6:10:52 PM (10 years ago)
Author:
keesvb
Message:

revised templating system: templates are now per entity rather than per study, moved samples to Study

File:
1 edited

Legend:

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

    r212 r224  
    22
    33import dbnp.data.Term
     4import org.codehaus.groovy.runtime.NullObject
    45
    56class TemplateEntity {
    67
     8        Template template
     9
    710        Map templateStringFields
     11        Map templateStringListFields
    812        Map templateIntegerFields
    913        Map templateFloatFields
     
    1317
    1418        static hasMany = [
    15                 templateStringFields: String, // stores both STRING and STRINGLIST items (latter should be checked against the list)
     19                templateStringFields: String,
     20                templateStringListFields: TemplateFieldListItem,
    1621                templateIntegerFields: int,
    1722                templateFloatFields: float,
     
    3136         */
    3237        def getFieldValue(String fieldName) {
    33                 TemplateFieldType fieldType = template.getSubjectFieldType(fieldName)
     38                TemplateFieldType fieldType = template.getFieldType(fieldName)
    3439                if (!fieldType) throw new NoSuchFieldException("Field name ${fieldName} not recognized")
    3540                switch(fieldType) {
    3641                        case [TemplateFieldType.STRING, TemplateFieldType.STRINGLIST]:
    3742                                return templateStringFields[fieldName]
     43                        case [TemplateFieldType.STRINGLIST]:
     44                                return templateStringListFields[fieldName]
    3845                        case TemplateFieldType.INTEGER:
    3946                                return templateIntegerFields[fieldName]
     
    5259
    5360        def setFieldValue(String fieldName, value) {
    54                 this.properties.each { println it}
    5561                if (this.properties.containsKey(fieldName)) {
    5662                        this[fieldName] = value
    5763                }
    58                 else if (templateStringFields.containsKey(fieldName) && value.class == String) {
    59                         this.templateStringFields[fieldName] = value
    60                 }
    61                 else if (templateIntegerFields.containsKey(fieldName) && value.class == Integer) {
    62                         this.templateIntegerFields[fieldName] = value
    63                 }
    64                 else if (templateFloatFields.containsKey(fieldName) && value.class == Float) {
    65                         this.templateFloatFields[fieldName] = value
    66                 }
    67                 else if (templateDoubleFields.containsKey(fieldName) && value.class == Double) {
    68                         this.templateDoubleFields[fieldName] = value
    69                 }
    70                 else if (templateDateFields.containsKey(fieldName) && value.class == Date) {
    71                         this.templateDateFields[fieldName] = value
    72                 }
    73                 else if (templateTermFields.containsKey(fieldName) && value.class == Term) {
    74                         this.templateTermFields[fieldName] = value
     64                else
     65                if (template == null) {
     66                        throw new NoSuchFieldException("Field ${fieldName} not found in class properties")
    7567                }
    7668                else {
    77                         println "Field ${fieldName} not found"
     69                        if (templateStringFields.containsKey(fieldName) && value.class == String) {
     70                                this.templateStringFields[fieldName] = value
     71                        }
     72                        if (templateStringListFields.containsKey(fieldName) && value.class == TemplateFieldListItem) {
     73                                this.templateStringFields[fieldName] = value
     74                        }
     75                        else if (templateIntegerFields.containsKey(fieldName) && value.class == Integer) {
     76                                this.templateIntegerFields[fieldName] = value
     77                        }
     78                        else if (templateFloatFields.containsKey(fieldName) && value.class == Float) {
     79                                this.templateFloatFields[fieldName] = value
     80                        }
     81                        else if (templateDoubleFields.containsKey(fieldName) && value.class == Double) {
     82                                this.templateDoubleFields[fieldName] = value
     83                        }
     84                        else if (templateDateFields.containsKey(fieldName) && value.class == Date) {
     85                                this.templateDateFields[fieldName] = value
     86                        }
     87                        else if (templateTermFields.containsKey(fieldName) && value.class == Term) {
     88                                this.templateTermFields[fieldName] = value
     89                        }
     90                        else {
     91                                throw new NoSuchFieldException("Field ${fieldName} not found in class properties or template fields")
     92                        }
    7893                }
    7994        }
    8095
     96        def Set<TemplateField> giveFields() {
     97                return this.template.fields;
     98        }
     99
     100        @Override
     101        void setTemplate(Template newTemplate) {
     102
     103                // Contrary to expectation, this method does not cause an infinite loop but calls the super method
     104                // whereas super.setTemplate(newTemplate) leads to errors concerning NullObject values
     105                this.template = newTemplate
     106
     107                // TODO: initialize all template fields with the necessary keys and null values
     108
     109                println "Setting template " + newTemplate
     110                /*if (template == null || template instanceof NullObject) {} else{ // negation doesn't seem to work well
     111                        def stringFields = template.getFieldsByType(TemplateFieldType.STRINGLIST)
     112                        println stringFields*.name
     113                        if (stringFields.size() > 0) {
     114                                templateStringFields = new HashMap<String,String>()
     115                                templateStringFields.keyset.add stringFields*.name;
     116                                println templateStringFields
     117                        }
     118                }*/
     119        }
     120
    81121}
Note: See TracChangeset for help on using the changeset viewer.