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

Last change on this file since 536 was 536, checked in by roberth, 11 years ago

Samples are now shown in the study overview page. Also some tests are added and the bootstrap is updated to show some sample fields with a template

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