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

Last change on this file since 629 was 629, checked in by duh, 11 years ago
  • fixed bug in study view page caused by revision # 602
  • Property svn:keywords set to Date Rev Author
File size: 2.8 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: 629 $
12 * $Author: duh $
13 * $Date: 2010-06-28 08:17:03 +0000 (ma, 28 jun 2010) $
14 */
15class Event extends TemplateEntity implements Serializable {
16        long startTime
17        long endTime
18
19        /**
20         * Constraints
21         */
22        static constraints = {
23                endTime(validator: { fields, obj, errors ->
24                        def error = false
25
26                        // endTime must be >= the startTime
27                        if (fields && fields.compareTo(obj.startTime) < 0) {
28                                error = true
29                                errors.rejectValue(
30                                        'endTime',
31                                        'event.endTime.greaterThanStartTime',
32                                        ['endTime', fields] as Object[],
33                                        'End time should be greater than or equal to the Start Time'
34                                )
35                        }
36
37                        return (!error)
38                })
39        }
40
41        /**
42         * return the domain fields for this domain class
43         * @return List
44         */
45        static List<TemplateField> giveDomainFields() { return Event.domainFields }
46
47        static final List<TemplateField> domainFields = [
48                new TemplateField(
49                        name: 'startTime',
50                        type: TemplateFieldType.RELTIME,
51                        comment: "Please enter the start time as a relative time from study start date. "+RelTime.getHelpText()),
52                new TemplateField(
53                        name: 'endTime',
54                        type: TemplateFieldType.RELTIME,
55                        comment: "Please enter the end time as a relative time from study start date. "+RelTime.getHelpText())
56        ]
57
58        /**
59         * get the duration
60         * @return RelTime
61         */
62        def getDuration() {
63                return new RelTime(startTime, endTime)
64        }
65
66        /**
67         * Get extended, human readable string representing the duration between startTime and endTime
68     *
69         * @return String
70         */
71        def getDurationString() {
72                return new RelTime(startTime, endTime).toPrettyRoundedString();
73        }
74
75        /**
76         * get a prettified duration
77         * @return String
78         */
79        static def getPrettyDuration(RelTime duration) {
80                return duration.toPrettyRoundedString();
81        }
82
83        def getPrettyDuration() {
84                getPrettyDuration(getDuration())
85        }
86
87        /**
88         * Get short, human readable string representing the duration between startTime and endTime
89     *
90         * @return String
91         */
92        def getShortDuration() {
93                return new RelTime(startTime, endTime).toPrettyRoundedString();
94        }
95
96        /**
97         *    Return whether this is SamplingEvent
98         * @return    boolean
99         */
100        def isSamplingEvent() {
101                return (this instanceof SamplingEvent)
102        }
103
104        def belongsToGroup(Collection<EventGroup> groups) {
105                def eventFound = false;
106                def that = this;
107                groups.each { eventgroup ->
108                        if (!eventFound) {
109                                eventFound = (that.id in eventgroup.events.id);
110                        }
111                }
112
113                return eventFound;
114        }
115
116        def String toString() {
117                return fieldExists('Description') ? getFieldValue('Description') : ""
118        }
119}
Note: See TracBrowser for help on using the repository browser.