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

Last change on this file since 554 was 554, checked in by jahn, 11 years ago

Refactored member 'code' of Study. Changed it from being template to being a proper member. This allows using as external ID in module communication.

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