source: trunk/grails-app/domain/dbnp/studycapturing/Study.groovy @ 564

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

fixed person problem in BootStrap?, added comments to Event class, fixed #104

  • Property svn:keywords set to Date Rev Author
File size: 3.1 KB
Line 
1package dbnp.studycapturing
2
3/**
4 * Domain class describing the basic entity in the study capture part: the Study class.
5 *
6 * Revision information:
7 * $Rev: 564 $
8 * $Author: keesvb $
9 * $Date: 2010-06-14 15:20:07 +0000 (ma, 14 jun 2010) $
10 */
11class Study extends TemplateEntity implements Serializable {
12        static searchable = true
13        nimble.User owner
14        String title
15        String code             // also enables referencing to studies from the Simple Assay Module
16        Date dateCreated
17        Date lastUpdated
18        Date startDate
19    List subjects
20        List events
21        List samplingEvents
22        List eventGroups
23        List samples
24        List assays
25
26        static hasMany = [
27                editors: nimble.User,
28                readers: nimble.User,
29                subjects: Subject,
30                events: Event,
31                samplingEvents: SamplingEvent,
32                eventGroups: EventGroup,
33                samples: Sample,
34                assays: Assay,
35                persons: StudyPerson,
36                publications: Publication
37        ]
38
39        static constraints = {
40                owner(nullable: true, blank: true)
41                code(nullable:false, blank:true,unique:true) 
42        }
43
44        static mapping = {
45                researchQuestion type: 'text'
46                description type: 'text'
47                autoTimestamp true
48        }
49
50        /**
51         * return the domain fields for this domain class
52         * @return List
53         */
54        static List<TemplateField> giveDomainFields() { return Study.domainFields }
55
56        static final List<TemplateField> domainFields = [
57                new TemplateField(
58                        name: 'title',
59                        type: TemplateFieldType.STRING),
60                new TemplateField(
61                        name: 'code',
62                        type: TemplateFieldType.STRING,
63                        preferredIdentifier:true,
64                        comment: 'Fill out the code by which many people will recognize your study'),
65                new TemplateField(
66                        name: 'startDate',
67                        type: TemplateFieldType.DATE,
68                        comment: 'Fill out the official start date or date of first action')
69        ]
70
71        /**
72         * return the title of this study
73         */
74        def String toString() {
75                return title
76        }
77
78        /**
79         * returns all events and sampling events that do not belong to a group
80         */
81        def Set<Event> getOrphanEvents() {
82                def orphans =   events.findAll { event -> !event.belongsToGroup(eventGroups) } +
83                                                samplingEvents.findAll { event -> !event.belongsToGroup(eventGroups) }
84
85                return orphans
86        }
87
88        /**
89         * Return the unique Subject templates that are used in this study
90         */
91        def Set<Template> giveSubjectTemplates() {
92                TemplateEntity.giveTemplates(subjects)
93        }
94
95        /**
96         * Return the unique Event and SamplingEvent templates that are used in this study
97         */
98        Set<Template> giveAllEventTemplates() {
99                // For some reason, giveAllEventTemplates() + giveAllSamplingEventTemplates()
100                // gives trouble when asking .size() to the result
101                // So we also use giveTemplates here
102                TemplateEntity.giveTemplates(events + samplingEvents)
103        }
104
105        /**
106         * Return the unique Event templates that are used in this study
107         */
108        Set<Template> giveEventTemplates() {
109                TemplateEntity.giveTemplates(events)
110        }
111
112        /**
113         * Return the unique SamplingEvent templates that are used in this study
114         */
115        Set<Template> giveSamplingEventTemplates() {
116                TemplateEntity.giveTemplates(samplingEvents)
117        }
118
119        /**
120         * Returns the unique Sample templates that are used in the study
121         */
122        Set<Template> giveSampleTemplates() {
123                TemplateEntity.giveTemplates(samples)
124        }
125        /**
126         * Returns the template of the study
127         */
128        Template giveStudyTemplate() {
129                return this.template
130        }
131}
Note: See TracBrowser for help on using the repository browser.