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 org.kuali.rice.krad.uif.view; 017 018 import org.kuali.rice.krad.uif.UifConstants.ViewType; 019 020 import java.io.Serializable; 021 import java.util.List; 022 import java.util.Map; 023 import java.util.Set; 024 025 /** 026 * Interface that must be implemented for clases the provide the backing data (model) for a {@link View} 027 * 028 * <p> 029 * Since the View relies on helper properties from the model it is necessary the backing object implement this 030 * interface. Note model objects can extend {@link org.kuali.rice.krad.web.form.UifFormBase} which implements 031 * this interface 032 * </p> 033 * 034 * @author Kuali Rice Team (rice.collab@kuali.org) 035 */ 036 public interface ViewModel extends Serializable { 037 038 /** 039 * Unique Id for the <code>View</code> instance. This is specified for a 040 * view in its definition by setting the 'id' property. 041 * 042 * @return String view id 043 */ 044 public String getViewId(); 045 046 /** 047 * Setter for the unique view id 048 * 049 * @param viewId 050 */ 051 public void setViewId(String viewId); 052 053 /** 054 * Name for the <code>View</code> instance. This is specified for a view in 055 * its definition by setting the 'id' property. The name is not necessary 056 * unique and cannot be used by itself to retrieve a view. Typically it is 057 * used with other parameters to identify a view with a certain type (view 058 * type) 059 * 060 * @return String view name 061 */ 062 public String getViewName(); 063 064 /** 065 * Setter for the view name 066 * 067 * @param viewName 068 */ 069 public void setViewName(String viewName); 070 071 /** 072 * Name for the type of view being requested. This can be used to find 073 * <code>View</code> instances by request parameters (not necessary the 074 * unique id) 075 * 076 * @return String view type name 077 */ 078 public ViewType getViewTypeName(); 079 080 /** 081 * Setter for the view type name 082 * 083 * @param viewTypeName 084 */ 085 public void setViewTypeName(ViewType viewTypeName); 086 087 /** 088 * View instance associated with the model. Used to render the user interface 089 * 090 * @return View 091 */ 092 public View getView(); 093 094 /** 095 * Setter for the view instance 096 * 097 * @param view 098 */ 099 public void setView(View view); 100 101 /** 102 * View instance for the page that made a request. Since a new view instance 103 * gets initialized for each request before the controller logic is invoked, 104 * any state about the previous view is lost. This could be needed to read 105 * metadata from the view for such things as collection processing. When 106 * this is necessary the previous view instance can be retrieved 107 * 108 * @return View instance 109 */ 110 public View getPostedView(); 111 112 /** 113 * Setter for the previous view instance 114 * 115 * @param previousView 116 */ 117 public void setPostedView(View previousView); 118 119 /** 120 * Id for the current page being displayed within the view 121 * 122 * @return String page id 123 */ 124 public String getPageId(); 125 126 /** 127 * Setter for the current page id 128 * 129 * @param pageId 130 */ 131 public void setPageId(String pageId); 132 133 /** 134 * URL the form generated for the view should post to 135 * 136 * @return String form post URL 137 */ 138 public String getFormPostUrl(); 139 140 /** 141 * Setter for the form post URL 142 * 143 * @param formPostUrl 144 */ 145 public void setFormPostUrl(String formPostUrl); 146 147 /** 148 * Map of parameters that was used to configured the <code>View</code>. 149 * Maintained on the form to rebuild the view on posts and session timeout 150 * 151 * @return Map<String, String> view parameters 152 * @see org.kuali.rice.krad.uif.view.View.getViewRequestParameters() 153 */ 154 public Map<String, String> getViewRequestParameters(); 155 156 /** 157 * Setter for the view's request parameter map 158 * 159 * @param viewRequestParameters 160 */ 161 public void setViewRequestParameters(Map<String, String> viewRequestParameters); 162 163 /** 164 * List of fields that should be read only on the view 165 * 166 * <p> 167 * If the view being rendered supports request setting of read-only fields, the readOnlyFields request parameter 168 * can be sent to mark fields as read only that might not have been otherwise 169 * </p> 170 * 171 * <p> 172 * Note the paths specified should be the simple property names (not the full binding path). Therefore if the 173 * property name appears multiple times in the view, all instances will be set as read only 174 * </p> 175 * 176 * @return List<String> read only property names 177 * @see View#isSupportsReadOnlyFieldsOverride() 178 */ 179 public List<String> getReadOnlyFieldsList(); 180 181 /** 182 * Setter for the list of read only fields 183 * 184 * @param readOnlyFieldsList 185 */ 186 public void setReadOnlyFieldsList(List<String> readOnlyFieldsList); 187 188 /** 189 * Holds instances for collection add lines. The key of the Map gives the 190 * collection name the line instance applies to, the Map value is an 191 * instance of the collection object class that holds the new line data 192 * 193 * @return Map<String, Object> new collection lines 194 */ 195 public Map<String, Object> getNewCollectionLines(); 196 197 /** 198 * Setter for the new collection lines Map 199 * 200 * @param newCollectionLines 201 */ 202 public void setNewCollectionLines(Map<String, Object> newCollectionLines); 203 204 /** 205 * Map of parameters sent for the invoked action 206 * 207 * <p> 208 * Many times besides just setting the method to call actions need to send 209 * additional parameters. For instance the method being called might do a 210 * redirect, in which case the action needs to send parameters for the 211 * redirect URL. An example of this is redirecting to a <code>Lookup</code> 212 * view. In some cases the parameters that need to be sent conflict with 213 * properties already on the form, and putting all the action parameters as 214 * form properties would grow massive (in addition to adds an additional 215 * step from the XML config). So this general map solves those issues. 216 * </p> 217 * 218 * @return Map<String, String> action parameters 219 */ 220 public Map<String, String> getActionParameters(); 221 222 /** 223 * Setter for the action parameters map 224 * 225 * @param actionParameters 226 */ 227 public void setActionParameters(Map<String, String> actionParameters); 228 229 /** 230 * Map that is populated from the component state maintained on the client 231 * 232 * <p> 233 * Used when a request is made that refreshes part of the view. The current state for components (which 234 * have state that can be changed on the client), is populated into this map which is then used by the 235 * <code>ViewHelperService</code> to update the components so that the state is maintained when they render. 236 * </p> 237 * 238 * @return Map<String, Object> map where key is name of property or component id, and value is the property 239 * value or another map of component key/value pairs 240 */ 241 public Map<String, Object> getClientStateForSyncing(); 242 243 /** 244 * Holds Set of String identifiers for lines that were selected in a collection 245 * 246 * <p> 247 * When the select field is enabled for a <code>CollectionGroup</code>, the framework will be 248 * default bind the selected identifier strings to this property. The key of the map uniquely identifies the 249 * collection by the full binding path to the collection, and the value is a set of Strings for the checked 250 * lines. 251 * </p> 252 * 253 * @return Map<String, Set<String>> map of collections and their selected lines 254 * @see org.kuali.rice.krad.service.DataObjectMetaDataService#getDataObjectIdentifierString(java.lang.Object) 255 */ 256 public Map<String, Set<String>> getSelectedCollectionLines(); 257 258 /** 259 * Setter for the map that holds selected collection lines 260 * 261 * @param selectedCollectionLines 262 */ 263 public void setSelectedCollectionLines(Map<String, Set<String>> selectedCollectionLines); 264 265 /** 266 * Indicates whether the form has had default values from the configured 267 * <code>View</code> applied. This happens only once for each form instance 268 * 269 * @return boolean true if default values have been applied, false if not 270 */ 271 public boolean isDefaultsApplied(); 272 273 /** 274 * Setter for the defaults applied indicator 275 * 276 * @param defaultsApplied 277 */ 278 public void setDefaultsApplied(boolean defaultsApplied); 279 280 }