001    /**
002     * Copyright 2005-2014 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.UifConstants;
019    import org.kuali.rice.krad.uif.view.DialogManager;
020    import org.kuali.rice.krad.web.controller.UifControllerBase;
021    import org.kuali.rice.krad.web.form.UifFormBase;
022    import org.springframework.stereotype.Controller;
023    import org.springframework.validation.BindingResult;
024    import org.springframework.web.bind.annotation.ModelAttribute;
025    import org.springframework.web.bind.annotation.RequestMapping;
026    import org.springframework.web.servlet.ModelAndView;
027    
028    import javax.servlet.http.HttpServletRequest;
029    import javax.servlet.http.HttpServletResponse;
030    
031    /**
032     * a controller for the configuration test view
033     *
034     * @author Kuali Rice Team (rice.collab@kuali.org)
035     */
036    @Controller
037    @RequestMapping(value = "/dialog-configuration-test")
038    public class DialogTestViewUifController extends UifControllerBase {
039    
040        @Override
041        protected UifFormBase createInitialForm(HttpServletRequest request) {
042            return new UifDialogTestForm();
043        }
044    
045        /**
046         * Displays page for testing dialogs
047         */
048        @Override
049        @RequestMapping(params = "methodToCall=start")
050        public ModelAndView start(@ModelAttribute("KualiForm") UifFormBase form,
051                HttpServletRequest request, HttpServletResponse response) {
052            return super.start(form, request, response);
053        }
054    
055        /**
056         * Exercises the Dialog framework.
057         *
058         * <p>
059         * Asks a series of questions of the user while processing a client request. Demonstrates the ability to go back
060         * to the client bring up a Lightbox modal dialog.
061         * <br>
062         * Displays a few dialogs back to the user. First a yes/no dialog asking the user to pick an author.
063         * Depending on which author was chosen, the user is asked to select a book.
064         * The user is then given a chance to start the selection process over or continue on.
065         * </p>
066         *
067         * @param form - test form
068         * @param result - Spring form binding result
069         * @param request - http request
070         * @param response - http response
071         * @return
072         * @throws Exception
073         */
074        @RequestMapping(params = "methodToCall=save")
075        public ModelAndView save(@ModelAttribute("KualiForm") UifDialogTestForm form, BindingResult result,
076                HttpServletRequest request, HttpServletResponse response) throws Exception {
077            ModelAndView mv;
078    
079            // dialog names
080            String dialog1 = "chooseAuthorDialog";
081            String dialog2a = "chooseEastmanBookDialog";
082            String dialog2b = "chooseSeussBookDialog";
083            String dialog3 = "myRestart";
084    
085            // local copies of dialog answers
086            boolean whichAuthor = false;
087            String chosenBook;
088            boolean doRestart = false;
089    
090            // choose which author
091            if (!hasDialogBeenAnswered(dialog1, form)){
092                // redirect back to client to display lightbox
093                return showDialog(dialog1, form, request, response);
094            }
095            whichAuthor = getBooleanDialogResponse(dialog1, form, request, response);
096    
097            // continue on here if they answered the the first question
098            if (whichAuthor){
099                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         * Test method for a controller that invokes a dialog to test expression evaluation.
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=" + "testExpressionDialog")
275        public ModelAndView testExpressionDialog(@ModelAttribute("KualiForm") UifDialogTestForm form, BindingResult result,
276                HttpServletRequest request, HttpServletResponse response) throws Exception {
277            String dialog4 = "schedulingConfirmDialog";
278            if (!hasDialogBeenAnswered(dialog4, form)) {
279                // set the value for field3 which will be evaluated
280                form.setField3("TestVal");
281    
282                // redirect back to client to display lightbox
283                return showDialog(dialog4, form, request, response);
284            }
285    
286            // clear dialog history so they can press the button again
287            form.getDialogManager().removeDialog(dialog4);
288    
289            // reload page1
290            return getUIFModelAndView(form, "DialogView-Page1");
291        }
292    
293        /**
294         * Test method for a controller that invokes a dialog lightbox.
295         *
296         * @param form - test form
297         * @param result - Spring form binding result
298         * @param request - http request
299         * @param response - http response
300         * @return
301         * @throws Exception
302         */
303        @RequestMapping(params = "methodToCall=" + "doExtendedDialog")
304        public ModelAndView doExtendedDialog(@ModelAttribute("KualiForm") UifDialogTestForm form, BindingResult result,
305                HttpServletRequest request, HttpServletResponse response) throws Exception {
306            String dialog1 = "extendedDialogGroup";
307            if (!hasDialogBeenAnswered(dialog1, form)){
308                // redirect back to client to display lightbox
309                return showDialog(dialog1, form, request, response);
310            }
311            // Get value from chosen radio button
312            boolean choice = getBooleanDialogResponse(dialog1, form, request, response);
313            StringBuilder sb = new StringBuilder("You selected ");
314            sb.append((choice)?"Yes":"No");
315            form.setField1(sb.toString());
316    
317            // clear dialog history so they can press the button again
318            form.getDialogManager().removeDialog(dialog1);
319            // reload page1
320            return getUIFModelAndView(form, "DialogView-Page1");
321        }
322        /**
323             * Test method for a controller that displays the response in a ightbox.
324             *
325             * @param form - test form
326             * @param result - Spring form binding result
327             * @param request - http request
328             * @param response - http response
329             * @return
330             * @throws Exception
331             */
332            @RequestMapping(params = "methodToCall=" + "doResponseInLightBox")
333            public ModelAndView doResponseInLightBox(@ModelAttribute("KualiForm") UifDialogTestForm form, BindingResult result,
334                    HttpServletRequest request, HttpServletResponse response) throws Exception {
335                String dialog1 = "myRegularGroup";
336                if (!hasDialogBeenAnswered(dialog1, form)){
337                    // redirect back to client to display lightbox
338                    return showDialog(dialog1, form, request, response);
339                }
340                // Get value from chosen radio button
341                boolean choice = getBooleanDialogResponse(dialog1, form, request, response);
342                StringBuilder sb = new StringBuilder("You selected ");
343                sb.append((choice)?"Yes":"No");
344                form.setField1(sb.toString());
345    
346                // clear dialog history so they can press the button again
347                form.getDialogManager().removeDialog(dialog1);
348                // reload page1
349                return getUIFModelAndView(form, "DialogView-Page1");
350            }
351    
352    }