Changeset 248

Show
Ignore:
Timestamp:
08-03-10 23:58:23 (4 years ago)
Author:
jahn
Message:

Made controller for saving action used by create and edit. Still needs to be tested and debugged as well as adapted for the eaiser create case. Code needs to be cleaned up!

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/controllers/dbnp/studycapturing/EventDescriptionController.groovy

    r247 r248  
    1717    def create = { 
    1818        def eventDescriptionInstance = new EventDescription() 
    19         eventDescriptionInstance.properties = params 
    20         return [eventDescriptionInstance: eventDescriptionInstance] 
    21     } 
     19            render(view:'edit', model:[eventDescriptionInstance: eventDescriptionInstance] ) 
     20 
     21                /* 
     22        if (!eventDescriptionInstance) { 
     23            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'eventDescription.label', default: 'EventDescription'), params.id])}" 
     24            redirect(action: "list") 
     25        } 
     26        else { 
     27            render(view:'edit', model:[eventDescriptionInstance: eventDescriptionInstance] ) 
     28        } 
     29        */ 
     30    } 
     31 
    2232 
    2333    def save = { 
    24         def eventDescriptionInstance = new EventDescription(params) 
    25         if (eventDescriptionInstance.save(flush: true)) { 
    26             flash.message = "${message(code: 'default.created.message', args: [message(code: 'eventDescription.label', default: 'EventDescription'), eventDescriptionInstance.id])}" 
    27             redirect(action: "show", id: eventDescriptionInstance.id) 
    28         } 
    29         else { 
    30             render(view: "create", model: [eventDescriptionInstance: eventDescriptionInstance]) 
    31         } 
    32     } 
     34        println "save" 
     35        println params 
     36        params.each { println it } 
     37 
     38 
     39 
     40        def description = null      // the variable to be updated 
     41 
     42 
     43        /*  update an existing description */ 
     44 
     45        if(params['id']!='')  {              
     46 
     47 
     48            // STEP 0  - set variables 
     49 
     50            description = new EventDescription() 
     51            description.name=params['name'] 
     52            // description.description=params['description']   // has to be a Term 
     53            // description.classification=params['classification']  // has to be a Term 
     54            description.isSamplingEvent= params['isSample']=='true'?true:false 
     55 
     56            def protocol = Protocol.get(params['protocol'])   // the protocol 
     57 
     58            def parameters = [:]                   // parameters given by the user (in the view) 
     59                                                   // key: id (as string), value: non-persistant ProtocolParameter object 
     60 
     61            def options = [:]                      // store options, i.e. ParameterStringListItems given by the user 
     62                                                   // use ids of parameter as key, store hash of id and name 
     63 
     64 
     65 
     66 
     67            // STEP 1 parse params and fill hashes 
     68 
     69 
     70            // collect parameters from form 
     71            params.each { key, value -> 
     72                 if(key=~/row_(.*)__(.*)/) { 
     73                      def matcher = (key=~/row_(.*?)__(.*?)$/) 
     74                      println matcher[0][1]+'  '+matcher[0][2] 
     75                      def id = matcher[0][1] 
     76                      def member = matcher[0][2] 
     77 
     78                      println 'member: '+ member 
     79                      if(member=~/parameterStringValue__(.*?)$/) { 
     80                          matcher = member=~/parameterStringValue__(.*?)$/ 
     81                          def psv = matcher[0][1] 
     82                          println "${id}\t${psv}:\tvalue:${value}" 
     83                          if(options[id]==null) { options[id]=[:] }  // store paramter string value's id and value 
     84                          (options[id])[psv]=value 
     85                      } 
     86                      else if(member!='reference')  {  
     87                          if(parameters[id]==null) { parameters[id]=new ProtocolParameter() } 
     88 
     89                          if(member=~/^type.*/) { 
     90                               value= ProtocolParameterType.valueOf(value) 
     91                               member='type' 
     92                          } 
     93                          parameters[id].setProperty(member,value) 
     94                      } 
     95                 } 
     96            } 
     97 
     98println "here 1" 
     99 
     100            // collect options (i.e., ParameterStringListItem from parameters) 
     101            parameters.each{ key, value -> 
     102                if(value.type==ProtocolParameterType.STRINGLIST) { 
     103                    def parameter = parameters[key] 
     104                    options[key].each{k,v-> println "k: ${k}\t v:${v}" } // debug 
     105                } 
     106            } 
     107 
     108println "here 2" 
     109 
     110 
     111 
     112 
     113           // STEP 2  -  remove deleted parameters (from persistent protocol description) 
     114 
     115           protocol.parameters.each{  
     116               if( parameters[it.id.toString()]==null  ) 
     117                   { protocol.removeFromParameters(it.id) } 
     118           } 
     119 
     120println "here 3" 
     121 
     122 
     123           // STEP 3  -  update altered parameters 
     124 
     125           protocol.parameters.each{ inDb -> 
     126 
     127               def found = parameters[inDb.id.toString()] 
     128               //['name','type','description','reference','unit'].each { 
     129               // debugging: ignoring the reference !! 
     130               ['name','type','description','unit'].each { 
     131                   inDb.setProperty(it,found.getProperty(it)) 
     132               } 
     133 
     134 
     135               // update options (i.e. ParameterStringListItem objects) of parameter inDb 
     136               if(inDb.type==ProtocolParameterType.STRINGLIST ) { 
     137 
     138                       if(found.type==ProtocolParameterType.STRINGLIST ) { 
     139 
     140                            // add or modifiy options for existing parameters 
     141                            options[inDb.id.toString()].each{ id, name -> 
     142                                def item = inDb.listEntries.find{ it.id.toString()==id } 
     143                                if(!item) {  // add as new option to persistant parameter 
     144                                    item = new ParameterStringListItem() 
     145                                    item.name = name 
     146                                    inDb.addToListEntries(item) 
     147                                } 
     148                                else {       // update persistant paramter 
     149                                    item.name = name 
     150                                } 
     151                            } 
     152 
     153                            // remove options that have been deleted by the user 
     154                            def itemsToBeRemoved = [] 
     155                            inDb.listEntries.each { item -> 
     156                                 if( ! ((options[inDb.id.toString()])[item.id.toString()]) ) 
     157                                     { itemsToBeRemoved.push item } 
     158                            } 
     159                            itemsToBeRemoved.each { inDb.removeFromListEntries(it) } 
     160                       } 
     161 
     162               } 
     163               else {  
     164                        inDb.listEntries.collect{it}.each{ inDb.removeFromListEntries(it) } 
     165               } 
     166 
     167          } 
     168 
     169 
     170 
     171 
     172           // STEP 4  - add new parameters 
     173 
     174println "here 4" 
     175            // find new parameters, added by user 
     176            // remove all other parameters from paramters list 
     177            def newParameters = [:] 
     178            parameters.each{ key, value -> 
     179                if( ! protocol.parameters.find {it.id.toString()==key} ) { 
     180                    newParameters[key]=value 
     181                } 
     182            } 
     183            parameters=newParameters 
     184 
     185 
     186 
     187println "here 5" 
     188            //  add new parameters (to persistent protocolDescription) 
     189            parameters.each { id, parameter-> 
     190                def newParameter = new ProtocolParameter()                           // update properties 
     191                ['name','type','description','unit'].each { 
     192                    newParameter.setProperty( it, parameter.getProperty(it) ) 
     193                } 
     194 
     195                if(parameter.type==ProtocolParameterType.STRINGLIST) {               // update options 
     196                     options[id].each { someKey, name -> 
     197                         if(item==null) item = new ParameterStringListItem() 
     198                         item.name=name 
     199                         parameter.addToListEntries(item) 
     200                     } 
     201                } 
     202                description.addToListEntries(parameter) 
     203            } 
     204 
     205 
     206 
     207println "here 6" 
     208 
     209           // STEP 5  - make changes persitant 
     210 
     211 
     212            // compare paramters for protocol 
     213            def parametersFromUser = [] 
     214 
     215            // check whether all parameters are still part of the protocol 
     216            protocol.parameters 
     217 
     218        } 
     219 
     220        if (description.save(flush: true)) { 
     221            flash.message = "${message(code: 'default.created.message', args: [message(code: 'description.label', default: 'EventDescription'), description.id])}" 
     222            redirect(action: "show", id: description.id) 
     223        } 
     224        else { 
     225            render(view: "create", model: [description: description]) 
     226        } 
     227 
     228 
     229        render( action: 'list' ) 
     230    } 
     231 
    33232 
    34233    def show = { 
     
    46245 
    47246 
     247    def edit = { 
     248        def eventDescriptionInstance = EventDescription.get(params.id) 
     249        if (!eventDescriptionInstance) { 
     250            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'eventDescription.label', default: 'EventDescription'), params.id])}" 
     251            redirect(action: "list") 
     252        } 
     253        else { 
     254            return [eventDescriptionInstance: eventDescriptionInstance] 
     255        } 
     256    } 
     257 
     258 
     259 
    48260    def showMyProtocol = { 
    49         def description = EventDescription.get(params.id) 
    50         if( description.protocol==null ) { 
    51             protocol = new Protocol() 
    52             render( view:"showMyProtocolEmpty", model:[protocol:protocol,description:description] ) 
    53         } 
    54         else { 
     261        println "in showMyProtocol" 
     262        println params 
     263        if( EventDescription.get(params.id)==null || EventDescription.get(params.id).protocol==null ) { 
     264            println "in 1a" 
     265            def protocol = Protocol.find("from Protocol p where id>=0") 
     266            println "protocol: ${protocol}" 
     267            //def description = EventDescription.find("from EventDescription e where id>=0") 
     268            //println "description: ${description}" 
     269            def description=new EventDescription(); 
     270            render( view:"showMyProtocolFilled", model:[protocol:protocol,description:description] ) 
     271        } 
     272        else { 
     273            def description = EventDescription.get(params.id) 
    55274            render( view: "showMyProtocolFilled", model:[protocol:description.protocol,description:description] ) 
    56275        } 
     
    71290 
    72291 
    73     def edit = { 
    74         def eventDescriptionInstance = EventDescription.get(params.id) 
    75         if (!eventDescriptionInstance) { 
    76             flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'eventDescription.label', default: 'EventDescription'), params.id])}" 
    77             redirect(action: "list") 
    78         } 
    79         else { 
    80             return [eventDescriptionInstance: eventDescriptionInstance] 
    81         } 
    82     } 
    83292 
    84293    def update = { 
     294        println "update" 
     295        print params 
     296 
    85297        def eventDescriptionInstance = EventDescription.get(params.id) 
    86298        if (eventDescriptionInstance) { 
     
    110322 
    111323    def delete = { 
     324            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'eventDescription.label', default: 'EventDescription'), params.id])}" 
     325            redirect(action: "list") 
     326 
     327/* 
     328        // old shit 
    112329        def eventDescriptionInstance = EventDescription.get(params.id) 
    113330        if (eventDescriptionInstance) { 
     
    126343            redirect(action: "list") 
    127344        } 
     345        */ 
    128346    } 
    129347 
     
    149367 
    150368    def showProtocolParameters = { 
    151         println params 
    152  
    153369        def description = EventDescription.get(params.id) 
    154         def protocol =  description.protocol==null ? new Protocol() : description.protocol 
    155  
    156         if( params['addOneParameter']=='true') {    // add a new parameter 
    157             println "adding" 
    158             def parameter = new ProtocolParameter() 
    159             protocol.addToParameters(parameter) 
    160         } 
    161  
     370        def protocol = [] 
    162371        def list = [] 
     372 
     373        if(description!=null) {                           // editing an existing EventDescription 
     374            protocol = description.protocol==null ? new Protocol() : description.protocol 
     375        } 
     376        else {                                            // creating a new EventDescription 
     377           protocol=Protocol.find("from Protocol p where id>=0") 
     378        } 
     379 
    163380        protocol.parameters.each { 
    164381            list.add(it)