1 /** 2 * Copyright 2005-2013 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.uif.layout; 17 18 import org.kuali.rice.krad.datadictionary.uif.UifDictionaryBean; 19 import org.kuali.rice.krad.uif.container.Container; 20 import org.kuali.rice.krad.uif.view.View; 21 import org.kuali.rice.krad.uif.component.Component; 22 import org.kuali.rice.krad.uif.component.PropertyReplacer; 23 import org.kuali.rice.krad.uif.service.ViewHelperService; 24 25 import java.io.Serializable; 26 import java.util.List; 27 import java.util.Map; 28 import java.util.Set; 29 30 /** 31 * Manages the rendering of <code>Component</code> instances within a 32 * <code>Container</code> 33 * 34 * @author Kuali Rice Team (rice.collab@kuali.org) 35 */ 36 public interface LayoutManager extends UifDictionaryBean, Serializable { 37 38 /** 39 * The unique id (within a given tree) for the layout manager instance 40 * 41 * <p> 42 * The id is used to identify a <code>LayoutManager</code> instance within 43 * the tree and can be used by renderers 44 * </p> 45 * 46 * @return String id 47 */ 48 public String getId(); 49 50 /** 51 * Sets the unique id (within a given tree) for the layout manager 52 * 53 * @param id 54 * - string to set as the layout manager id 55 */ 56 public void setId(String id); 57 58 /** 59 * The path to the JSP file that should be called to invoke the layout 60 * manager 61 * 62 * <p> 63 * The path should be relative to the web root. All layout manager templates 64 * receive the list of items of be placed, the configured layout manager, 65 * and the container to which the layout manager applies 66 * </p> 67 * 68 * <p> 69 * e.g. '/krad/WEB-INF/jsp/tiles/boxLayout.jsp' 70 * </p> 71 * 72 * @return String representing the template path 73 */ 74 public String getTemplate(); 75 76 /** 77 * Setter for the layout managers template 78 * 79 * @param template 80 */ 81 public void setTemplate(String template); 82 83 /** 84 * Should be called to initialize the layout manager 85 * 86 * <p> 87 * This is where layout managers can set defaults and setup other necessary 88 * state. The initialize method should only be called once per layout 89 * manager lifecycle and is invoked within the initialize phase of the view 90 * lifecylce. 91 * </p> 92 * 93 * @param view 94 * - View instance the layout manager is a part of 95 * @param model - the object instance containing the view data 96 * @param container 97 * - Container the layout manager applies to 98 * @see ViewHelperService#performInitialization 99 */ 100 public void performInitialization(View view, Object model, Container container); 101 102 /** 103 * Called after the initialize phase to perform conditional logic based on 104 * the model data 105 * 106 * @param view 107 * - view instance to which the layout manager belongs 108 * @param model 109 * - Top level object containing the data (could be the form or a 110 * top level business object, dto) 111 * @param container 112 * - Container the layout manager applies to 113 */ 114 public void performApplyModel(View view, Object model, Container container); 115 116 /** 117 * The last phase before the view is rendered. Here final preparations can 118 * be made based on the updated view state 119 * 120 * 121 * @param view 122 * - view instance that should be finalized for rendering 123 * @param model 124 * - top level object containing the data 125 * @param container 126 * - Container the layout manager applies to 127 */ 128 public void performFinalize(View view, Object model, Container container); 129 130 /** 131 * Determines what <code>Container</code> classes are supported by the 132 * <code>LayoutManager</code> 133 * 134 * @return Class<? extends Container> container class supported 135 */ 136 public Class<? extends Container> getSupportedContainer(); 137 138 /** 139 * List of components that are contained within the layout manager that should be sent through the lifecycle 140 * 141 * <p> 142 * Used by <code>ViewHelperService</code> for the various lifecycle 143 * callbacks 144 * </p> 145 * 146 * @return List<Component> child components 147 */ 148 public List<Component> getComponentsForLifecycle(); 149 150 /** 151 * List of components that are maintained by the layout manager as prototypes for creating other component 152 * instances 153 * 154 * <p> 155 * Prototypes are held for configuring how a component should be created during the lifecycle. An example of this 156 * are the fields in a collection group that are created for each collection record. They only participate in the 157 * initialize phase. 158 * </p> 159 * 160 * @return List<Component> child component prototypes 161 */ 162 public List<Component> getComponentPrototypes(); 163 164 /** 165 * Used by the copy process to determine for which properties only the value 166 * reference should be copied (not a new copy instance). Subclasses can 167 * define the properties for which only the reference should be copied 168 * 169 * @return Set<String> property names for which only the value reference 170 * should be copied 171 * @see org.kuali.rice.krad.uif.util.ComponentUtils#copy(org.kuali.rice.krad.uif.component.Component) 172 */ 173 public Set<String> getPropertiesForReferenceCopy(); 174 175 /** 176 * CSS style string to be applied to the area (div) the layout manager 177 * generates for the items 178 * 179 * <p> 180 * Note the styleClass/style configured on the <code>Container</code> 181 * applies to all the container content (header, body, footer), while the 182 * styleClass/style configured on the <code>LayoutManager</code> only 183 * applies to the div surrounding the items placed by the manager (the 184 * container's body) 185 * </p> 186 * 187 * <p> 188 * Any style override or additions can be specified with this attribute. 189 * This is used by the renderer to set the style attribute on the 190 * corresponding element. 191 * </p> 192 * 193 * <p> 194 * e.g. 'color: #000000;text-decoration: underline;' 195 * </p> 196 * 197 * @return String css style string 198 */ 199 public String getStyle(); 200 201 /** 202 * Setter for the layout manager div style 203 * 204 * @param style 205 */ 206 public void setStyle(String style); 207 208 /** 209 * CSS style class(s) to be applied to the area (div) the layout manager 210 * generates for the items 211 * 212 * <p> 213 * Note the styleClass/style configured on the <code>Container</code> 214 * applies to all the container content (header, body, footer), while the 215 * styleClass/style configured on the <code>LayoutManager</code> only 216 * applies to the div surrounding the items placed by the manager (the 217 * container's body) 218 * </p> 219 * 220 * <p> 221 * Declares additional style classes for the div. Multiple classes are 222 * specified with a space delimiter. This is used by the renderer to set the 223 * class attribute on the corresponding element. The class(s) declared must 224 * be available in the common style sheets or the style sheets specified for 225 * the view 226 * </p> 227 * 228 * <p> 229 * e.g. 'header left' 230 * </p> 231 * 232 * @return List<String> css style classes to apply 233 */ 234 public List<String> getCssClasses(); 235 236 /** 237 * Setter for the layout manager div style class 238 * 239 * @param styleClasses 240 */ 241 public void setCssClasses(List<String> styleClasses); 242 243 /** 244 * This method adds a single style class to the list of css style classes on this component 245 * 246 * @param styleClass 247 */ 248 public void addStyleClass(String styleClass); 249 250 /** 251 * Context map for the layout manager 252 * 253 * @return Map<String, Object> context 254 * @see org.kuali.rice.krad.uif.component.Component#getContext() 255 */ 256 public Map<String, Object> getContext(); 257 258 /** 259 * Appends to the inline style set on this layoutManager 260 * 261 * @param styleRules 262 */ 263 public void appendToStyle(String styleRules); 264 265 /** 266 * Setter for the context Map 267 * 268 * @param context 269 */ 270 public void setContext(Map<String, Object> context); 271 272 /** 273 * Places the given object into the context Map for the layout manager 274 * with the given name 275 * 276 * @see org.kuali.rice.krad.uif.component.Component#pushObjectToContext(String, 277 * Object) 278 */ 279 public void pushObjectToContext(String objectName, Object object); 280 281 /** 282 * List of <code>PropertyReplacer</code> instances that will be 283 * evaluated during the view lifecycle to conditional set properties on the 284 * <code>LayoutManager</code> based on expression evaluations 285 * 286 * @return List<PropertyReplacer> replacers to evaluate 287 */ 288 public List<PropertyReplacer> getPropertyReplacers(); 289 290 /** 291 * Setter for the layout managers property substitutions 292 * 293 * @param propertyReplacers 294 */ 295 public void setPropertyReplacers(List<PropertyReplacer> propertyReplacers); 296 297 }