source: trunk/grails-app/controllers/dbnp/studycapturing/WizardController.groovy @ 103

Last change on this file since 103 was 103, checked in by duh, 10 years ago
  • added error handling to the wizard
  • changed jquery-ui interface style to Redmond
  • Property svn:keywords set to Rev Author Date
File size: 2.9 KB
Line 
1package dbnp.studycapturing
2
3import dbnp.studycapturing.*
4import grails.converters.*
5
6/**
7 * Wizard Controler
8 *
9 * The wizard controller handles the handeling of pages and data flow
10 * through the study capturing wizard.
11 *
12 * @author Jeroen Wesbeek
13 * @since 20100107
14 * @package studycapturing
15 *
16 * Revision information:
17 * $Rev: 103 $
18 * $Author: duh $
19 * $Date: 2010-01-21 12:56:10 +0000 (do, 21 jan 2010) $
20 */
21class WizardController {
22        /**
23         * index method, redirect to the webflow
24         * @void
25         */
26        def index = {
27                /**
28                 * Do you believe it in your head?
29                 * I can go with the flow
30                 * Don't say it doesn't matter (with the flow) matter anymore
31                 * I can go with the flow (I can go)
32                 * Do you believe it in your head?
33                 */
34                redirect(action: 'pages')
35        }
36
37        /**
38         * WebFlow definition
39         * @see http://grails.org/WebFlow
40         * @void
41         */
42        def pagesFlow = {
43                // start the flow
44                onStart {
45                        println "wizard started"
46
47                        // define flow variables
48                        flow.page = 0
49                        flow.pages = [
50                                [title: 'Study'],
51                                [title: 'Twoooo'],
52                                [title: 'Trois']
53                        ]
54
55                }
56
57                // render the main wizard page
58                mainPage {
59                        render(view: "/wizard/index")
60                        onRender {
61                                flow.page = 1
62                        }
63                        on("next").to "study"
64                }
65
66                study {
67                        render(view: "_study")
68                        onRender {
69                                println "render page one"
70                                flow.page = 1
71                        }
72                        on("next") {
73                                // create a study instance
74                                println params
75                                flow.study = new Study(params)
76
77                                // validate study
78                                if (flow.study.validate()) {
79                                        println "study validates"
80                                } else {
81                                        // validation failed, feedback errors
82                                        flash.errors = new LinkedHashMap()
83                                        this.appendErrors(flow.study,flash.errors)
84                                        println "errorrrs"
85                                        println flash.errors
86                                        error()
87                                }
88                        }.to "pageTwo"
89                }
90
91                // render page two
92                pageTwo {
93                        render(view: "_two")
94                        onRender {
95                                println "render page two"
96                                flow.page = 2
97                        }
98                        on("next") {
99                                println "next page!"
100                        }.to "pageThree"
101                        on("previous") {
102                                println "previous page!"
103                        }.to "study"
104                }
105
106                // render page three
107                pageThree {
108                        render(view: "_three")
109                        onRender {
110                                println "render page three"
111                                flow.page = 3
112                        }
113                        on("previous") {
114                                println "previous page!"
115                        }.to "pageTwo"
116                }
117        }
118
119        /**
120         * transform domain class validation errors into a human readable
121         * linked hash map
122         * @param object validated domain class
123         * @returns object  linkedHashMap
124         */
125        def getHumanReadableErrors(object) {
126                def errors = new LinkedHashMap()
127
128                object.errors.getAllErrors().each() {
129                        errors[it.getArguments()[0]] = it.getDefaultMessage()
130                }
131
132                return errors
133        }
134
135        /**
136         * append errors of a particular object to a map
137         * @param object
138         * @param map linkedHashMap
139         * @void
140         */
141        def appendErrors(object, map) {
142                this.appendErrorMap(this.getHumanReadableErrors(object), map)
143        }
144
145        /**
146         * append errors of one map to another map
147         * @param map linkedHashMap
148         * @param map linkedHashMap
149         * @void
150         */
151        def appendErrorMap(map, mapToExtend) {
152                map.each() {key, value ->
153                        mapToExtend[key] = value
154                }
155        }
156
157}
Note: See TracBrowser for help on using the repository browser.