Changeset 384


Ignore:
Timestamp:
Apr 27, 2010, 9:13:47 AM (9 years ago)
Author:
keesvb
Message:

FINALLY found a possible way to integrate the domain fields as TemplateFields?, see Event. Also added required attribute for template fields.

Location:
trunk/grails-app
Files:
5 edited

Legend:

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

    r383 r384  
    416416                        // Event templates
    417417                        println ".adding event templates..."
     418
     419                        def startDateField = new TemplateField(
     420                                name: 'Start time', type: TemplateFieldType.DATE
     421                        ).with { if (!validate()) { errors.each { println it} } else save()}
     422
     423                        def endDateField = new TemplateField(
     424                                name: 'End time', type: TemplateFieldType.DATE
     425                        ).with { if (!validate()) { errors.each { println it} } else save()}
     426
     427                        Event.systemFields = [startDateField,endDateField]
     428
    418429                        def dietTreatmentTemplate = new Template(
    419430                                name: 'Diet treatment', entity: dbnp.studycapturing.Event)
     
    504515
    505516                        def evLF = new Event(
    506                                 startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
    507                                 endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
    508517                                template: dietTreatmentTemplate
    509518                        )
    510519                        .with { if (!validate()) { errors.each { println it} } else save()}
    511                         evLF.setFieldValue( 'Diet','10% fat (palm oil)' )
     520
     521                        evLF.setStartTime(Date.parse('yyyy-MM-dd','2008-01-07'))
     522                        evLF.setEndTime(Date.parse('yyyy-MM-dd','2008-01-14'))
     523
     524                        evLF.setFieldValue( 'Diet','10% fat (palm oil)' )
    512525                        evLF.save(flush:true)
     526
     527                        println "Saved diet treatment"
    513528                        // TODO: find out why Diet is not set and Compound is
    514529
    515530                        def evHF = new Event(
    516                                 startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
    517                                 endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
    518531                                template: dietTreatmentTemplate
    519532                        )
     533                        .setStartTime( Date.parse('yyyy-MM-dd','2008-01-07'))
     534                        .setEndTime( Date.parse('yyyy-MM-dd','2008-01-14'))
    520535                        .setFieldValue( 'Diet','45% fat (palm oil)' )
    521536                        .with { if (!validate()) { errors.each { println it} } else save()}
    522537
    523538                        def evBV = new Event(
    524                                 startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
    525                                 endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
    526539                                template: boostTreatmentTemplate
    527540                        )
     541                        .setStartTime( Date.parse('yyyy-MM-dd','2008-01-07'))
     542                        .setEndTime( Date.parse('yyyy-MM-dd','2008-01-14'))
    528543                        .setFieldValue( 'Compound','Vehicle' )
    529544                        .with { if (!validate()) { errors.each { println it} } else save()}
    530545
    531546                        def evBL = new Event(
    532                                 startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
    533                                 endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
    534547                                template: boostTreatmentTemplate
    535548                        )
     549                        .setStartTime( Date.parse('yyyy-MM-dd','2008-01-07'))
     550                        .setEndTime( Date.parse('yyyy-MM-dd','2008-01-14'))
    536551                        .setFieldValue( 'Compound','Leptin' )
    537552                        .with { if (!validate()) { errors.each { println it} } else save()}
  • trunk/grails-app/domain/dbnp/studycapturing/Event.groovy

    r375 r384  
    1414 */
    1515class Event extends TemplateEntity implements Serializable {
    16         Date startTime
    17         Date endTime
    1816
    1917        static constraints = {
    20                 startTime(nullable:false)
     18                startTime(nullable: true)
     19                endTime(nullable: true)
    2120                endTime(validator: {val, obj ->
    2221           if (val && val.before(obj.startTime)) {
     
    2423           }
    2524        })
     25        }
     26       
     27        Date getStartTime() {
     28                getFieldValue('Start time')
     29        }
     30
     31        def setStartTime(Date value) {
     32                if (value != null) {
     33                        setFieldValue('Start time',value)
     34                }
     35                return this
     36        }
     37
     38        Date getEndTime() {
     39                getFieldValue('End time')
     40        }
     41
     42        def setEndTime(Date value) {
     43                if (value != null) {
     44                        setFieldValue('End time',value)
     45                }
     46                return this
    2647        }
    2748
     
    3354        // thus, do this manually as follows
    3455
    35         def getDuration(date1, date2) {
     56        static def getDuration(date1, date2) {
    3657                def timeMillis = (date2.getTime() - date1.getTime()).abs()
    3758                def days = (timeMillis / (1000 * 60 * 60 * 24)).toInteger()
     
    5273        // is output
    5374
    54         def getPrettyDuration(duration) {
     75        static def getPrettyDuration(duration) {
    5576                def handleNumerus = {number, string ->
    5677                        return number.toString() + (number == 1 ? string : string + 's')
     
    7091
    7192        // convenience method. gives formatted string output for a duration
    72         def getPrettyDuration(date1, date2) {
     93        static def getPrettyDuration(date1, date2) {
    7394                return getPrettyDuration(getDuration(date1, date2))
    7495        }
  • trunk/grails-app/domain/dbnp/studycapturing/Template.groovy

    r359 r384  
    2323                // see http://jira.codehaus.org/browse/GRAILS-6020
    2424                //      name(unique:['entity'])
     25        }
     26
     27        // As the entity is not known at the time the constructor is called,
     28        // we add the system fields for a new template object at the time the entity is set
     29        void setEntity(Class value) {
     30                this.entity = value
     31                if (value != null) {
     32                        if (fields == null) {
     33                                if (entity.systemFields) {
     34                                        println "adding default template fields for " + entity.systemFields
     35                                        entity.systemFields.each {
     36                                                this.addToFields(it)
     37                                        }
     38                                }
     39                        }
     40                        println "" + value + "this template has now fields " + fields
     41                }
     42
    2543        }
    2644
     
    5876
    5977        /**
     78         * get all required fields
     79         * @param       Class   fieldType
     80         * @return      Set<TemplateField>
     81         */
     82        def getRequiredFields() {
     83                def result = fields.findAll {
     84                        it.required == true
     85                }
     86                return result;
     87        }
     88
     89        /**
    6090         * overloading the findAllByEntity method to make it function as expected
    6191         * @param       Class           entity (for example: dbnp.studycapturing.Subject)
     
    6494        public static findAllByEntity(java.lang.Class entity) {
    6595                def results = []
    66                 // 'this' should not work in static context, however it does so I'll keep
    67                 // this in for now :)
    68                 this.findAll().each() {
     96                // 'this' should not work in static context, so taking Template instead of this
     97                Template.findAll().each() {
    6998                        if (entity.equals(it.entity)) {
    7099                                results[ results.size() ] = it
  • trunk/grails-app/domain/dbnp/studycapturing/TemplateEntity.groovy

    r381 r384  
    1414abstract class TemplateEntity implements Serializable {
    1515        Template template
     16        static List systemFields
    1617        Map templateStringFields = [:]
    1718        Map templateTextFields = [:]
     
    3132                templateDoubleFields: double,
    3233                templateDateFields: Date,
    33                 templateTermFields: Term
     34                templateTermFields: Term,
     35                systemFields: TemplateField
    3436        ]
    3537
     
    353355        }
    354356
     357        def List<TemplateField> giveSystemFields() {
     358                return systemFields;
     359        }
     360       
     361
    355362        /**
    356363         * Return all relevant 'built-in' domain fields of the super class
  • trunk/grails-app/domain/dbnp/studycapturing/TemplateField.groovy

    r375 r384  
    1717        String comment // help string for the user interface
    1818        List listEntries
     19        boolean required
    1920
    2021    static hasMany = [listEntries :
     
    2728                unit(nullable: true, blank: true)
    2829                comment(nullable:true, blank: true)
     30                required(default: false)
    2931        }
    3032
Note: See TracChangeset for help on using the changeset viewer.