001 /**
002 * Copyright 2005-2012 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package edu.sampleu.demo.kitchensink;
017
018 import org.kuali.rice.krad.uif.view.DialogManager;
019 import org.kuali.rice.krad.web.controller.UifControllerBase;
020 import org.kuali.rice.krad.web.form.UifFormBase;
021 import org.springframework.stereotype.Controller;
022 import org.springframework.validation.BindingResult;
023 import org.springframework.web.bind.annotation.ModelAttribute;
024 import org.springframework.web.bind.annotation.RequestMapping;
025 import org.springframework.web.servlet.ModelAndView;
026
027 import javax.servlet.http.HttpServletRequest;
028 import javax.servlet.http.HttpServletResponse;
029
030 /**
031 * a controller for the configuration test view
032 *
033 * @author Kuali Rice Team (rice.collab@kuali.org)
034 */
035 @Controller
036 @RequestMapping(value = "/dialog-configuration-test")
037 public class DialogTestViewUifController extends UifControllerBase {
038
039 @Override
040 protected UifFormBase createInitialForm(HttpServletRequest request) {
041 return new UifDialogTestForm();
042 }
043
044 /**
045 * Displays page for testing dialogs
046 */
047 @Override
048 @RequestMapping(params = "methodToCall=start")
049 public ModelAndView start(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
050 HttpServletRequest request, HttpServletResponse response) {
051 return super.start(form, result, request, response);
052 }
053
054 /**
055 * Exercises the Dialog framework.
056 *
057 * <p>
058 * Asks a series of questions of the user while processing a client request. Demonstrates the ability to go back
059 * to the client bring up a Lightbox modal dialog.
060 * <br>
061 * Displays a few dialogs back to the user. First a yes/no dialog asking the user to pick an author.
062 * Depending on which author was chosen, the user is asked to select a book.
063 * The user is then given a chance to start the selection process over or continue on.
064 * </p>
065 *
066 * @param form - test form
067 * @param result - Spring form binding result
068 * @param request - http request
069 * @param response - http response
070 * @return
071 * @throws Exception
072 */
073 @RequestMapping(params = "methodToCall=save")
074 public ModelAndView save(@ModelAttribute("KualiForm") UifDialogTestForm form, BindingResult result,
075 HttpServletRequest request, HttpServletResponse response) throws Exception {
076 ModelAndView mv;
077
078 // dialog names
079 String dialog1 = "chooseAuthorDialog";
080 String dialog2a = "chooseEastmanBookDialog";
081 String dialog2b = "chooseSeussBookDialog";
082 String dialog3 = "myRestart";
083
084 // local copies of dialog answers
085 boolean whichAuthor = false;
086 String chosenBook;
087 boolean doRestart = false;
088
089 // choose which author
090 if (!hasDialogBeenAnswered(dialog1, form)){
091 // redirect back to client to display lightbox
092 return showDialog(dialog1, form, request, response);
093 }
094 whichAuthor = getBooleanDialogResponse(dialog1, form, request, response);
095
096 // continue on here if they answered the the first question
097 if (whichAuthor){
098 form.setField1("You Selected: P.D. Eastman");
099
100 // popup a 2nd consecutive dialog
101 if (!hasDialogBeenAnswered(dialog2a,form)){
102 // redirect back to client to display lightbox
103 return showDialog(dialog2a, form, request, response);
104 }
105 chosenBook = form.getDialogManager().getDialogExplanation(dialog2a);
106
107 // return back to the client displaying the choices
108 form.setField1("You selected: "+chosenBook+" by P.D. Eastman. Here we go...");
109 } else {
110 form.setField1("You Selected: Dr. Seuss");
111 // in this case, return to client and wait for them to submit again before showing next dialog
112 // In the above case, the 1st and 2nd dialog are displayed consecutively before returning to the client.
113 // But in this example, we return to the client and wait for them to hit the submit button again
114 if (!hasDialogBeenDisplayed(dialog2b, form)){
115 form.getDialogManager().addDialog(dialog2b, form.getMethodToCall());
116 return getUIFModelAndView(form, "DialogView-Page1");
117 }
118
119 // now display the dialog to choose which book
120 if (!hasDialogBeenAnswered(dialog2b, form)){
121 return showDialog(dialog2b, form, request, response);
122 }
123 chosenBook = form.getDialogManager().getDialogExplanation(dialog2b);
124
125 // display which story the user has selected
126 form.setField1("You selected: "+chosenBook+" by Dr. Seuss. Here we go...");
127 }
128
129 // Wait at the client page for another page submit
130 if (!hasDialogBeenDisplayed(dialog3, form)) {
131 form.getDialogManager().addDialog(dialog3, form.getMethodToCall());
132 return getUIFModelAndView(form, "DialogView-Page1");
133 };
134
135 // Ask them if they want to start over
136 if (!hasDialogBeenAnswered(dialog3,form)){
137 return showDialog(dialog3, form, request, response);
138 }
139 doRestart = getBooleanDialogResponse(dialog3, form, request, response);
140
141 // clear the dialog manager entries, so when we come back, we'll ask all the questions again
142 if (doRestart){
143 form.getDialogManager().removeAllDialogs();
144 form.setField1("Ok, let's start over.");
145 return getUIFModelAndView(form, "DialogView-Page1");
146 }
147
148 // we're done, go to the next page
149 return getUIFModelAndView(form, "DialogView-Page2");
150 }
151
152 /**
153 * not used at this time
154 *
155 * @param form - test form
156 * @param result - Spring form binding result
157 * @param request - http request
158 * @param response - http response
159 * @return
160 */
161 @RequestMapping(params = "methodToCall=goBack")
162 public ModelAndView goBack(@ModelAttribute("KualiForm") UifDialogTestForm form, BindingResult result,
163 HttpServletRequest request, HttpServletResponse response) {
164
165 // TODO: Put "Are Your Sure?" dialog here
166 form.getDialogManager().removeAllDialogs();
167 form.setField1("Ok, let's start over.");
168 return getUIFModelAndView(form, "DialogView-Page1");
169 }
170
171 /**
172 * Test method for a controller that invokes a dialog lightbox.
173 *
174 * @param form - test form
175 * @param result - Spring form binding result
176 * @param request - http request
177 * @param response - http response
178 * @return
179 * @throws Exception
180 */
181 @RequestMapping(params = "methodToCall=" + "doRadioDialogExample")
182 public ModelAndView doSomething(@ModelAttribute("KualiForm") UifDialogTestForm form, BindingResult result,
183 HttpServletRequest request, HttpServletResponse response) throws Exception {
184 String dialog1 = "sampleRadioButtonDialog";
185 if (!hasDialogBeenAnswered(dialog1, form)){
186 // redirect back to client to display lightbox
187 return showDialog(dialog1, form, request, response);
188 }
189 // Get value from chosen radio button
190 String choice = form.getDialogManager().getDialogExplanation(dialog1);
191 if (choice == null){
192 form.setField1("You didn't select one of the radio buttons");
193 } else {
194 form.setField1("You chose Radio Option "+choice);
195 }
196
197 // clear dialog history so they can press the button again
198 form.getDialogManager().removeDialog(dialog1);
199 // reload page1
200 return getUIFModelAndView(form, "DialogView-Page1");
201 }
202
203 /**
204 * Test method for a controller that invokes a dialog lightbox.
205 *
206 * @param form - test form
207 * @param result - Spring form binding result
208 * @param request - http request
209 * @param response - http response
210 * @return
211 * @throws Exception
212 */
213 @RequestMapping(params = "methodToCall=" + "doOkCancelExample")
214 public ModelAndView doOKCancelExample(@ModelAttribute("KualiForm") UifDialogTestForm form, BindingResult result,
215 HttpServletRequest request, HttpServletResponse response) throws Exception {
216 String dialog1 = "preDefinedDialogOkCancel";
217 if (!hasDialogBeenAnswered(dialog1, form)){
218 // redirect back to client to display lightbox
219 return showDialog(dialog1, form, request, response);
220 }
221 // Get user choice
222 boolean choice = getBooleanDialogResponse(dialog1, form, request, response);
223 StringBuilder sb = new StringBuilder("You selected ");
224 sb.append((choice)?"OK":"Cancel");
225 form.setField1(sb.toString());
226
227 // clear dialog history so they can press the button again
228 form.getDialogManager().removeDialog(dialog1);
229 // reload page1
230 return getUIFModelAndView(form, "DialogView-Page1");
231 }
232
233 /**
234 * Test method for a controller that invokes a dialog lightbox.
235 *
236 * @param form - test form
237 * @param result - Spring form binding result
238 * @param request - http request
239 * @param response - http response
240 * @return
241 * @throws Exception
242 */
243 @RequestMapping(params = "methodToCall=" + "doRegularGroupAsDialog")
244 public ModelAndView doRegularGroupAsDialog(@ModelAttribute("KualiForm") UifDialogTestForm form, BindingResult result,
245 HttpServletRequest request, HttpServletResponse response) throws Exception {
246 String dialog1 = "myRegularGroup";
247 if (!hasDialogBeenAnswered(dialog1, form)){
248 // redirect back to client to display lightbox
249 return showDialog(dialog1, form, request, response);
250 }
251 // Get value from chosen radio button
252 boolean choice = getBooleanDialogResponse(dialog1, form, request, response);
253 StringBuilder sb = new StringBuilder("You selected ");
254 sb.append((choice)?"Yes":"No");
255 form.setField1(sb.toString());
256
257 // clear dialog history so they can press the button again
258 form.getDialogManager().removeDialog(dialog1);
259 // reload page1
260 return getUIFModelAndView(form, "DialogView-Page1");
261 }
262
263
264 /**
265 * Test method for a controller that invokes a dialog lightbox.
266 *
267 * @param form - test form
268 * @param result - Spring form binding result
269 * @param request - http request
270 * @param response - http response
271 * @return
272 * @throws Exception
273 */
274 @RequestMapping(params = "methodToCall=" + "doExtendedDialog")
275 public ModelAndView doExtendedDialog(@ModelAttribute("KualiForm") UifDialogTestForm form, BindingResult result,
276 HttpServletRequest request, HttpServletResponse response) throws Exception {
277 String dialog1 = "extendedDialogGroup";
278 if (!hasDialogBeenAnswered(dialog1, form)){
279 // redirect back to client to display lightbox
280 return showDialog(dialog1, form, request, response);
281 }
282 // Get value from chosen radio button
283 boolean choice = getBooleanDialogResponse(dialog1, form, request, response);
284 StringBuilder sb = new StringBuilder("You selected ");
285 sb.append((choice)?"Yes":"No");
286 form.setField1(sb.toString());
287
288 // clear dialog history so they can press the button again
289 form.getDialogManager().removeDialog(dialog1);
290 // reload page1
291 return getUIFModelAndView(form, "DialogView-Page1");
292 }
293 }