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

Last change on this file since 150 was 150, checked in by jahn, 10 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.