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