source: trunk/grails-app/controllers/nmc/PilotController.groovy @ 1204

Last change on this file since 1204 was 1204, checked in by m.s.vanvliet@…, 11 years ago

Syncs all samples for assays on load Pilot/Show?...

  • Property svn:keywords set to Author Date Rev
File size: 6.4 KB
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: 1204 $
12 * $Author: m.s.vanvliet@lacdr.leidenuniv.nl $
13 * $Date: 2010-11-25 16:33:23 +0000 (do, 25 nov 2010) $
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                session.pilot = true
42               
43                def user = authenticationService.getLoggedInUser()
44                def max = Math.min(params.max ? params.int('max') : 10, 100)
45
46                def c = Study.createCriteria()
47
48                def studies
49                if( user == null ) {
50                        //login and return here...
51                        redirect(controller:"login", action:"auth")
52                        return false
53                       
54                } else {
55                        studies = c.list {
56                                maxResults(max)
57                                or {
58                                        eq( "owner", user )
59                                        writers {
60                                                eq( "id", user.id )
61                                        }
62                                        and {
63                                                readers {
64                                                        eq( "id", user.id )
65                                                }
66                                                eq( "published", true )
67                                        }
68                                }
69                        }
70                }
71               
72                def studyInstance = new Study()
73                studyInstance.properties = params
74               
75                [studyInstanceList: studies, studyInstance: studyInstance]
76    }
77
78    def list = {
79        params.max = Math.min(params.max ? params.int('max') : 10, 100)
80        [studyInstanceList: Study.list(params), studyInstanceTotal: Study.count()]
81    }
82         
83   def save = {
84           def studyInstance = new Study(params)
85           
86           //For Pilot we do not ask for code, we generate it for the user
87           studyInstance.code = params?.title?.encodeAsMD5()
88           studyInstance.owner = authenticationService.getLoggedInUser()
89           
90           def extraparams = new LinkedHashMap();
91
92           if( params[ 'dialog' ] ) {
93                 extraparams[ 'dialog' ] = params[ 'dialog' ]
94           }
95
96           if (studyInstance.save(flush: true)) {
97                   
98                   //Study was created, now setup a NMC - Metabolomics Assay for testing
99                   def assayInstance = new Assay()
100                   assayInstance.name = "${studyInstance.title} - Metabolomics Assay"
101                   assayInstance.module = AssayModule.findByName("Metabolomics module")
102                   assayInstance.externalAssayID = assayInstance?.name?.encodeAsMD5()
103                   studyInstance.addToAssays(assayInstance)
104                   assayInstance.save(flush: true)
105                                   
106                   //flash.message = "${message(code: 'default.created.message', args: [message(code: 'study.label', default: 'Study'), ( studyInstance.title ? studyInstance.title : "" ) + " " + ( studyInstance.code ? studyInstance.code : "" )])}"
107                   
108                   redirect(action: "show", id: studyInstance.id, params: extraparams )
109           }
110           else {
111                   render(view: "index", model: [studyInstance: studyInstance])
112           }
113   }
114   
115   def show = {
116                           
117           def studyInstance = Study.get(params.id)
118           if (!studyInstance) {
119                   flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'study.label', default: 'Study'), params.id])}"
120                   redirect(action: "list")
121           }
122           else {
123                   
124                   //add all samples to the assay when not there yet!
125                   studyInstance.assays.each { assay ->
126                           //if (assay.samples.size() <= 0){ // needs improving!!! too much overhead, okay for pilot
127                                   studyInstance.samples.each { sample ->
128                                           log.info("ADD THE DIRTY WAY!!!")
129                                           assay.addToSamples(sample)
130                                   }
131                                   assay.save()
132                           //}                     
133                   }
134                   
135                   [studyInstance: studyInstance]
136           }
137   }
138   
139   def edit = {
140           def studyInstance = Study.get(params.id)
141           if (!studyInstance) {
142                   flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'study.label', default: 'Study'), params.id])}"
143                   redirect(action: "list")
144           }
145           else {
146                   return [studyInstance: studyInstance]
147           }
148   }
149
150   def update = {
151           def studyInstance = Study.get(params.id)
152           
153           //For Pilot we do not ask for code, we generate it for the user
154           studyInstance.code = studyInstance?.title?.encodeAsMD5()
155
156           def extraparams = new LinkedHashMap();
157
158           if( params[ 'dialog' ] ) {
159                 extraparams[ 'dialog' ] = params[ 'dialog' ]
160           }
161
162           if (studyInstance) {
163                   if (params.version) {
164                           def version = params.version.toLong()
165                           if (studyInstance.version > version) {
166                                   
167                                   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")
168                                   render(view: "edit", model: [studyInstance: studyInstance])
169                                   return
170                           }
171                   }
172                   studyInstance.properties = params
173                   if (!studyInstance.hasErrors() && studyInstance.save(flush: true)) {
174                           flash.message = "${message(code: 'default.created.message', args: [message(code: 'study.label', default: 'Study'), ( studyInstance.title ? studyInstance.title : "" ) + " " + ( studyInstance.code ? studyInstance.code : "" )])}"
175                           redirect(action: "show", id: studyInstance.id, params: extraparams)
176                   }
177                   else {
178                           render(view: "edit", model: [studyInstance: studyInstance])
179                   }
180           }
181           else {
182                   flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'study.label', default: 'Study'), params.id])}"
183                   redirect(action: "list", params: extraparams)
184           }
185   }
186
187   def delete = {
188           def studyInstance = Study.get(params.id)
189
190           def extraparams = new LinkedHashMap();
191
192           if( params[ 'dialog' ] ) {
193                 extraparams[ 'dialog' ] = params[ 'dialog' ]
194           }
195
196           if (studyInstance) {
197                   def studyName = ( studyInstance.title ? studyInstance.title : "" ) + " " + ( studyInstance.code ? studyInstance.code : "" );
198                   try {
199                           studyInstance.delete(flush: true)
200                           flash.message = "${message(code: 'default.deleted.message', args: [message(code: 'study.label', default: 'Study'), studyName])}"
201                           redirect(action: "list", params: extraparams)
202                   }
203                   catch (org.springframework.dao.DataIntegrityViolationException e) {
204                           flash.message = "${message(code: 'default.not.deleted.message', args: [message(code: 'study.label', default: 'Study'), studyName])}"
205                           redirect(action: "show", id: params.id, params: extraparams)
206                   }
207           }
208           else {
209                   flash.message = "${message(code: 'default.not.deleted.message', args: [message(code: 'study.label', default: 'Study'), studyName])}"
210                   redirect(action: "list", params: extraparams)
211           }
212   }
213}
Note: See TracBrowser for help on using the repository browser.