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

Last change on this file since 408 was 408, checked in by keesvb, 11 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.