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

Last change on this file since 105 was 105, checked in by duh, 10 years ago
  • Firefox 3.6 + firebug's XMLHttpRequest option break the wizard, submitted a bug report and added some feedback to the wizard for this particular bug
  • Some wizard changes
  • Property svn:keywords set to Rev Author Date
File size: 3.0 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: 105 $
18 * $Author: duh $
19 * $Date: 2010-01-22 11:37:14 +0000 (vr, 22 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'],               // study
51                                [title: 'Twoooo'],
52                                [title: 'Trois']
53                        ]
54
55                }
56
57                // render the main wizard page which immediately
58                // triggers the 'next' action (hence, the main
59                // page dynamically renders the study template
60                // and makes the flow jump to the study logic)
61                mainPage {
62                        render(view: "/wizard/index")
63                        onRender {
64                                flow.page = 1
65                        }
66                        on("next").to "study"
67                }
68
69                // render the study page and handle study logic
70                study {
71                        render(view: "_study")
72                        onRender {
73                                println "render page one"
74                                flow.page = 1
75                        }
76                        on("next") {
77                                // create a study instance
78                                flow.study = new Study(params)
79
80                                // validate study
81                                if (flow.study.validate()) {
82                                        success()
83                                } else {
84                                        // validation failed, feedback errors
85                                        flash.errors = new LinkedHashMap()
86                                        this.appendErrors(flow.study,flash.errors)
87                                        error()
88                                }
89                        }.to "pageTwo"
90                }
91
92                // render page two
93                pageTwo {
94                        render(view: "_two")
95                        onRender {
96                                println "render page two"
97                                flow.page = 2
98                        }
99                        on("next") {
100                                println "next page!"
101                        }.to "pageThree"
102                        on("previous") {
103                                println "previous page!"
104                        }.to "study"
105                }
106
107                // render page three
108                pageThree {
109                        render(view: "_three")
110                        onRender {
111                                println "render page three"
112                                flow.page = 3
113                        }
114                        on("previous") {
115                                println "previous page!"
116                        }.to "pageTwo"
117                }
118        }
119
120        /**
121         * transform domain class validation errors into a human readable
122         * linked hash map
123         * @param object validated domain class
124         * @returns object  linkedHashMap
125         */
126        def getHumanReadableErrors(object) {
127                def errors = new LinkedHashMap()
128
129                object.errors.getAllErrors().each() {
130                        errors[it.getArguments()[0]] = it.getDefaultMessage()
131                }
132
133                return errors
134        }
135
136        /**
137         * append errors of a particular object to a map
138         * @param object
139         * @param map linkedHashMap
140         * @void
141         */
142        def appendErrors(object, map) {
143                this.appendErrorMap(this.getHumanReadableErrors(object), map)
144        }
145
146        /**
147         * append errors of one map to another map
148         * @param map linkedHashMap
149         * @param map linkedHashMap
150         * @void
151         */
152        def appendErrorMap(map, mapToExtend) {
153                map.each() {key, value ->
154                        mapToExtend[key] = value
155                }
156        }
157}
Note: See TracBrowser for help on using the repository browser.