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 java.util.Properties;
019    import java.util.Set;
020    
021    import javax.servlet.http.HttpServletRequest;
022    import javax.servlet.http.HttpServletResponse;
023    
024    import org.kuali.rice.krad.service.KRADServiceLocatorWeb;
025    import org.kuali.rice.krad.uif.UifConstants;
026    import org.kuali.rice.krad.uif.UifParameters;
027    import org.kuali.rice.krad.util.GlobalVariables;
028    import org.kuali.rice.krad.web.controller.UifControllerBase;
029    import org.kuali.rice.krad.web.form.UifFormBase;
030    import org.springframework.stereotype.Controller;
031    import org.springframework.validation.BindingResult;
032    import org.springframework.web.bind.annotation.ModelAttribute;
033    import org.springframework.web.bind.annotation.RequestMapping;
034    import org.springframework.web.bind.annotation.RequestMethod;
035    import org.springframework.web.servlet.ModelAndView;
036    
037    /**
038     * Controller for the Test UI Page
039     *
040     * @author Kuali Rice Team (rice.collab@kuali.org)
041     */
042    @Controller
043    @RequestMapping(value = "/uicomponents")
044    public class UifComponentsTestController extends UifControllerBase {
045    
046        /**
047         * @see org.kuali.rice.krad.web.controller.UifControllerBase#createInitialForm(javax.servlet.http.HttpServletRequest)
048         */
049        @Override
050        protected UifComponentsTestForm createInitialForm(HttpServletRequest request) {
051            return new UifComponentsTestForm();
052        }
053    
054        @Override
055        @RequestMapping(params = "methodToCall=start")
056        public ModelAndView start(@ModelAttribute("KualiForm") UifFormBase form, HttpServletRequest request,
057                HttpServletResponse response) {
058            UifComponentsTestForm uiTestForm = (UifComponentsTestForm) form;
059            form.setState("state1");
060            //for generated view:
061            if (form.getView().getId().equals("UifGeneratedFields")) {
062                for (int i = 0; i < 100; i++) {
063                    ((UifComponentsTestForm) form).getList1generated().add(new UITestObject("A" + i, "B" + i, "C" + i,
064                            "D" + i));
065                }
066                for (int i = 0; i < 100; i++) {
067                    ((UifComponentsTestForm) form).getList2generated().add(new UITestObject("A" + i, "B" + i, "C" + i,
068                            "D" + i));
069                }
070                for (int i = 0; i < 10; i++) {
071                    ((UifComponentsTestForm) form).getList3generated().add(new UITestObject("A" + i, "B" + i, "C" + i,
072                            "D" + i));
073                    for (int j = 0; j < 10; j++) {
074                        ((UifComponentsTestForm) form).getList3generated().get(i).getSubList().add(new UITestObject(
075                                "i" + i + "-" + j, "i" + i + "-" + j, "i" + i + "-" + j, "i" + i + "-" + j));
076                    }
077                }
078            }
079    
080            GlobalVariables.getMessageMap().addGrowlMessage("Welcome!", "kitchenSink.welcome");
081    
082            return super.start(uiTestForm, request, response);
083        }
084    
085        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=save")
086        public ModelAndView save(@ModelAttribute("KualiForm") UifComponentsTestForm uiTestForm, BindingResult result,
087                HttpServletRequest request, HttpServletResponse response) {
088            KRADServiceLocatorWeb.getViewValidationService().validateView(uiTestForm);
089    
090            return getUIFModelAndView(uiTestForm);
091        }
092    
093        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=close")
094        public ModelAndView close(@ModelAttribute("KualiForm") UifComponentsTestForm uiTestForm, BindingResult result,
095                HttpServletRequest request, HttpServletResponse response) {
096    
097            return getUIFModelAndView(uiTestForm, "UifCompView-Page1");
098        }
099    
100        /**
101         * Handles menu navigation between view pages
102         */
103        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=navigate")
104        public ModelAndView navigate(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
105                HttpServletRequest request, HttpServletResponse response) {
106            String pageId = form.getActionParamaterValue(UifParameters.NAVIGATE_TO_PAGE_ID);
107    
108            if (pageId.equals("UifCompView-Page8")) {
109                GlobalVariables.getMessageMap().putError("gField1", "serverTestError");
110                GlobalVariables.getMessageMap().putError("gField1", "serverTestError2");
111                GlobalVariables.getMessageMap().putError("gField2", "serverTestError");
112                GlobalVariables.getMessageMap().putError("gField3", "serverTestError");
113                GlobalVariables.getMessageMap().putWarning("gField1", "serverTestWarning");
114                GlobalVariables.getMessageMap().putWarning("gField2", "serverTestWarning");
115                GlobalVariables.getMessageMap().putInfo("gField2", "serverTestInfo");
116                GlobalVariables.getMessageMap().putInfo("gField3", "serverTestInfo");
117            }
118    
119            return getUIFModelAndView(form, pageId);
120        }
121    
122        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=refreshProgGroup")
123        public ModelAndView refreshProgGroup(@ModelAttribute("KualiForm") UifComponentsTestForm uiTestForm,
124                BindingResult result, HttpServletRequest request, HttpServletResponse response) {
125    
126            return getUIFModelAndView(uiTestForm);
127        }
128    
129        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=refreshWithServerMessages")
130        public ModelAndView refreshWithServerMessages(@ModelAttribute("KualiForm") UifComponentsTestForm uiTestForm,
131                BindingResult result, HttpServletRequest request, HttpServletResponse response) {
132            GlobalVariables.getMessageMap().putError("field45", "serverTestError");
133            GlobalVariables.getMessageMap().putWarning("field45", "serverTestWarning");
134            GlobalVariables.getMessageMap().putInfo("field45", "serverTestInfo");
135    
136            return getUIFModelAndView(uiTestForm);
137        }
138    
139        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=genCollectionServerMessages")
140        public ModelAndView genCollectionServerMessages(@ModelAttribute("KualiForm") UifComponentsTestForm uiTestForm,
141                BindingResult result, HttpServletRequest request, HttpServletResponse response) throws Exception {
142            GlobalVariables.getMessageMap().putError("list2[0].field1", "serverTestError");
143            GlobalVariables.getMessageMap().putWarning("list2[0].field1", "serverTestWarning");
144            GlobalVariables.getMessageMap().putInfo("list2[0].field1", "serverTestInfo");
145    
146            GlobalVariables.getMessageMap().putError("list3[0].field1", "serverTestError");
147            GlobalVariables.getMessageMap().putWarning("list3[0].field1", "serverTestWarning");
148            GlobalVariables.getMessageMap().putInfo("list3[0].field1", "serverTestInfo");
149    
150            GlobalVariables.getMessageMap().putError("list5[0].subList[0].field1", "serverTestError");
151            GlobalVariables.getMessageMap().putWarning("list5[0].subList[0].field1", "serverTestWarning");
152            GlobalVariables.getMessageMap().putInfo("list5[0].subList[0].field1", "serverTestInfo");
153            return refresh(uiTestForm, result, request, response);
154        }
155    
156        /**
157         * Adds errors to fields defined in the validationMessageFields array
158         */
159        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=addErrors")
160        public ModelAndView addErrors(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
161                HttpServletRequest request, HttpServletResponse response) {
162    
163            if (form.getPageId().equals("Demo-ValidationLayout-SectionsPageSectionMessages")) {
164                GlobalVariables.getMessageMap().putError("Demo-ValidationLayout-Section1", "errorSectionTest");
165                GlobalVariables.getMessageMap().putError("Demo-ValidationLayout-Section2", "errorSectionTest");
166            } else if (form.getPageId().equals("Demo-ValidationLayout-SectionsPageUnmatched")) {
167                GlobalVariables.getMessageMap().putError("badKey", "unmatchedTest");
168            } else if (form.getPageId().equals("Demo-ValidationLayout-SubSectionsPage")) {
169                GlobalVariables.getMessageMap().putError("Uif-ValidationLayout-SubGroup", "errorSectionTest");
170            }
171    
172            if (form.getViewPostMetadata().getId().equals("RichMessagesView")) {
173                GlobalVariables.getMessageMap().putError("Demo-BasicMessagesSection", "richValidationMessageTest");
174                GlobalVariables.getMessageMap().putError("field5", "richValidationMessageTest2");
175            }
176    
177            Set<String> inputFieldIds = form.getViewPostMetadata().getInputFieldIds();
178            for (String id : inputFieldIds) {
179                if (form.getViewPostMetadata().getComponentPostData(id, UifConstants.PostMetadata.PATH) != null) {
180                    String key = (String) form.getViewPostMetadata().getComponentPostData(id,
181                            UifConstants.PostMetadata.PATH);
182                    GlobalVariables.getMessageMap().putError(key, "error1Test");
183                }
184            }
185    
186            return getUIFModelAndView(form);
187        }
188    
189        /**
190         * Adds warnings to fields defined in the validationMessageFields array
191         */
192        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=addWarnings")
193        public ModelAndView addWarnings(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
194                HttpServletRequest request, HttpServletResponse response) {
195    
196            if (form.getPageId().equals("Demo-ValidationLayout-SectionsPageSectionMessages")) {
197                GlobalVariables.getMessageMap().putWarning("Demo-ValidationLayout-Section1", "warningSectionTest");
198                GlobalVariables.getMessageMap().putWarning("Demo-ValidationLayout-Section2", "warningSectionTest");
199            } else if (form.getPageId().equals("Demo-ValidationLayout-SectionsPageUnmatched")) {
200                GlobalVariables.getMessageMap().putWarning("badKey", "unmatchedTest");
201            }
202    
203            Set<String> inputFieldIds = form.getViewPostMetadata().getInputFieldIds();
204            for (String id : inputFieldIds) {
205                if (form.getViewPostMetadata().getComponentPostData(id, UifConstants.PostMetadata.PATH) != null) {
206                    String key = (String) form.getViewPostMetadata().getComponentPostData(id,
207                            UifConstants.PostMetadata.PATH);
208                    GlobalVariables.getMessageMap().putWarning(key, "warning1Test");
209                }
210            }
211    
212            return getUIFModelAndView(form);
213        }
214    
215        /**
216         * Adds infos to fields defined in the validationMessageFields array
217         */
218        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=addInfo")
219        public ModelAndView addInfo(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
220                HttpServletRequest request, HttpServletResponse response) {
221    
222            if (form.getPageId().equals("Demo-ValidationLayout-SectionsPageSectionMessages")) {
223                GlobalVariables.getMessageMap().putInfo("Demo-ValidationLayout-Section1", "infoSectionTest");
224                GlobalVariables.getMessageMap().putInfo("Demo-ValidationLayout-Section2", "infoSectionTest");
225            } else if (form.getPageId().equals("Demo-ValidationLayout-SectionsPageUnmatched")) {
226                GlobalVariables.getMessageMap().putInfo("badKey", "unmatchedTest");
227            }
228    
229            Set<String> inputFieldIds = form.getViewPostMetadata().getInputFieldIds();
230            for (String id : inputFieldIds) {
231                if (form.getViewPostMetadata().getComponentPostData(id, UifConstants.PostMetadata.PATH) != null) {
232                    String key = (String) form.getViewPostMetadata().getComponentPostData(id,
233                            UifConstants.PostMetadata.PATH);
234                    GlobalVariables.getMessageMap().putInfo(key, "info1Test");
235                }
236            }
237    
238            return getUIFModelAndView(form);
239        }
240    
241        /**
242         * Adds all message types to fields defined in the validationMessageFields array
243         */
244        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=addAllMessages")
245        public ModelAndView addAllMessages(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
246                HttpServletRequest request, HttpServletResponse response) {
247    
248            this.addErrors(form, result, request, response);
249            this.addWarnings(form, result, request, response);
250            this.addInfo(form, result, request, response);
251    
252            return getUIFModelAndView(form);
253        }
254    
255        /**
256         * Adds error and warning messages to fields defined in the validationMessageFields array
257         */
258        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=addErrorWarnMessages")
259        public ModelAndView addErrorWarnMessages(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
260                HttpServletRequest request, HttpServletResponse response) {
261    
262            this.addErrors(form, result, request, response);
263            this.addWarnings(form, result, request, response);
264    
265            return getUIFModelAndView(form);
266        }
267    
268        /**
269         * Adds error and info messages to fields defined in the validationMessageFields array
270         */
271        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=addErrorInfoMessages")
272        public ModelAndView addErrorInfoMessages(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
273                HttpServletRequest request, HttpServletResponse response) {
274    
275            this.addErrors(form, result, request, response);
276            this.addInfo(form, result, request, response);
277    
278            return getUIFModelAndView(form);
279        }
280    
281        /**
282         * Adds only 1 error message for testing
283         */
284        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=addSingleErrorMessage")
285        public ModelAndView addSingleErrorMessage(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
286                HttpServletRequest request, HttpServletResponse response) {
287    
288            if (form.getPageId().equals("Demo-ValidationLayout-SubSectionsPage")) {
289                GlobalVariables.getMessageMap().putError("Uif-ValidationLayout-SubGroup", "errorSectionTest");
290            } else {
291                GlobalVariables.getMessageMap().putError("Demo-ValidationLayout-Section1", "errorSectionTest");
292            }
293    
294            return getUIFModelAndView(form);
295        }
296    
297        /**
298         * Adds warning and info messages to fields defined in the validationMessageFields array
299         */
300        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=addWarnInfoMessages")
301        public ModelAndView addWarnInfoMessages(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
302                HttpServletRequest request, HttpServletResponse response) {
303    
304            this.addWarnings(form, result, request, response);
305            this.addInfo(form, result, request, response);
306    
307            return getUIFModelAndView(form);
308        }
309    
310        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=gotoState2")
311        public ModelAndView gotoState2(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
312                HttpServletRequest request, HttpServletResponse response) {
313    
314            KRADServiceLocatorWeb.getViewValidationService().validateView(form, "state2");
315            if (!GlobalVariables.getMessageMap().hasErrors()) {
316                form.setState("state2");
317            }
318    
319            return getUIFModelAndView(form);
320        }
321    
322        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=gotoState3")
323        public ModelAndView gotoState3(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
324                HttpServletRequest request, HttpServletResponse response) {
325    
326            KRADServiceLocatorWeb.getViewValidationService().validateView(form, "state3");
327            if (!GlobalVariables.getMessageMap().hasErrors()) {
328                form.setState("state3");
329            }
330    
331            return getUIFModelAndView(form);
332        }
333    
334        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=gotoState4")
335        public ModelAndView gotoState4(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
336                HttpServletRequest request, HttpServletResponse response) {
337    
338            KRADServiceLocatorWeb.getViewValidationService().validateView(form, "state4");
339            if (!GlobalVariables.getMessageMap().hasErrors()) {
340                form.setState("state4");
341            }
342    
343            return getUIFModelAndView(form);
344        }
345    
346        /**
347         * Generates a fake incident report to test for errorCallback
348         *
349         * @param form
350         * @param result
351         * @param request
352         * @param response
353         * @return ModelAndView model and view
354         */
355        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=errorCheck")
356        public ModelAndView errorCheck(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
357                HttpServletRequest request, HttpServletResponse response) {
358    
359            if (true) {
360                throw new RuntimeException("Generate fake incident report");
361            }
362    
363            return getUIFModelAndView(form);
364        }
365    
366        /**
367         * Test controller method to check for ajax redirect functionality. Redirects to the portal main page
368         *
369         * @param form
370         * @param result
371         * @param request
372         * @param response
373         * @return ModelAndView model and view
374         */
375        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=redirectCheck")
376        public ModelAndView redirectCheck(@ModelAttribute("KualiForm") UifFormBase form, BindingResult result,
377                HttpServletRequest request, HttpServletResponse response) {
378            Properties props = new Properties();
379            props.put(UifParameters.VIEW_ID, form.getViewId());
380            props.put(UifParameters.FORM_KEY, form.getFormKey());
381            return performRedirect(form, "http://localhost:8080/kr-dev", props);
382        }
383    
384        @Override
385        public ModelAndView addLine(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
386                HttpServletRequest request, HttpServletResponse response) {
387            GlobalVariables.getMessageMap().addGrowlMessage("Greetings!", "kitchenSink.welcome");
388            if (uifForm.getPageId().equals("Demo-ValidationLayout-CollectionsErrorPage")) {
389                GlobalVariables.getMessageMap().putError("Demo-ValidationLayout-CollectionErrorSection",
390                        "errorSectionTest");
391                GlobalVariables.getMessageMap().putErrorForSectionId("Demo-ValidationLayout-CollectionErrorSection",
392                        "errorSectionTest");
393            }
394            return super.addLine(uifForm, result, request, response);
395        }
396    
397        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=customLineAction")
398        public ModelAndView customLineAction(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
399                HttpServletRequest request, HttpServletResponse response) {
400    
401            String actionParm1 = uifForm.getActionParamaterValue("field1");
402            String actionParm2 = uifForm.getActionParamaterValue("field2");
403    
404            GlobalVariables.getMessageMap().addGrowlMessage("Action Parameters", "actionParms.message", actionParm1,
405                    actionParm2);
406    
407            return super.deleteLine(uifForm, result, request, response);
408        }
409    
410        /**
411         * Performs custom line action for collection 4 in kitchen sink collection demo.
412         * Just puts out a growl message and returns.
413         *
414         * @param uifForm
415         * @param result
416         * @param request
417         * @param response
418         * @return
419         */
420        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=updateOfficial")
421        public ModelAndView updateOfficial(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
422                HttpServletRequest request, HttpServletResponse response) {
423    
424            String actionParm1 = uifForm.getActionParamaterValue("field1");
425    
426            GlobalVariables.getMessageMap().addGrowlMessage("Action Parameters", "customLineAction.message", actionParm1);
427    
428            return getUIFModelAndView(uifForm);
429        }
430    
431        /**
432         * Changes the view to readOnly and returns.
433         *
434         * @param uifForm
435         * @param result
436         * @param request
437         * @param response
438         * @return readOnly View
439         */
440        @RequestMapping(method = RequestMethod.POST, params = "methodToCall=makeReadOnly")
441        public ModelAndView makeReadOnly(@ModelAttribute("KualiForm") UifFormBase uifForm, BindingResult result,
442                HttpServletRequest request, HttpServletResponse response) {
443            //set View to readOnly
444            uifForm.getView().setReadOnly(true);
445            return getUIFModelAndView(uifForm);
446        }
447    }