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

Last change on this file since 564 was 564, checked in by keesvb, 12 years ago

fixed person problem in BootStrap?, added comments to Event class, fixed #104

  • Property svn:keywords set to Date Rev Author
File size: 2.6 KB
RevLine 
[80]1package dbnp.studycapturing
2
[111]3import groovy.time.*
4
[84]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.
[209]9 *
10 * Revision information:
11 * $Rev: 564 $
12 * $Author: keesvb $
13 * $Date: 2010-06-14 15:20:07 +0000 (ma, 14 jun 2010) $
[84]14 */
[345]15class Event extends TemplateEntity implements Serializable {
[497]16        long startTime
17        long endTime
[80]18
[416]19        /**
20         * Constraints
21         */
[209]22        static constraints = {
[416]23                endTime(validator: { fields, obj, errors ->
24                        def error = false
25
26                        // endTime must be >= the startTime
[541]27                        if (fields && fields.compareTo(obj.startTime) < 0) {
[416]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                                )
[397]35                        }
[416]36
37                        return (!error)
[397]38                })
[209]39        }
[111]40
[397]41        /**
42         * return the domain fields for this domain class
43         * @return List
44         */
[506]45        static List<TemplateField> giveDomainFields() { return Event.domainFields }
[541]46
[540]47        static final List<TemplateField> domainFields = [
48                new TemplateField(
49                        name: 'startTime',
[564]50                        type: TemplateFieldType.RELTIME,
51                        comment: "Please enter the start time as a relative time from study start date. "+RelTime.getHelpText()),
[540]52                new TemplateField(
53                        name: 'endTime',
[564]54                        type: TemplateFieldType.RELTIME,
55                        comment: "Please enter the end time as a relative time from study start date. "+RelTime.getHelpText())
[540]56        ]
[384]57
[564]58        // TODO: Jahn, could you indicate in a comment why these different duration functions exist?
[197]59        def getDuration() {
[497]60                return new RelTime(startTime, endTime);
[197]61        }
62
[397]63        /**
64         * get a prettified duration
65         * @return String
66         */
[497]67        static def getPrettyDuration(RelTime duration) {
[541]68                return duration.toPrettyRoundedString();
[197]69        }
70
[167]71        def getPrettyDuration() {
[541]72                getPrettyDuration(getDuration())
[160]73        }
74
[139]75        def getDurationString() {
[541]76                def d = getDuration()
77                return getDuration().toPrettyString();
[139]78        }
[111]79
[209]80        def getShortDuration() {
[541]81                def d = getDuration()
82                return getDuration().toString();
[209]83        }
[139]84
[564]85        /**
86         *    Return whether this is SamplingEvent
87         * @return    boolean
88         */
[160]89        def isSamplingEvent() {
[209]90                return (this instanceof SamplingEvent)
91        }
[197]92
[541]93        def belongsToGroup(Set<EventGroup> groups) {
94                def eventFound = false;
95                def that = this;
96                groups.each { eventgroup ->
97                        if (!eventFound) {
98                                eventFound = (that.id in eventgroup.events.id);
99                        }
100                }
[536]101
[541]102                return eventFound;
103        }
[536]104
[201]105        def String toString() {
[397]106                return fieldExists('Description') ? getFieldValue('Description') : ""
[201]107        }
[111]108}
Note: See TracBrowser for help on using the repository browser.