001 /**
002 * Copyright 2005-2012 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.layout;
017
018 import org.apache.commons.lang.StringUtils;
019 import org.kuali.rice.krad.uif.UifPropertyPaths;
020 import org.kuali.rice.krad.uif.container.Container;
021 import org.kuali.rice.krad.uif.view.View;
022 import org.kuali.rice.krad.uif.component.Component;
023 import org.kuali.rice.krad.uif.component.ConfigurableBase;
024 import org.kuali.rice.krad.uif.component.PropertyReplacer;
025 import org.kuali.rice.krad.uif.component.ReferenceCopy;
026
027 import java.util.ArrayList;
028 import java.util.Arrays;
029 import java.util.HashMap;
030 import java.util.HashSet;
031 import java.util.List;
032 import java.util.Map;
033 import java.util.Set;
034
035 /**
036 * Base class for all layout managers
037 *
038 * <p>
039 * Provides general properties of all layout managers, such as the unique id,
040 * rendering template, and style settings
041 * </p>
042 *
043 * @author Kuali Rice Team (rice.collab@kuali.org)
044 */
045 public abstract class LayoutManagerBase extends ConfigurableBase implements LayoutManager {
046 private static final long serialVersionUID = -2657663560459456814L;
047
048 private String id;
049 private String template;
050 private String style;
051
052 private List<String> styleClasses;
053
054 @ReferenceCopy(newCollectionInstance=true)
055 private Map<String, Object> context;
056
057 private List<PropertyReplacer> propertyReplacers;
058
059 public LayoutManagerBase() {
060 super();
061
062 styleClasses = new ArrayList<String>();
063 context = new HashMap<String, Object>();
064 propertyReplacers = new ArrayList<PropertyReplacer>();
065 }
066
067 /**
068 * @see org.kuali.rice.krad.uif.layout.LayoutManager#performInitialization(org.kuali.rice.krad.uif.view.View,
069 * java.lang.Object, org.kuali.rice.krad.uif.container.Container)
070 */
071 public void performInitialization(View view, Object model, Container container) {
072 // set id of layout manager from container
073 if (StringUtils.isBlank(id)) {
074 id = container.getId() + "_layout";
075 }
076 }
077
078 /**
079 * @see org.kuali.rice.krad.uif.layout.LayoutManager#performApplyModel(org.kuali.rice.krad.uif.view.View,
080 * java.lang.Object, org.kuali.rice.krad.uif.container.Container)
081 */
082 public void performApplyModel(View view, Object model, Container container) {
083
084 }
085
086 /**
087 * @see org.kuali.rice.krad.uif.layout.LayoutManager#performFinalize(org.kuali.rice.krad.uif.view.View,
088 * java.lang.Object, org.kuali.rice.krad.uif.container.Container)
089 */
090 public void performFinalize(View view, Object model, Container container) {
091
092 }
093
094 /**
095 * Set of property names for the layout manager base for which on the
096 * property value reference should be copied. Subclasses can override this
097 * but should include a call to super
098 *
099 * @see org.kuali.rice.krad.uif.layout.LayoutManager.
100 * getPropertiesForReferenceCopy()
101 */
102 public Set<String> getPropertiesForReferenceCopy() {
103 Set<String> refCopyProperties = new HashSet<String>();
104
105 refCopyProperties.add(UifPropertyPaths.CONTEXT);
106
107 return refCopyProperties;
108 }
109
110 /**
111 * Default Impl
112 *
113 * @see org.kuali.rice.krad.uif.layout.LayoutManager#getSupportedContainer()
114 */
115 @Override
116 public Class<? extends Container> getSupportedContainer() {
117 return Container.class;
118 }
119
120 /**
121 * @see org.kuali.rice.krad.uif.layout.LayoutManager#getComponentsForLifecycle()
122 */
123 public List<Component> getComponentsForLifecycle() {
124 return new ArrayList<Component>();
125 }
126
127 /**
128 * @see org.kuali.rice.krad.uif.layout.LayoutManager#getComponentPrototypes()
129 */
130 public List<Component> getComponentPrototypes() {
131 List<Component> components = new ArrayList<Component>();
132
133 return components;
134 }
135
136 /**
137 * @see org.kuali.rice.krad.uif.layout.LayoutManager#getId()
138 */
139 public String getId() {
140 return this.id;
141 }
142
143 /**
144 * @see org.kuali.rice.krad.uif.layout.LayoutManager#setId(java.lang.String)
145 */
146 public void setId(String id) {
147 this.id = id;
148 }
149
150 /**
151 * @see org.kuali.rice.krad.uif.layout.LayoutManager#getTemplate()
152 */
153 public String getTemplate() {
154 return this.template;
155 }
156
157 /**
158 * @see org.kuali.rice.krad.uif.layout.LayoutManager#setTemplate(java.lang.String)
159 */
160 public void setTemplate(String template) {
161 this.template = template;
162 }
163
164 /**
165 * @see org.kuali.rice.krad.uif.layout.LayoutManager#getStyle()
166 */
167 public String getStyle() {
168 return this.style;
169 }
170
171 /**
172 * @see org.kuali.rice.krad.uif.layout.LayoutManager#setStyle(java.lang.String)
173 */
174 public void setStyle(String style) {
175 this.style = style;
176 }
177
178 /**
179 * @see org.kuali.rice.krad.uif.layout.LayoutManager#getStyleClasses()
180 */
181 public List<String> getStyleClasses() {
182 return this.styleClasses;
183 }
184
185 /**
186 * @see org.kuali.rice.krad.uif.layout.LayoutManager#setStyleClasses(java.util.List)
187 */
188 public void setStyleClasses(List<String> styleClasses) {
189 this.styleClasses = styleClasses;
190 }
191
192 /**
193 * Builds the HTML class attribute string by combining the styleClasses list
194 * with a space delimiter
195 *
196 * @return String class attribute string
197 */
198 public String getStyleClassesAsString() {
199 if (styleClasses != null) {
200 return StringUtils.join(styleClasses, " ");
201 }
202
203 return "";
204 }
205
206 /**
207 * Sets the styleClasses list from the given string that has the classes
208 * delimited by space. This is a convenience for configuration. If a child
209 * bean needs to inherit the classes from the parent, it should configure as
210 * a list and use merge="true"
211 *
212 * @param styleClasses
213 */
214 public void setStyleClasses(String styleClasses) {
215 String[] classes = StringUtils.split(styleClasses);
216 this.styleClasses = Arrays.asList(classes);
217 }
218
219 /**
220 * This method adds a single style to the list of css style classes on this layoutManager
221 *
222 * @param style
223 */
224 @Override
225 public void addStyleClass(String styleClass){
226 if(!styleClasses.contains(styleClass)){
227 styleClasses.add(styleClass);
228 }
229 }
230
231 /**
232 * @see org.kuali.rice.krad.uif.layout.LayoutManager#getContext()
233 */
234 public Map<String, Object> getContext() {
235 return this.context;
236 }
237
238 /**
239 * @see org.kuali.rice.krad.uif.layout.LayoutManager#setContext(java.util.Map)
240 */
241 public void setContext(Map<String, Object> context) {
242 this.context = context;
243 }
244
245 /**
246 * @see org.kuali.rice.krad.uif.layout.LayoutManager#pushObjectToContext(java.lang.String,
247 * java.lang.Object)
248 */
249 public void pushObjectToContext(String objectName, Object object) {
250 if (this.context == null) {
251 this.context = new HashMap<String, Object>();
252 }
253
254 this.context.put(objectName, object);
255 }
256
257 /**
258 * @see org.kuali.rice.krad.uif.layout.LayoutManager#getPropertyReplacers()
259 */
260 public List<PropertyReplacer> getPropertyReplacers() {
261 return this.propertyReplacers;
262 }
263
264 /**
265 * @see org.kuali.rice.krad.uif.layout.LayoutManager#setPropertyReplacers(java.util.List)
266 */
267 public void setPropertyReplacers(List<PropertyReplacer> propertyReplacers) {
268 this.propertyReplacers = propertyReplacers;
269 }
270
271 }