source: trunk/grails-app/domain/dbnp/studycapturing/Template.groovy @ 550

Last change on this file since 550 was 550, checked in by keesvb, 11 years ago

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

  • Property svn:keywords set to Date Rev Author
File size: 2.7 KB
Line 
1package dbnp.studycapturing
2
3/**
4 * The Template class describes a study template, which is basically an extension of the study capture entities
5 * in terms of extra fields (described by classes that extend the TemplateField class).
6 * At this moment, only extension of the study and subject entities is implemented.
7 *
8 * Revision information:
9 * $Rev: 550 $
10 * $Author: keesvb $
11 * $Date: 2010-06-09 23:33:37 +0000 (wo, 09 jun 2010) $
12 */
13class Template implements Serializable {
14        String name
15        String description
16        Class entity
17        //nimble.User owner
18        List fields
19        static hasMany = [fields: TemplateField]
20
21        static constraints = {
22                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
48                // outcommented for now due to bug in Grails / Hibernate
49                // see http://jira.codehaus.org/browse/GRAILS-6020
50                //      name(unique:['entity'])
51        }
52
53        /**
54         * overloaded toString method
55         * @return String
56         */
57        def String toString() {
58                return this.name;
59        }
60
61        /**
62         * Look up the type of a certain template subject field
63         * @param String fieldName The name of the template field
64         * @return String       The type (static member of TemplateFieldType) of the field, or null of the field does not exist
65         */
66        def TemplateFieldType getFieldType(String fieldName) {
67                def field = fields.find {
68                        it.name == fieldName
69                }
70                field?.type
71        }
72
73        /**
74         * get all field of a particular type
75         * @param Class fieldType
76         * @return Set < TemplateField >
77         */
78        def getFieldsByType(TemplateFieldType fieldType) {
79                def result = fields.findAll {
80                        it.type == fieldType
81                }
82                return result;
83        }
84
85        /**
86         * get all required fields
87         * @param Class fieldType
88         * @return Set < TemplateField >
89         */
90        def getRequiredFields() {
91                def result = fields.findAll {
92                        it.required == true
93                }
94                return result;
95        }
96
97        /**
98         * overloading the findAllByEntity method to make it function as expected
99         * @param Class entity (for example: dbnp.studycapturing.Subject)
100         * @return ArrayList
101         */
102        public static findAllByEntity(java.lang.Class entity) {
103                def results = []
104                // 'this' should not work in static context, so taking Template instead of this
105                Template.findAll().each() {
106                        if (entity.equals(it.entity)) {
107                                results[results.size()] = it
108                        }
109                }
110
111                return results
112        }
113}
Note: See TracBrowser for help on using the repository browser.