root/trunk/grails-app/controllers/nmc/PilotController.groovy @ 1049

Revision 1049, 5.8 KB (checked in by m.s.vanvliet@…, 3 years ago)

Pilot almost there...

  • Property svn:keywords set to Author Date Rev
Line 
1/**
2 * PilotController Controler
3 *
4 * Description of my controller
5 *
6 * @author  m.s.vanvliet@lacdr.leidenuniv.nl (Michael van Vliet)
7 * @since       20101019
8 * @package     nmc
9 *
10 * Revision information:
11 * $Rev$
12 * $Author$
13 * $Date$
14 */
15package nmc
16
17import dbnp.studycapturing.*;
18
19class PilotController {
20       
21        def authenticationService
22       
23        static allowedMethods = [save: "POST", update: "POST", delete: "POST"]
24       
25        /**
26        * Fires after every action and determines the layout of the page
27        */
28   def afterInterceptor = { model, modelAndView ->
29         
30         if ( params['dialog'] ) {
31           model.layout = 'dialog';
32           model.extraparams = [ 'dialog': 'true' ] ;
33         } else {
34           model.layout = 'main';
35           model.extraparams = [] ;
36         }
37   }
38       
39    def index = {
40               
41                def studyInstance = new Study()
42                studyInstance.properties = params
43               
44                [studyInstanceList: Study.list(params), studyInstance: studyInstance]
45    }
46
47    def list = {
48        params.max = Math.min(params.max ? params.int('max') : 10, 100)
49        [studyInstanceList: Study.list(params), studyInstanceTotal: Study.count()]
50    }
51         
52   def save = {
53           def studyInstance = new Study(params)
54           
55           //For Pilot we do not ask for code, we generate it for the user
56           studyInstance.code = params?.title?.encodeAsMD5()
57           studyInstance.owner = authenticationService.getLoggedInUser()
58           
59           def extraparams = new LinkedHashMap();
60
61           if( params[ 'dialog' ] ) {
62                 extraparams[ 'dialog' ] = params[ 'dialog' ]
63           }
64
65           if (studyInstance.save(flush: true)) {
66                   
67                   //Study was created, now setup a NMC - Metabolomics Assay for testing
68                   def assayInstance = new Assay()
69                   assayInstance.name = "${studyInstance.title} - Metabolomics Assay"
70                   assayInstance.module = AssayModule.findByName("Metabolomics module")
71                   assayInstance.externalAssayID = assayInstance?.name?.encodeAsMD5()
72                   studyInstance.addToAssays(assayInstance)
73                   assayInstance.save(flush: true)
74                                   
75                   //flash.message = "${message(code: 'default.created.message', args: [message(code: 'study.label', default: 'Study'), ( studyInstance.title ? studyInstance.title : "" ) + " " + ( studyInstance.code ? studyInstance.code : "" )])}"
76                   
77                   redirect(action: "show", id: studyInstance.id, params: extraparams )
78           }
79           else {
80                   render(view: "index", model: [studyInstance: studyInstance])
81           }
82   }
83   
84   def show = {
85                           
86           def studyInstance = Study.get(params.id)
87           if (!studyInstance) {
88                   flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'study.label', default: 'Study'), params.id])}"
89                   redirect(action: "list")
90           }
91           else {
92                   
93                   //add all samples to the assay when not there yet!
94                   studyInstance.assays.each { assay ->
95                           if (assay.samples.size() <= 0){
96                                   studyInstance.samples.each { sample ->
97                                           log.info("ADD THE DIRTY WAY!!!")
98                                           assay.addToSamples(sample)
99                                   }
100                                   assay.save()
101                           }                       
102                   }
103                   
104                   [studyInstance: studyInstance]
105           }
106   }
107   
108   def edit = {
109           def studyInstance = Study.get(params.id)
110           if (!studyInstance) {
111                   flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'study.label', default: 'Study'), params.id])}"
112                   redirect(action: "list")
113           }
114           else {
115                   return [studyInstance: studyInstance]
116           }
117   }
118
119   def update = {
120           def studyInstance = Study.get(params.id)
121           
122           //For Pilot we do not ask for code, we generate it for the user
123           studyInstance.code = studyInstance?.title?.encodeAsMD5()
124
125           def extraparams = new LinkedHashMap();
126
127           if( params[ 'dialog' ] ) {
128                 extraparams[ 'dialog' ] = params[ 'dialog' ]
129           }
130
131           if (studyInstance) {
132                   if (params.version) {
133                           def version = params.version.toLong()
134                           if (studyInstance.version > version) {
135                                   
136                                   studyInstance.errors.rejectValue("version", "default.optimistic.locking.failure", [message(code: 'study.label', default: 'Study')] as Object[], "Another user has updated this Study while you were editing")
137                                   render(view: "edit", model: [studyInstance: studyInstance])
138                                   return
139                           }
140                   }
141                   studyInstance.properties = params
142                   if (!studyInstance.hasErrors() && studyInstance.save(flush: true)) {
143                           flash.message = "${message(code: 'default.created.message', args: [message(code: 'study.label', default: 'Study'), ( studyInstance.title ? studyInstance.title : "" ) + " " + ( studyInstance.code ? studyInstance.code : "" )])}"
144                           redirect(action: "show", id: studyInstance.id, params: extraparams)
145                   }
146                   else {
147                           render(view: "edit", model: [studyInstance: studyInstance])
148                   }
149           }
150           else {
151                   flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'study.label', default: 'Study'), params.id])}"
152                   redirect(action: "list", params: extraparams)
153           }
154   }
155
156   def delete = {
157           def studyInstance = Study.get(params.id)
158
159           def extraparams = new LinkedHashMap();
160
161           if( params[ 'dialog' ] ) {
162                 extraparams[ 'dialog' ] = params[ 'dialog' ]
163           }
164
165           if (studyInstance) {
166                   def studyName = ( studyInstance.title ? studyInstance.title : "" ) + " " + ( studyInstance.code ? studyInstance.code : "" );
167                   try {
168                           studyInstance.delete(flush: true)
169                           flash.message = "${message(code: 'default.deleted.message', args: [message(code: 'study.label', default: 'Study'), studyName])}"
170                           redirect(action: "list", params: extraparams)
171                   }
172                   catch (org.springframework.dao.DataIntegrityViolationException e) {
173                           flash.message = "${message(code: 'default.not.deleted.message', args: [message(code: 'study.label', default: 'Study'), studyName])}"
174                           redirect(action: "show", id: params.id, params: extraparams)
175                   }
176           }
177           else {
178                   flash.message = "${message(code: 'default.not.deleted.message', args: [message(code: 'study.label', default: 'Study'), studyName])}"
179                   redirect(action: "list", params: extraparams)
180           }
181   }
182}
Note: See TracBrowser for help on using the browser.