View Javadoc

1   /**
2    * Copyright 2005-2012 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package edu.sampleu.demo.kitchensink;
17  
18  import org.kuali.rice.krad.uif.UifConstants;
19  import org.kuali.rice.krad.uif.view.DialogManager;
20  import org.kuali.rice.krad.web.controller.UifControllerBase;
21  import org.kuali.rice.krad.web.form.UifFormBase;
22  import org.springframework.stereotype.Controller;
23  import org.springframework.validation.BindingResult;
24  import org.springframework.web.bind.annotation.ModelAttribute;
25  import org.springframework.web.bind.annotation.RequestMapping;
26  import org.springframework.web.servlet.ModelAndView;
27  
28  import javax.servlet.http.HttpServletRequest;
29  import javax.servlet.http.HttpServletResponse;
30  
31  /**
32   * a controller for the configuration test view
33   *
34   * @author Kuali Rice Team (rice.collab@kuali.org)
35   */
36  @Controller
37  @RequestMapping(value = "/dialog-configuration-test")
38  public class DialogTestViewUifController extends UifControllerBase {
39  
40      @Override
41      protected UifFormBase createInitialForm(HttpServletRequest request) {
42          return new UifDialogTestForm();
43      }
44  
45      /**
46       * Displays page for testing dialogs
47       */
48      @Override
49      @RequestMapping(params = "methodToCall=start")
50      public ModelAndView start(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
51              HttpServletRequest request, HttpServletResponse response) {
52          return super.start(form, result, request, response);
53      }
54  
55      /**
56       * Exercises the Dialog framework.
57       *
58       * <p>
59       * Asks a series of questions of the user while processing a client request. Demonstrates the ability to go back
60       * to the client bring up a Lightbox modal dialog.
61       * <br>
62       * Displays a few dialogs back to the user. First a yes/no dialog asking the user to pick an author.
63       * Depending on which author was chosen, the user is asked to select a book.
64       * The user is then given a chance to start the selection process over or continue on.
65       * </p>
66       *
67       * @param form - test form
68       * @param result - Spring form binding result
69       * @param request - http request
70       * @param response - http response
71       * @return
72       * @throws Exception
73       */
74      @RequestMapping(params = "methodToCall=save")
75      public ModelAndView save(@ModelAttribute("KualiForm") UifDialogTestForm form, BindingResult result,
76              HttpServletRequest request, HttpServletResponse response) throws Exception {
77          ModelAndView mv;
78  
79          // dialog names
80          String dialog1 = "chooseAuthorDialog";
81          String dialog2a = "chooseEastmanBookDialog";
82          String dialog2b = "chooseSeussBookDialog";
83          String dialog3 = "myRestart";
84  
85          // local copies of dialog answers
86          boolean whichAuthor = false;
87          String chosenBook;
88          boolean doRestart = false;
89  
90          // choose which author
91          if (!hasDialogBeenAnswered(dialog1, form)){
92              // redirect back to client to display lightbox
93              return showDialog(dialog1, form, request, response);
94          }
95          whichAuthor = getBooleanDialogResponse(dialog1, form, request, response);
96  
97          // continue on here if they answered the the first question
98          if (whichAuthor){
99              form.setField1("You Selected: P.D. Eastman");
100 
101             // popup a 2nd consecutive dialog
102             if (!hasDialogBeenAnswered(dialog2a,form)){
103                 // redirect back to client to display lightbox
104                 return showDialog(dialog2a, form, request, response);
105             }
106             chosenBook = form.getDialogManager().getDialogExplanation(dialog2a);
107 
108             // return back to the client displaying the choices
109             form.setField1("You selected: "+chosenBook+" by P.D. Eastman. Here we go...");
110         } else {
111             form.setField1("You Selected: Dr. Seuss");
112             // in this case, return to client and wait for them to submit again before showing next dialog
113             // In the above case, the 1st and 2nd dialog are displayed consecutively before returning to the client.
114             // But in this example, we return to the client and wait for them to hit the submit button again
115             if (!hasDialogBeenDisplayed(dialog2b, form)){
116                 form.getDialogManager().addDialog(dialog2b, form.getMethodToCall());
117                 return getUIFModelAndView(form, "DialogView-Page1");
118             }
119 
120             // now display the dialog to choose which book
121             if (!hasDialogBeenAnswered(dialog2b, form)){
122                 return showDialog(dialog2b, form, request, response);
123             }
124             chosenBook = form.getDialogManager().getDialogExplanation(dialog2b);
125 
126             // display which story the user has selected
127             form.setField1("You selected: "+chosenBook+"  by Dr. Seuss. Here we go...");
128         }
129 
130         // Wait at the client page for another page submit
131         if (!hasDialogBeenDisplayed(dialog3, form)) {
132                 form.getDialogManager().addDialog(dialog3, form.getMethodToCall());
133                 return getUIFModelAndView(form, "DialogView-Page1");
134         };
135 
136         // Ask them if they want to start over
137         if (!hasDialogBeenAnswered(dialog3,form)){
138             return showDialog(dialog3, form, request, response);
139         }
140         doRestart = getBooleanDialogResponse(dialog3, form, request, response);
141 
142         // clear the dialog manager entries, so when we come back, we'll ask all the questions again
143         if (doRestart){
144             form.getDialogManager().removeAllDialogs();
145             form.setField1("Ok, let's start over.");
146             return getUIFModelAndView(form, "DialogView-Page1");
147         }
148 
149         // we're done, go to the next page
150         return getUIFModelAndView(form, "DialogView-Page2");
151     }
152 
153     /**
154      * not used at this time
155      *
156      * @param form - test form
157      * @param result - Spring form binding result
158      * @param request - http request
159      * @param response - http response
160      * @return
161      */
162     @RequestMapping(params = "methodToCall=goBack")
163     public ModelAndView goBack(@ModelAttribute("KualiForm") UifDialogTestForm form, BindingResult result,
164             HttpServletRequest request, HttpServletResponse response) {
165 
166 //      TODO: Put "Are Your Sure?" dialog here
167         form.getDialogManager().removeAllDialogs();
168         form.setField1("Ok, let's start over.");
169         return getUIFModelAndView(form, "DialogView-Page1");
170     }
171 
172     /**
173      * Test method for a controller that invokes a dialog lightbox.
174      *
175      * @param form - test form
176      * @param result - Spring form binding result
177      * @param request - http request
178      * @param response - http response
179      * @return
180      * @throws Exception
181      */
182     @RequestMapping(params = "methodToCall=" + "doRadioDialogExample")
183     public ModelAndView doSomething(@ModelAttribute("KualiForm") UifDialogTestForm form, BindingResult result,
184             HttpServletRequest request, HttpServletResponse response) throws Exception {
185         String dialog1 = "sampleRadioButtonDialog";
186         if (!hasDialogBeenAnswered(dialog1, form)){
187             // redirect back to client to display lightbox
188             return showDialog(dialog1, form, request, response);
189         }
190         // Get value from chosen radio button
191         String choice = form.getDialogManager().getDialogExplanation(dialog1);
192         if (choice == null){
193             form.setField1("You didn't select one of the radio buttons");
194         } else {
195             form.setField1("You chose Radio Option "+choice);
196         }
197 
198         // clear dialog history so they can press the button again
199         form.getDialogManager().removeDialog(dialog1);
200         // reload page1
201         return getUIFModelAndView(form, "DialogView-Page1");
202     }
203 
204     /**
205      * Test method for a controller that invokes a dialog lightbox.
206      *
207      * @param form - test form
208      * @param result - Spring form binding result
209      * @param request - http request
210      * @param response - http response
211      * @return
212      * @throws Exception
213      */
214     @RequestMapping(params = "methodToCall=" + "doOkCancelExample")
215     public ModelAndView doOKCancelExample(@ModelAttribute("KualiForm") UifDialogTestForm form, BindingResult result,
216             HttpServletRequest request, HttpServletResponse response) throws Exception {
217         String dialog1 = "preDefinedDialogOkCancel";
218         if (!hasDialogBeenAnswered(dialog1, form)){
219             // redirect back to client to display lightbox
220             return showDialog(dialog1, form, request, response);
221         }
222         // Get user choice
223         boolean choice = getBooleanDialogResponse(dialog1, form, request, response);
224         StringBuilder sb = new StringBuilder("You selected ");
225         sb.append((choice)?"OK":"Cancel");
226         form.setField1(sb.toString());
227 
228         // clear dialog history so they can press the button again
229         form.getDialogManager().removeDialog(dialog1);
230         // reload page1
231         return getUIFModelAndView(form, "DialogView-Page1");
232     }
233 
234     /**
235      * Test method for a controller that invokes a dialog lightbox.
236      *
237      * @param form - test form
238      * @param result - Spring form binding result
239      * @param request - http request
240      * @param response - http response
241      * @return
242      * @throws Exception
243      */
244     @RequestMapping(params = "methodToCall=" + "doRegularGroupAsDialog")
245     public ModelAndView doRegularGroupAsDialog(@ModelAttribute("KualiForm") UifDialogTestForm form, BindingResult result,
246             HttpServletRequest request, HttpServletResponse response) throws Exception {
247         String dialog1 = "myRegularGroup";
248         if (!hasDialogBeenAnswered(dialog1, form)){
249             // redirect back to client to display lightbox
250             return showDialog(dialog1, form, request, response);
251         }
252         // Get value from chosen radio button
253         boolean choice = getBooleanDialogResponse(dialog1, form, request, response);
254         StringBuilder sb = new StringBuilder("You selected ");
255         sb.append((choice)?"Yes":"No");
256         form.setField1(sb.toString());
257 
258         // clear dialog history so they can press the button again
259         form.getDialogManager().removeDialog(dialog1);
260         // reload page1
261         return getUIFModelAndView(form, "DialogView-Page1");
262     }
263 
264 
265     /**
266      * Test method for a controller that invokes a dialog lightbox.
267      *
268      * @param form - test form
269      * @param result - Spring form binding result
270      * @param request - http request
271      * @param response - http response
272      * @return
273      * @throws Exception
274      */
275     @RequestMapping(params = "methodToCall=" + "doExtendedDialog")
276     public ModelAndView doExtendedDialog(@ModelAttribute("KualiForm") UifDialogTestForm form, BindingResult result,
277             HttpServletRequest request, HttpServletResponse response) throws Exception {
278         String dialog1 = "extendedDialogGroup";
279         if (!hasDialogBeenAnswered(dialog1, form)){
280             // redirect back to client to display lightbox
281             return showDialog(dialog1, form, request, response);
282         }
283         // Get value from chosen radio button
284         boolean choice = getBooleanDialogResponse(dialog1, form, request, response);
285         StringBuilder sb = new StringBuilder("You selected ");
286         sb.append((choice)?"Yes":"No");
287         form.setField1(sb.toString());
288 
289         // clear dialog history so they can press the button again
290         form.getDialogManager().removeDialog(dialog1);
291         // reload page1
292         return getUIFModelAndView(form, "DialogView-Page1");
293     }
294     /**
295          * Test method for a controller that displays the response in a ightbox.
296          *
297          * @param form - test form
298          * @param result - Spring form binding result
299          * @param request - http request
300          * @param response - http response
301          * @return
302          * @throws Exception
303          */
304         @RequestMapping(params = "methodToCall=" + "doResponseInLightBox")
305         public ModelAndView doResponseInLightBox(@ModelAttribute("KualiForm") UifDialogTestForm form, BindingResult result,
306                 HttpServletRequest request, HttpServletResponse response) throws Exception {
307             String dialog1 = "myRegularGroup";
308             if (!hasDialogBeenAnswered(dialog1, form)){
309                 // redirect back to client to display lightbox
310                 return showDialog(dialog1, form, request, response);
311             }
312             // Get value from chosen radio button
313             boolean choice = getBooleanDialogResponse(dialog1, form, request, response);
314             StringBuilder sb = new StringBuilder("You selected ");
315             sb.append((choice)?"Yes":"No");
316             form.setField1(sb.toString());
317 
318             // clear dialog history so they can press the button again
319             form.getDialogManager().removeDialog(dialog1);
320             // reload page1
321             return getUIFModelAndView(form, "DialogView-Page1");
322         }
323 
324 }