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

Last change on this file since 408 was 408, checked in by keesvb, 9 years ago

reverted changes which removed domain fields from the domain classes, we are now back again at more or less the situation of #394, added preferredIdentifier property to TemplateField? to facilitate simple import

  • Property svn:keywords set to Date Author Rev
File size: 2.9 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: 408 $
12 * $Author: keesvb $
13 * $Date: 2010-05-11 14:41:05 +0000 (di, 11 mei 2010) $
14 */
15class Event extends TemplateEntity implements Serializable {
16        Date startTime
17        Date endTime
18
19        static constraints = {
20                endTime(validator: {val, obj ->
21                        if (val && val.before(obj.startTime)) {
22                                return 'endTimeshouldbegreater'
23                        }
24                })
25        }
26
27        /**
28         * return the domain fields for this domain class
29         * @return List
30         */
31        List<TemplateField> giveDomainFields() {
32                [
33                        new TemplateField(
34                                name: 'startTime',
35                                type: TemplateFieldType.DATE),
36                        new TemplateField(
37                                name: 'endTime',
38                                type: TemplateFieldType.DATE)
39                ]
40        }
41
42        /**
43         * get the event duration
44         * @return Duration
45         */
46        static def getDuration(date1, date2) {
47                def timeMillis = (date2.getTime() - date1.getTime()).abs()
48                def days = (timeMillis / (1000 * 60 * 60 * 24)).toInteger()
49                def hours = (timeMillis / (1000 * 60 * 60)).toInteger()
50                def minutes = (timeMillis / (1000 * 60)).toInteger()
51                def seconds = (timeMillis / 1000).toInteger()
52                def millis = (timeMillis % 1000).toInteger()
53
54                return new Duration(days, hours, minutes, seconds, millis)
55        }
56
57        def getDuration() {
58                return getDuration(startTime, endTime)
59        }
60
61        /**
62         * get a prettified duration
63         * @return String
64         */
65        static def getPrettyDuration(duration) {
66                def handleNumerus = {number, string ->
67                        return number.toString() + (number == 1 ? string : string + 's')
68                }
69                if (duration.getYears() > 0) return handleNumerus(duration.getYears(), " year")
70                if (duration.getMonths() > 0) return handleNumerus(duration.getMonths(), " month")
71                if (duration.getDays() > 0) return handleNumerus(duration.getDays(), " day")
72                if (duration.getHours() > 0) return handleNumerus(duration.getHours(), " hour")
73                if (duration.getMinutes() > 0) return handleNumerus(duration.getMinutes(), " minute")
74                return handleNumerus(duration.getSeconds(), " second")
75        }
76
77        def getPrettyDuration() {
78                getPrettyDuration(getDuration())
79        }
80
81        static def getPrettyDuration(date1, date2) {
82                return getPrettyDuration(getDuration(date1, date2))
83        }
84
85        def getDurationString() {
86                def d = getDuration()
87                return "${d.days} days, ${d.hours} hrs, ${d.minutes} min, ${d.seconds} sec."
88        }
89
90        def getShortDuration() {
91                def d = getDuration()
92                def days = d.days
93                def hours = d.hours - (24 * days)
94                def minutes = d.minutes - (24 * 60 * days) - (60 * hours)
95                return "${days}d ${hours}:${minutes}"
96        }
97
98        def isSamplingEvent() {
99                return (this instanceof SamplingEvent)
100        }
101
102        def String toString() {
103                return fieldExists('Description') ? getFieldValue('Description') : ""
104        }
105}
Note: See TracBrowser for help on using the repository browser.