Ignore:
Timestamp:
Feb 26, 2010, 3:23:03 PM (12 years ago)
Author:
duh
Message:
  • event grouping data is now handled properly
  • added image support to ajaxButton which now renders to an "input type='image'" instead of the default "input type='button'"
  • changed some in grouping to famfamfam icons
  • evenGroup deletions
  • eventGroup names are now uniquely generated
  • improved CSS
  • improved javascript
File:
1 edited

Legend:

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

    r213 r216  
    5252                                [title: 'Event Descriptions'],  // event descriptions
    5353                                [title: 'Events'],                              // events
    54                                 [title: 'Confirmation'],        // confirmation page
     54                                [title: 'Confirmation'],                // confirmation page
    5555                                [title: 'Done']                                 // finish page
    5656                        ]
     
    271271
    272272                                // get eventDescription instance by name
    273                                 params.eventDescription = this.getObjectByName(params.get('eventDescription'),flow.eventDescriptions)
     273                                params.eventDescription = this.getObjectByName(params.get('eventDescription'), flow.eventDescriptions)
    274274
    275275                                // instantiate Event with parameters
    276276                                def event = new Event(params)
     277
     278                                // handle event groupings
     279                                this.handleEventGrouping(flow, flash, params)
    277280
    278281                                // validate event
     
    287290                                        this.appendErrors(event, flash.errors)
    288291
    289                                         flash.startTime                 = params.startTime
    290                                         flash.endTime                   = params.endTime
    291                                         flash.eventDescription  = params.eventDescription
    292                                        
     292                                        flash.startTime = params.startTime
     293                                        flash.endTime = params.endTime
     294                                        flash.eventDescription = params.eventDescription
     295
    293296                                        error()
    294297                                }
     
    296299                        on("addEventGroup") {
    297300                                def increment = flow.eventGroups.size()
    298                                 flow.eventGroups[ increment ] = new EventGroup(name: "Group "+(increment+1))
     301                                def groupName = "Group " + (increment + 1)
     302
     303                                // check if group name exists
     304                                def nameExists = true
     305                                def u = 0
     306
     307                                // make sure a unique name is generated
     308                                while (nameExists) {
     309                                        u++
     310                                        def count = 0
     311                                       
     312                                        flow.eventGroups.each() {
     313                                                if (it.name == groupName) {
     314                                                        groupName = "Group " + (increment + 1) + "," + u
     315                                                } else {
     316                                                        count++
     317                                                }
     318                                        }
     319
     320                                        nameExists = !(count == flow.eventGroups.size())
     321                                }
     322
     323                                flow.eventGroups[increment] = new EventGroup(name: groupName)
     324                        }.to "events"
     325                        on("deleteEventGroup") {
     326                                def delete = params.get('do') as int;
     327
     328                                // handle event groupings
     329                                this.handleEventGrouping(flow, flash, params)
     330
     331                                // remove the group with this specific id
     332                                if (flow.eventGroups[delete] && flow.eventGroups[delete] instanceof EventGroup) {
     333                                        // remove this eventGroup
     334                                        flow.eventGroups.remove(delete)
     335                                }
    299336                        }.to "events"
    300337                        on("previous") {
    301                                 // TODO
     338                                // handle event groupings
     339                                this.handleEventGrouping(flow, flash, params)
    302340                        }.to "eventDescriptions"
    303341                        on("next") {
    304342                                flash.errors = new LinkedHashMap()
     343
     344                                // handle event groupings
     345                                this.handleEventGrouping(flow, flash, params)
    305346
    306347                                // check if we have at least one subject
     
    312353                                        error()
    313354                                }
    314                         }.to "confirm"
     355                        }.to "events"
    315356                }
    316357
     
    338379                                // TODO
    339380                        }.to "confirm"
     381                }
     382        }
     383
     384        /**
     385         * re-usable code for handling event grouping in a web flow
     386         * @param Map LocalAttributeMap (the flow scope)
     387         * @param Map localAttributeMap (the flash scope)
     388         * @param Map GrailsParameterMap (the flow parameters = form data)
     389         * @returns boolean
     390         */
     391        def handleEventGrouping(flow, flash, params) {
     392                // walk through eventGroups
     393                def g = 0
     394                flow.eventGroups.each() {
     395                        def e = 0
     396                        def eventGroup = it
     397
     398                        // reset events
     399                        eventGroup.events = new HashSet()
     400
     401                        // walk through events
     402                        flow.events.each() {
     403                                if (params.get('event_' + e + '_group_' + g) == 'on') {
     404                                        eventGroup.addToEvents(it)
     405                                        //} else {
     406                                        //      eventGroup.events.minus(it)
     407                                }
     408                                e++
     409                        }
     410                        g++
    340411                }
    341412        }
     
    396467
    397468                flow.eventDescriptions.each() {
    398                         it.name                         = params.get('eventDescription_' + id + '_name')
    399                         it.description          = params.get('eventDescription_' + id + '_description')
    400                         it.classification       = Term.findByName(params.get('eventDescription_' + id + '_classification'))
    401                         it.isSamplingEvent      = (params.containsKey('eventDescription_' + id + '_isSamplingEvent'))
     469                        it.name = params.get('eventDescription_' + id + '_name')
     470                        it.description = params.get('eventDescription_' + id + '_description')
     471                        it.classification = Term.findByName(params.get('eventDescription_' + id + '_classification'))
     472                        it.isSamplingEvent = (params.containsKey('eventDescription_' + id + '_isSamplingEvent'))
    402473
    403474                        // validate eventDescription
     
    443514                                        // yeah, also mention the first
    444515                                        // occurrence in the error message
    445                                         this.appendErrorMap(name: 'The subject name needs to be unique!', flash.errors, 'subject_'+names[it.name]['firstId']+'_')
     516                                        this.appendErrorMap(name: 'The subject name needs to be unique!', flash.errors, 'subject_' + names[it.name]['firstId'] + '_')
    446517                                }
    447518
    448519                                // add to error map
    449                                 this.appendErrorMap([name: 'The subject name needs to be unique!'], flash.errors, 'subject_'+id+'_')
     520                                this.appendErrorMap([name: 'The subject name needs to be unique!'], flash.errors, 'subject_' + id + '_')
    450521                                errors = true
    451522                        }
     
    502573        }
    503574
    504 
    505575        /**
    506576         * return the object from a map of objects by searching for a name
    507          * @param String        name
    508          * @param Map           map of objects
     577         * @param String name
     578         * @param Map map of objects
    509579         * @return Object
    510580         */
     
    545615                this.appendErrorMap(this.getHumanReadableErrors(object), map)
    546616        }
     617
    547618        def appendErrors(object, map, prepend) {
    548619                this.appendErrorMap(this.getHumanReadableErrors(object), map, prepend)
     
    560631                }
    561632        }
     633
    562634        def appendErrorMap(map, mapToExtend, prepend) {
    563635                map.each() {key, value ->
Note: See TracChangeset for help on using the changeset viewer.