1 /** 2 * Copyright 2005-2016 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 org.kuali.rice.krad.web.service; 17 18 import org.kuali.rice.krad.web.form.UifFormBase; 19 import org.springframework.web.servlet.ModelAndView; 20 21 import javax.servlet.http.HttpServletRequest; 22 import java.util.Map; 23 import java.util.Properties; 24 25 /** 26 * Service that provides helper methods for building {@link org.springframework.web.servlet.ModelAndView} instances 27 * and also other controller helper methods such as showing a dialog, a message view, or redirecting. 28 * 29 * @author Kuali Rice Team (rice.collab@kuali.org) 30 */ 31 public interface ModelAndViewService { 32 33 /** 34 * Handles the check form action to validate the given form data. 35 * 36 * @param form instance containing the model data 37 * @return ModelAndView instance for rendering the view 38 */ 39 ModelAndView checkForm(UifFormBase form); 40 41 /** 42 * Invoked by controller methods to show a dialog to the user. 43 * 44 * <p>This will return back to the view and display the dialog to the user. When the users chooses a response, 45 * the initial action that triggered the controller method (which called showDialog) will be triggered again. The 46 * response will be captured in the form property 47 * {@link org.kuali.rice.krad.web.form.UifFormBase#getDialogResponses()}. In the case of a confirmation, if 'false' 48 * (typically labeled cancel) is choosen the initial action will simply not be triggered again.</p> 49 * 50 * @param dialogId id for the dialog group to show 51 * @param confirmation whether the dialog should be shown as a confirmation, in this case it is expected the 52 * options are true (continue) or false (stop). In addition, if the user selects the false option, the dialog 53 * answer will not be resubmitted to the server, instead the user will remain on the view 54 * @param form instance containing the model data 55 * @return ModelAndView instance for rendering the view 56 */ 57 ModelAndView showDialog(String dialogId, boolean confirmation, UifFormBase form); 58 59 /** 60 * Builds an URL from the given base URL and parameters, then builds a model and view instance 61 * configured to redirect to the built URL. 62 * 63 * @param form form instance containing the model data 64 * @param baseUrl base URL to redirect to 65 * @param urlParameters parameters to add to the base URL 66 * @return ModelAndView instance configured to redirect to the built URL 67 */ 68 ModelAndView performRedirect(UifFormBase form, String baseUrl, Properties urlParameters); 69 70 /** 71 * Builds a model and view instance configured to redirect to the given URL. 72 * 73 * @param form instance containing the model data 74 * @param redirectUrl URL to redirect to 75 * @return ModelAndView instance configured to redirect to the given URL 76 */ 77 ModelAndView performRedirect(UifFormBase form, String redirectUrl); 78 79 /** 80 * Builds a message view from the given header and message text then forwards the UIF model and view. 81 * 82 * <p>If an error or other type of interruption occurs during the request processing the controller can 83 * invoke this message to display the message to the user. This will abandon the view that was requested 84 * and display a view with just the message</p> 85 * 86 * @param form instance containing the model data 87 * @param headerText header text for the message view (can be blank) 88 * @param messageText text for the message to display 89 * @return instance for rendering the view 90 */ 91 ModelAndView getMessageView(UifFormBase form, String headerText, String messageText); 92 93 /** 94 * Configures the Spring model and view instance containing the form data and pointing to the 95 * generic Uif view. 96 * 97 * <p>The view and page to render is assumed to be set in the given form object.</p> 98 * 99 * @param form form instance containing the model data 100 * @return ModelAndView instance for rendering the view 101 */ 102 ModelAndView getModelAndView(UifFormBase form); 103 104 /** 105 * Configures the Spring model and view instance containing the form data and pointing to the 106 * generic Uif view, and also changes the current page to the given page id. 107 * 108 * <p>The view to render is assumed to be set in the given form object.</p> 109 * 110 * @param form form instance containing the model data 111 * @param pageId page id within the view to render 112 * @return ModelAndView instance for rendering the view 113 */ 114 ModelAndView getModelAndView(UifFormBase form, String pageId); 115 116 /** 117 * Configures the Spring model and view instance containing the form data and pointing to the 118 * generic Uif view, and also adds the given attributes (which can be referenced in the view templates). 119 * 120 * <p>The view and page to render is assumed to be set in the given form object.</p> 121 * 122 * @param form form instance containing the model data 123 * @param additionalViewAttributes additional attributes to add to the returned model and view 124 * @return ModelAndView instance for rendering the view 125 */ 126 ModelAndView getModelAndView(UifFormBase form, Map<String, Object> additionalViewAttributes); 127 128 /** 129 * Initialize a new view instance for the given view id, then configures the Spring model and view 130 * instance containing the form data and pointing to the generic Uif view. 131 * 132 * <p>This can be used by controllers to render a different view from the one initially requested (if any)</p> 133 * 134 * @param form form instance containing the model data 135 * @param viewId id for the view to initialize 136 * @return ModelAndView instance for rendering the view 137 */ 138 ModelAndView getModelAndViewWithInit(UifFormBase form, String viewId); 139 140 /** 141 * Initialize a new view instance for the given view id, then configures the Spring model and view 142 * instance containing the form data and pointing to the generic Uif view. 143 * 144 * <p>This can be used by controllers to render a different view from the one initially requested (if any)</p> 145 * 146 * @param form form instance containing the model data 147 * @param viewId id for the view to initialize 148 * @param pageId page id within the view to render 149 * @return ModelAndView instance for rendering the view 150 */ 151 ModelAndView getModelAndViewWithInit(UifFormBase form, String viewId, String pageId); 152 153 /** 154 * After the controller logic is executed, the form is placed into session and the corresponding view 155 * is prepared for rendering. 156 * 157 * @param request servlet request 158 * @param modelAndView model and view 159 */ 160 void prepareView(HttpServletRequest request, ModelAndView modelAndView); 161 }