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

Last change on this file since 162 was 162, checked in by duh, 10 years ago
  • set keyword expansion
  • Property svn:keywords set to
    Date
    Author
    Rev
File size: 8.9 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    // This action is not complete yet.
69    // (1) Need to include Sampling events.
70    // (2) This probably causes orphened PrtocolPrameters that have to be delt with.
71    // (3) Parts of this might have to be moved into the Domain object's save() method.
72    // (4) The correspoding view's params are bloated and contain redundancy.
73    // (5) The whole thing should be moved to update.
74    // (6) A "create" should be added.
75
76    def save = {
77
78        def event = Event.get(params["id"])
79
80
81        if( event==null ) {                         // this is an entirely new event
82            render(action: "list", total:Event.count() )
83        }
84
85        params["startTime"] = parseDate(params["startTime"])     // parse the date strings
86        params["endTime"] = parseDate(params["endTime"])
87
88
89        // the Subject is automatically parsed
90        // update Event Description
91        def oldProtocol=event.eventDescription.protocol.id.toString()
92        def newProtocol=params["protocol.id"]
93        def protocolParameters = params["protocolParameter"]
94
95
96        if(oldProtocol<=>newProtocol) {                                             // protocol id changed
97            event.eventDescription=EventDescription.get(newProtocol)
98            event.parameterStringValues.clear()                                    // this does not propagate orphened parameters
99            def protocol=Protocol.get(newProtocol)
100            protocolParameters.each{ key, value ->
101                 def parameter=ProtocolParameter.get(key)
102                 event.parameterStringValues[key] = value
103            }
104        }
105        else                                                                       // protocol is the same, values changed
106        {
107            protocolParameters.each{ key, value ->
108                 def parameter=ProtocolParameter.get(key)
109                 event.parameterStringValues[key]=value
110            }
111
112        }
113
114        println "parameterStringValues: " + event.parameterStringValues
115
116        println "Old Protocol: " + event.eventDescription.protocol.id
117        println "New Protocol: " + params["protocol.id"]
118
119
120        println "Old: "
121        println event.parameterStringValues.each {
122                k,v -> println "${k}: ${v}\n"
123        }
124
125        println "New:"
126        protocolParameters.each{
127                k,v -> println "${k}: ${v}\n"
128        }
129
130        if (event.save(flush: true)) {
131            flash.message = "${message(code: 'default.created.message', args: [message(code: 'event.label', default: 'Event'), event.id])}"
132            redirect(action: "show", id: event.id)
133        }
134
135        render(action: "list", total:Event.count() )
136    }
137
138
139
140
141    def show = {
142        def eventInstance = Event.get(params.id)
143        if (!eventInstance) {
144            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'event.label', default: 'Event'), params.id])}"
145            redirect(action: "list")
146        }
147        else {
148            [eventInstance: eventInstance]
149        }
150    }
151
152
153
154
155
156    def partial = {
157        println "In action: partial"
158        println params
159        def eventDescription = EventDescription.get(params.id)
160        if (!eventDescription) {
161            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'event.label', default: 'Event'), params.id])}"
162            redirect(action: "list")
163        }
164        else {
165            [eventDescription: event]
166        }
167        redirect(view: 'partial')
168    }
169
170
171
172
173
174    def edit = {
175
176        if( params["id"]==null)
177        {
178            def eventInstance = new Event()
179            def sDate = new Date( params["startTime"])
180            def eDate = new Date( params["endTime"])
181            def description = EventDescription.findById((params["eventDescription"])["id"])
182            return [eventInstance:eventInstance, testo:params.clone(), sDate:sDate, eDate:eDate, description:description ]
183        }
184        else
185        {
186            def eventInstance = Event.get(params.id)
187            if (!eventInstance) {
188                flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'event.label', default: 'Event'), params.id])}"
189                redirect(action: "list")
190            }
191            return [eventInstance:eventInstance, testo:params.clone(), sDate:eventInstance.startTime, eDate:eventInstance.endTime, description:eventInstance.eventDescription]
192        }
193
194    }
195
196
197
198    def update = {
199        def eventInstance = Event.get(params.id)
200        if (eventInstance) {
201            if (params.version) {
202                def version = params.version.toLong()
203                if (eventInstance.version > version) {
204                   
205                    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")
206                    render(view: "edit", model: [eventInstance: eventInstance])
207                    return
208                }
209            }
210            eventInstance.properties = params
211            if (!eventInstance.hasErrors() && eventInstance.save(flush: true)) {
212                flash.message = "${message(code: 'default.updated.message', args: [message(code: 'event.label', default: 'Event'), eventInstance.id])}"
213                redirect(action: "show", id: eventInstance.id)
214            }
215            else {
216                render(view: "edit", model: [eventInstance: eventInstance])
217            }
218        }
219        else {
220            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'event.label', default: 'Event'), params.id])}"
221            redirect(action: "list")
222        }
223    }
224
225    def delete = {
226        def eventInstance = Event.get(params.id)
227        if (eventInstance) {
228            try {
229                eventInstance.delete(flush: true)
230                flash.message = "${message(code: 'default.deleted.message', args: [message(code: 'event.label', default: 'Event'), params.id])}"
231                redirect(action: "list")
232            }
233            catch (org.springframework.dao.DataIntegrityViolationException e) {
234                flash.message = "${message(code: 'default.not.deleted.message', args: [message(code: 'event.label', default: 'Event'), params.id])}"
235                redirect(action: "show", id: params.id)
236            }
237        }
238        else {
239            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'event.label', default: 'Event'), params.id])}"
240            redirect(action: "list")
241        }
242    }
243
244
245    def showSample = {
246          def samples = null
247          def event = Event.get(params.id)
248                                              // user wants this Event to be a SamplingEvent?
249          def wantSample = params.wantSample <=>'no'?true:false
250          print wantSample
251          if( event.isSamplingEvent() ) {
252              samples=event.samples
253              println "yes ${event.id}"
254          }
255          else    println "no ${event.id}"
256
257          render( view:"showSample", model:[samples:samples,wantSample:wantSample] )
258    }
259
260   
261}
Note: See TracBrowser for help on using the repository browser.