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

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