source: trunk/grails-app/domain/dbnp/studycapturing/Event.groovy @ 698

Last change on this file since 698 was 698, checked in by keesvb, 10 years ago

corrected wrong Event start time method call in RestController?

  • Property svn:keywords set to Date Rev Author
File size: 3.3 KB
Line 
1package dbnp.studycapturing
2
3import groovy.time.*
4
5/**
6 * The Event class describes an actual event, as it has happened to a certain subject. Often, the same event occurs
7 * to multiple subjects at the same time. That is why the actual description of the event is factored out into a more
8 * general EventDescription class. Events that also lead to sample(s) should be instantiated as SamplingEvents.
9 *
10 * Revision information:
11 * $Rev: 698 $
12 * $Author: keesvb $
13 * $Date: 2010-07-22 14:39:53 +0000 (do, 22 jul 2010) $
14 */
15class Event extends TemplateEntity implements Serializable {
16        long startTime  // start time of the event, relative to the start time of the study
17        long endTime    // end time of the event, relative to the start time of the study
18
19        // TODO: assure the Event has a parent study in validate()
20
21        /**
22         * Constraints
23         */
24        static constraints = {
25                endTime(validator: { fields, obj, errors ->
26                        def error = false
27
28                        // endTime must be >= the startTime
29                        if (fields && fields.compareTo(obj.startTime) < 0) {
30                                error = true
31                                errors.rejectValue(
32                                        'endTime',
33                                        'event.endTime.greaterThanStartTime',
34                                        ['endTime', fields] as Object[],
35                                        'End time should be greater than or equal to the Start Time'
36                                )
37                        }
38
39                        return (!error)
40                })
41        }
42
43        /**
44         * return the domain fields for this domain class
45         * @return List
46         */
47        static List<TemplateField> giveDomainFields() { return Event.domainFields }
48
49        static final List<TemplateField> domainFields = [
50                new TemplateField(
51                        name: 'startTime',
52                        type: TemplateFieldType.RELTIME,
53                        comment: "Please enter the start time as a relative time from study start date. "+RelTime.getHelpText()),
54                new TemplateField(
55                        name: 'endTime',
56                        type: TemplateFieldType.RELTIME,
57                        comment: "Please enter the end time as a relative time from study start date. "+RelTime.getHelpText())
58        ]
59
60        /**
61         * get the duration
62         * @return RelTime
63         */
64        def getDuration() {
65                return new RelTime(startTime, endTime)
66        }
67
68
69         /**
70          * Return the start time of the event, which should be relative to the start of the study
71          * @return String a human readable representation of the start time of the event
72         */
73        def getStartTimeString() {
74                return new RelTime(startTime).toPrettyRoundedString();
75        }
76
77        /**
78         * Get extended, human readable string representing the duration between startTime and endTime
79     *
80         * @return String
81         */
82        def getDurationString() {
83                return new RelTime(startTime, endTime).toPrettyRoundedString();
84        }
85
86        /**
87         * get a prettified duration
88         * @return String
89         */
90        static def getPrettyDuration(RelTime duration) {
91                return duration.toPrettyRoundedString();
92        }
93
94        def getPrettyDuration() {
95                getPrettyDuration(getDuration())
96        }
97
98        /**
99         * Get short, human readable string representing the duration between startTime and endTime
100     *
101         * @return String
102         */
103        def getShortDuration() {
104                return new RelTime(startTime, endTime).toPrettyRoundedString();
105        }
106
107        /**
108         *    Return whether this is SamplingEvent
109         * @return    boolean
110         */
111        def isSamplingEvent() {
112                return (this instanceof SamplingEvent)
113        }
114
115        def belongsToGroup(Collection<EventGroup> groups) {
116                def eventFound = false;
117                def that = this;
118                groups.each { eventgroup ->
119                        if (!eventFound) {
120                                eventFound = (that.id in eventgroup.events.id);
121                        }
122                }
123
124                return eventFound;
125        }
126
127        def String toString() {
128                return fieldExists('Description') ? getFieldValue('Description') : ""
129        }
130}
Note: See TracBrowser for help on using the repository browser.