source: trunk/grails-app/controllers/dbnp/studycapturing/EventController.groovy @ 150

Last change on this file since 150 was 150, checked in by jahn, 9 years ago

Updated editing of Events. RemoteFunction? calls work. Still needs cleaning up (but its Friday evening).

File size: 7.2 KB
Line 
1package dbnp.studycapturing
2import java.text.SimpleDateFormat
3import dbnp.data.Term
4import dbnp.data.Ontology
5
6class EventController {
7
8    static allowedMethods = [save: "POST", update: "POST", delete: "POST"]
9
10    def index = {
11        redirect(action: "list", params: params)
12    }
13
14    def list = {
15        params.max = Math.min(params.max ? params.int('max') : 10, 100)
16        [eventInstanceList: Event.list(params), eventInstanceTotal: Event.count()]
17    }
18
19    def create = {
20        def eventInstance = new Event()
21        eventInstance.properties = params
22        //chain( view: "createForEventDescription", params:params )
23        return [eventInstance:eventInstance]
24    }
25
26
27    def createForEventDescription = {
28        if( params["id"]==null)
29        {
30            def eventInstance = new Event()
31            def sDate = new Date( params["startTime"])
32            def eDate = new Date( params["endTime"])
33            def description = EventDescription.findById((params["eventDescription"])["id"])
34            return [testo:params.clone(), sDate:sDate, eDate:eDate, description:description ]
35        }
36        else
37        {
38            def eventInstance = Event.get(params.id)
39            if (!eventInstance) {
40                flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'event.label', default: 'Event'), params.id])}"
41                redirect(action: "list")
42            }
43            return [testo:params.clone(), sDate:eventInstance.startTime, eDate:eventInstance.endTime, description:eventInstance.eventDescription]
44        }
45    }
46
47
48    // Convert date strings to date strings grails can deal with.
49    // Input format:  "01/20/2010 08:45 am"
50    // Output format: "01/20/2010 20:45"
51    // Note: the "am" amd "pm" suffixes are removed.
52    def parseDate = {  st ->
53            def subst = st.substring(0,16)
54            def ampm =  st.substring(17,19)
55            if(ampm=="pm")
56            {
57                 def hours=st.substring(11,13)
58                 hours = hours.toInteger() + 12
59                 st = st.substring(0,11) + hours + st.substring(13,16)
60            }
61            else { st = st.substring(0,16) }
62
63            def sdfh = new SimpleDateFormat("MM/DD/yyyy hh:mm")
64            return sdfh.parse(st)
65    }
66
67
68    def save = {
69        println "In EventController.save: ${params}"
70        params["startTime"] = parseDate(params["startTime"])     // parse the date strings
71        params["endTime"] = parseDate(params["endTime"])
72
73        def eventInstance = new Event(params)
74
75        println params.protocolInstance
76                                                                  // If a protocol instnace already exists,
77                                                                  // update this event's parameter values.
78        if(params.protocolInstance != null) {
79            params.protocolInstance.each { id, value ->
80                    println id + " " + value
81                    def parameter = ProtocolParameterInstance.get(id)
82                    parameter.value=value
83                    parameter.save()
84                }
85        }
86
87        if (eventInstance.save(flush: true)) {
88            flash.message = "${message(code: 'default.created.message', args: [message(code: 'event.label', default: 'Event'), eventInstance.id])}"
89            redirect(action: "show", id: eventInstance.id)
90        }
91        else {
92            render(view: "create", model: [eventInstance: eventInstance])
93        }
94        render(view: "create", model: [eventInstance: eventInstance])
95    }
96
97
98    def show = {
99        def eventInstance = Event.get(params.id)
100        if (!eventInstance) {
101            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'event.label', default: 'Event'), params.id])}"
102            redirect(action: "list")
103        }
104        else {
105            [eventInstance: eventInstance]
106        }
107    }
108
109
110
111
112
113    def partial = {
114        println "In action: partial"
115        println params
116        def eventDescription = EventDescription.get(params.id)
117        if (!eventDescription) {
118            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'event.label', default: 'Event'), params.id])}"
119            redirect(action: "list")
120        }
121        else {
122            [eventDescription: event]
123        }
124        redirect(view: 'partial')
125    }
126
127
128
129
130
131    def edit = {
132
133        if( params["id"]==null)
134        {
135            def eventInstance = new Event()
136            def sDate = new Date( params["startTime"])
137            def eDate = new Date( params["endTime"])
138            def description = EventDescription.findById((params["eventDescription"])["id"])
139            return [eventInstance:eventInstance, testo:params.clone(), sDate:sDate, eDate:eDate, description:description ]
140        }
141
142        else
143        {
144            def eventInstance = Event.get(params.id)
145            if (!eventInstance) {
146                flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'event.label', default: 'Event'), params.id])}"
147                redirect(action: "list")
148            }
149            return [eventInstance:eventInstance, testo:params.clone(), sDate:eventInstance.startTime, eDate:eventInstance.endTime, description:eventInstance.eventDescription]
150        }
151
152    }
153
154
155
156    def update = {
157        def eventInstance = Event.get(params.id)
158        if (eventInstance) {
159            if (params.version) {
160                def version = params.version.toLong()
161                if (eventInstance.version > version) {
162                   
163                    eventInstance.errors.rejectValue("version", "default.optimistic.locking.failure", [message(code: 'event.label', default: 'Event')] as Object[], "Another user has updated this Event while you were editing")
164                    render(view: "edit", model: [eventInstance: eventInstance])
165                    return
166                }
167            }
168            eventInstance.properties = params
169            if (!eventInstance.hasErrors() && eventInstance.save(flush: true)) {
170                flash.message = "${message(code: 'default.updated.message', args: [message(code: 'event.label', default: 'Event'), eventInstance.id])}"
171                redirect(action: "show", id: eventInstance.id)
172            }
173            else {
174                render(view: "edit", model: [eventInstance: eventInstance])
175            }
176        }
177        else {
178            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'event.label', default: 'Event'), params.id])}"
179            redirect(action: "list")
180        }
181    }
182
183    def delete = {
184        def eventInstance = Event.get(params.id)
185        if (eventInstance) {
186            try {
187                eventInstance.delete(flush: true)
188                flash.message = "${message(code: 'default.deleted.message', args: [message(code: 'event.label', default: 'Event'), params.id])}"
189                redirect(action: "list")
190            }
191            catch (org.springframework.dao.DataIntegrityViolationException e) {
192                flash.message = "${message(code: 'default.not.deleted.message', args: [message(code: 'event.label', default: 'Event'), params.id])}"
193                redirect(action: "show", id: params.id)
194            }
195        }
196        else {
197            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'event.label', default: 'Event'), params.id])}"
198            redirect(action: "list")
199        }
200    }
201
202    def showMySample = {
203          render( view:"showMySample" )
204    }
205
206   
207}
Note: See TracBrowser for help on using the repository browser.