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

Last change on this file since 123 was 123, checked in by jahn, 10 years ago

The Term class has been seperately created in dbnp.studycapturing.data and dbnp.studycapturing.data. Since there is no big difference, I retracted the later domain class. This requried adjustment of some imports in the controllers.

File size: 8.7 KB
Line 
1package dbnp.studycapturing
2import java.text.SimpleDateFormat
3import dbnp.data.Term
4
5class EventController {
6
7    static allowedMethods = [save: "POST", update: "POST", delete: "POST"]
8
9    def index = {
10        redirect(action: "list", params: params)
11    }
12
13    def list = {
14        params.max = Math.min(params.max ? params.int('max') : 10, 100)
15        [eventInstanceList: Event.list(params), eventInstanceTotal: Event.count()]
16    }
17
18    def create = {
19        def eventInstance = new Event()
20        eventInstance.properties = params
21        //chain( view: "createForEventDescription", params:params )
22        return [eventInstance:eventInstance]
23    }
24
25
26    def createForEventDescription = {
27
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
53    def parseDate = {  st ->
54            def subst = st.substring(0,16)
55            def ampm =  st.substring(17,19)
56            if(ampm=="pm")
57            {
58                 def hours=st.substring(11,13)
59                 hours = hours.toInteger() + 12
60                 st = st.substring(0,11) + hours + st.substring(13,16)
61            }
62            else { st = st.substring(0,16) }
63
64            def sdfh = new SimpleDateFormat("MM/DD/yyyy hh:mm")
65            return sdfh.parse(st)
66    }
67
68
69    def save = {
70        println "In EventController.save: ${params}"
71
72        params["startTime"] = parseDate(params["startTime"])     // parse the date strings
73        params["endTime"] = parseDate(params["endTime"])
74
75        def eventInstance = new Event(params)
76
77        println params.protocolInstance
78                                                                  // If a protocol instnace already exists,
79                                                                  // update this event's parameter values.
80        if(params.protocolInstance != null) {
81            params.protocolInstance.each { id, value ->
82                    println id + " " + value
83                    def parameter = ProtocolParameterInstance.get(id)
84                    parameter.value=value
85                    parameter.save()
86                }
87        }
88
89        if (eventInstance.save(flush: true)) {
90            flash.message = "${message(code: 'default.created.message', args: [message(code: 'event.label', default: 'Event'), eventInstance.id])}"
91            redirect(action: "show", id: eventInstance.id)
92        }
93        else {
94            render(view: "create", model: [eventInstance: eventInstance])
95        }
96        render(view: "create", model: [eventInstance: eventInstance])
97    }
98
99
100    def show = {
101        def eventInstance = Event.get(params.id)
102        if (!eventInstance) {
103            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'event.label', default: 'Event'), params.id])}"
104            redirect(action: "list")
105        }
106        else {
107            [eventInstance: eventInstance]
108        }
109    }
110
111
112
113
114
115    def partial = {
116        println "In action: partial"
117        println params
118        def eventDescription = EventDescription.get(params.id)
119        if (!eventDescription) {
120            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'event.label', default: 'Event'), params.id])}"
121            redirect(action: "list")
122        }
123        else {
124            [eventDescription: event]
125        }
126        redirect(view: 'partial')
127    }
128
129
130
131
132
133    def edit = {
134
135        if( params["id"]==null)
136        {
137            def eventInstance = new Event()
138            def sDate = new Date( params["startTime"])
139            def eDate = new Date( params["endTime"])
140            def description = EventDescription.findById((params["eventDescription"])["id"])
141            return [testo:params.clone(), sDate:sDate, eDate:eDate, description:description ]
142        }
143
144        else
145        {
146            def eventInstance = Event.get(params.id)
147            if (!eventInstance) {
148                flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'event.label', default: 'Event'), params.id])}"
149                redirect(action: "list")
150            }
151            return [testo:params.clone(), sDate:eventInstance.startTime, eDate:eventInstance.endTime, description:eventInstance.eventDescription]
152        }
153
154    }
155
156
157
158
159
160    def update = {
161        def eventInstance = Event.get(params.id)
162        if (eventInstance) {
163            if (params.version) {
164                def version = params.version.toLong()
165                if (eventInstance.version > version) {
166                   
167                    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")
168                    render(view: "edit", model: [eventInstance: eventInstance])
169                    return
170                }
171            }
172            eventInstance.properties = params
173            if (!eventInstance.hasErrors() && eventInstance.save(flush: true)) {
174                flash.message = "${message(code: 'default.updated.message', args: [message(code: 'event.label', default: 'Event'), eventInstance.id])}"
175                redirect(action: "show", id: eventInstance.id)
176            }
177            else {
178                render(view: "edit", model: [eventInstance: eventInstance])
179            }
180        }
181        else {
182            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'event.label', default: 'Event'), params.id])}"
183            redirect(action: "list")
184        }
185    }
186
187    def delete = {
188        def eventInstance = Event.get(params.id)
189        if (eventInstance) {
190            try {
191                eventInstance.delete(flush: true)
192                flash.message = "${message(code: 'default.deleted.message', args: [message(code: 'event.label', default: 'Event'), params.id])}"
193                redirect(action: "list")
194            }
195            catch (org.springframework.dao.DataIntegrityViolationException e) {
196                flash.message = "${message(code: 'default.not.deleted.message', args: [message(code: 'event.label', default: 'Event'), params.id])}"
197                redirect(action: "show", id: params.id)
198            }
199        }
200        else {
201            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'event.label', default: 'Event'), params.id])}"
202            redirect(action: "list")
203        }
204    }
205
206
207
208    def createDummies = {
209
210         ["ONE","TWO"].each{ x -> println x }
211         def t = new Term()
212         t.name =  "homo politicus russicus"
213         t.ontology = "Ontology: Monkies and Typewriters"
214         t.accession = "up or down"
215         t.save()
216
217         def pp = new ProtocolParameter()
218         pp.name = "LSD reatment"
219         pp.unit = "Tt"
220         pp.description = "feed the LSD to the subject"
221         pp.reference = t
222         pp.type = "String"     // should become ProtocolParameterType at some point
223         pp.save()
224
225         def p = new Protocol()
226         p.name = "Hugo (dummy #1)"
227         p.reference = t
228         p.save()
229         p.addToParameters(pp)
230
231         def ppi = new ProtocolParameterInstance()
232         ppi.value = "1.2"
233         ppi.protocolParameter = pp
234         ppi.save()
235
236         def ppi2 = new ProtocolParameterInstance()
237         ppi2.value = "23.5"
238         ppi2.protocolParameter = pp
239         ppi2.save()
240
241         def pi = new ProtocolInstance()
242         pi.protocol = p.find("from Protocol p ")
243         pi.save()
244         pi.addToValues(ppi)
245         pi.addToValues(ppi2)
246
247         def s= new Subject()
248         s.name = "Vladimir Putin"
249         s.species = t
250         s.save()
251
252         def ed = new EventDescription()
253         ed.name = "dummmy name"
254         ed.description = "dummmy description"
255         ed.protocol = pi
256         ed.classification = Term.find("from Term t")
257         ed.save()
258
259         def sdfh = new SimpleDateFormat("dd/MM/yyyy hh:mm")
260         def eventInstance = new Event()
261         def someDate = sdfh.parse("29/11/2008 18:00")
262         eventInstance.subject = s
263         eventInstance.eventDescription= ed
264         eventInstance.startTime = someDate
265         eventInstance.endTime = someDate
266         if( eventInstance.save() )
267         { redirect( action:show, id: eventInstance.id ) }
268         else { chain( action:list ) }
269
270
271
272    }
273}
Note: See TracBrowser for help on using the repository browser.