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

Last change on this file since 397 was 397, checked in by duh, 10 years ago
  • reformatted source code
  • added mega huge big ASCII comments to UNDOCUMMENTED of not properly DOCUMENTED classess... we have agreed many many MANY times that everyone should document their code according to JavaDoc? style... but why does nobody do it, or just keep SLACKING! /annoyed modus
  • 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: 397 $
12 * $Author: duh $
13 * $Date: 2010-05-07 12:53:11 +0000 (vr, 07 mei 2010) $
14 */
15class Event extends TemplateEntity implements Serializable {
16//      Date startTime
17//      Date endTime
18
19        static constraints = {
20/*
21                endTime(validator: {val, obj ->
22                        if (val && val.before(obj.startTime)) {
23                                return 'endTimeshouldbegreater'
24                        }
25                })
26*/
27        }
28
29        /**
30         * return the domain fields for this domain class
31         * @return List
32         */
33        List<TemplateField> giveDomainFields() {
34                [
35                        new TemplateField(
36                                name: 'startTime',
37                                type: TemplateFieldType.DATE),
38                        new TemplateField(
39                                name: 'endTime',
40                                type: TemplateFieldType.DATE)
41                ]
42        }
43
44        /**
45         * get the event duration
46         * @return Duration
47         */
48        static def getDuration(date1, date2) {
49                def timeMillis = (date2.getTime() - date1.getTime()).abs()
50                def days = (timeMillis / (1000 * 60 * 60 * 24)).toInteger()
51                def hours = (timeMillis / (1000 * 60 * 60)).toInteger()
52                def minutes = (timeMillis / (1000 * 60)).toInteger()
53                def seconds = (timeMillis / 1000).toInteger()
54                def millis = (timeMillis % 1000).toInteger()
55
56                return new Duration(days, hours, minutes, seconds, millis)
57        }
58
59        def getDuration() {
60                return getDuration(startTime, endTime)
61        }
62
63        /**
64         * get a prettified duration
65         * @return String
66         */
67        static def getPrettyDuration(duration) {
68                def handleNumerus = {number, string ->
69                        return number.toString() + (number == 1 ? string : string + 's')
70                }
71                if (duration.getYears() > 0) return handleNumerus(duration.getYears(), " year")
72                if (duration.getMonths() > 0) return handleNumerus(duration.getMonths(), " month")
73                if (duration.getDays() > 0) return handleNumerus(duration.getDays(), " day")
74                if (duration.getHours() > 0) return handleNumerus(duration.getHours(), " hour")
75                if (duration.getMinutes() > 0) return handleNumerus(duration.getMinutes(), " minute")
76                return handleNumerus(duration.getSeconds(), " second")
77        }
78
79        def getPrettyDuration() {
80                getPrettyDuration(getDuration())
81        }
82
83        static def getPrettyDuration(date1, date2) {
84                return getPrettyDuration(getDuration(date1, date2))
85        }
86
87        def getDurationString() {
88                def d = getDuration()
89                return "${d.days} days, ${d.hours} hrs, ${d.minutes} min, ${d.seconds} sec."
90        }
91
92        def getShortDuration() {
93                def d = getDuration()
94                def days = d.days
95                def hours = d.hours - (24 * days)
96                def minutes = d.minutes - (24 * 60 * days) - (60 * hours)
97                return "${days}d ${hours}:${minutes}"
98        }
99
100        def isSamplingEvent() {
101                return (this instanceof SamplingEvent)
102        }
103
104        def String toString() {
105                return fieldExists('Description') ? getFieldValue('Description') : ""
106        }
107}
Note: See TracBrowser for help on using the repository browser.