Ignore:
Timestamp:
Mar 17, 2010, 12:35:31 PM (10 years ago)
Author:
duh
Message:
  • initial version of wizard storing data; known issue: while everything is saved properly, linked elements (subjects, events, etc) are not properly stored. I think it might be caused by the transaction in which everything is being done...
  • added date/year select to datepickers
  • added delete option to subjects view and controller logic
File:
1 edited

Legend:

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

    r260 r275  
    1010 * The wizard controller handles the handeling of pages and data flow
    1111 * through the study capturing wizard.
     12 *
     13 * TODO: refactor the 'handle*' methods to work as subflows instead
     14 *               of methods outside of the flow
    1215 *
    1316 * @author Jeroen Wesbeek
     
    160163                        }.to "subjects"
    161164                        on("next") {
    162                                 println params
    163165                                flash.errors = [:]
    164166
     
    175177                                }
    176178                        }.to "eventDescriptions"
     179                        on("delete") {
     180                                flash.errors = [:]
     181                                def delete = params.get('do') as int;
     182
     183                                // remove subject
     184                                if (flow.subjects[ delete ] && flow.subjects[ delete ] instanceof Subject) {
     185                                        flow.subjectTemplates.each() { templateName, templateData ->
     186                                                templateData.subjects.remove(delete)
     187                                        }
     188
     189                                        flow.subjects.remove( delete )
     190                                }
     191                        }.to "subjects"
    177192                        on("previous") {
    178193                                flash.errors = [:]
     
    306321
    307322                                // instantiate Event with parameters
    308                                 def event = new Event(params)
     323                                def event = (params.eventDescription.isSamplingEvent) ? new SamplingEvent(params) : new Event(params)
    309324
    310325                                // handle event groupings
     
    392407                        on("next") {
    393408                                flash.values = params
    394                                
    395409                                flash.errors = [:]
    396410
     
    417431                        on("toSubjects").to "subjects"
    418432                        on("toEvents").to "events"
    419                         on("previous") {
    420                                 // do nothing
    421                         }.to "events"
    422                         on("next") {
    423                                 // store everything in the database!
     433                        on("previous").to "events"
     434                        on("next").to "save"
     435                }
     436
     437                // store all study data
     438                save {
     439                        action {
     440                                println "saving..."
     441                                flash.errors = [:]
     442
     443                                // start transaction
     444                                def transaction = sessionFactory.getCurrentSession().beginTransaction()
     445
     446                                // persist data to the database
     447                                try {
     448                                        // save EventDescriptions
     449                                        flow.eventDescriptions.each() {
     450                                                if (!it.validate() || !it.save()) {
     451                                                        this.appendErrors(it, flash.errors)
     452                                                        throw new Exception('error saving eventDescription')
     453                                                }
     454                                                println "saved eventdescription "+it
     455                                        }
     456
     457                                        // save events
     458                                        flow.events.each() {
     459                                                if (!it.validate() || !it.save()) {
     460                                                        this.appendErrors(it, flash.errors)
     461                                                        throw new Exception('error saving event')
     462                                                }
     463                                                println "saved event "+it
     464
     465                                                // add to study
     466                                                if (it instanceof SamplingEvent) {
     467                                                        flow.study.addToSamplingEvents(it)
     468                                                } else {
     469                                                        flow.study.addToEvents(it)
     470                                                }
     471                                        }
     472
     473                                        // save eventGroups
     474                                        flow.eventGroups.each() {
     475                                                if (!it.validate() || !it.save()) {
     476                                                        this.appendErrors(it, flash.errors)
     477                                                        throw new Exception('error saving eventGroup')
     478                                                }
     479                                                println "saved eventGroup "+it
     480
     481                                                // add to study
     482                                                flow.study.addToEventGroups(it)
     483                                        }
     484                                       
     485                                        // save subjects
     486                                        flow.subjects.each() {
     487                                                if (!it.validate() || !it.save()) {
     488                                                        this.appendErrors(it, flash.errors)
     489                                                        throw new Exception('error saving subject')
     490                                                }
     491                                                println "saved subject "+it
     492
     493                                                // add this subject to the study
     494                                                flow.study.addToSubjects(it)
     495                                        }
     496
     497                                        // save study
     498                                        if (!flow.study.validate() || !flow.study.save()) {
     499                                                this.appendErrors(flow.study, flash.errors)
     500                                                throw new Exception('error saving study')
     501                                        }
     502                                        println "saved study "+flow.study+" (id: "+flow.study.id+")"
     503
     504                                } catch (Exception e) {
     505                                        // rollback
     506                                        println "rollback"
     507                                        transaction.rollback()
     508                                        error()
     509                                }
     510
     511                                // commit transaction
     512                                println "commit"
     513                                transaction.commit()
    424514                                success()
    425                         }.to "confirm"
     515                        }
     516                        on("error").to "error"
     517                        on(Exception).to "error"
     518                        on("success").to "done"
     519                }
     520
     521                // error storing data
     522                error {
     523                        render(view: "_error")
     524                        onRender {
     525                                flow.page = 6
     526                        }
     527                        on("next").to "save"
     528                        on("previous").to "events"
    426529                }
    427530
     
    430533                        render(view: "_done")
    431534                        onRender {
    432                                 flow.page = 6
     535                                flow.page = 7
    433536                        }
    434537                        on("previous") {
Note: See TracChangeset for help on using the changeset viewer.