View Javadoc

1   /*
2    * Copyright 2007 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 1.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/ecl1.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.field;
17  
18  import org.apache.commons.lang.StringUtils;
19  import org.kuali.rice.krad.uif.UifConstants.Position;
20  import org.kuali.rice.krad.uif.container.View;
21  import org.kuali.rice.krad.uif.core.Component;
22  import org.kuali.rice.krad.uif.core.ComponentBase;
23  import org.kuali.rice.krad.uif.util.ComponentFactory;
24  
25  import java.util.List;
26  
27  /**
28   * Base class for <code>Field</code> implementations
29   * 
30   * <p>
31   * Sets the component type name so that all field templates have a fixed
32   * contract
33   * </p>
34   * 
35   * <p>
36   * Holds a nested <code>LabelField</code> with configuration for rendering the
37   * label and configuration on label placement.
38   * </p>
39   * 
40   * @author Kuali Rice Team (rice.collab@kuali.org)
41   */
42  public class FieldBase extends ComponentBase implements Field {
43  	private static final long serialVersionUID = -5888414844802862760L;
44  
45  	private String shortLabel;
46  
47  	private LabelField labelField;
48  
49  	private String labelPlacement;
50  	private boolean labelFieldRendered;
51  
52  	public FieldBase() {
53  		labelFieldRendered = false;
54  
55  		labelPlacement = Position.LEFT;
56  	}
57  
58  	/**
59  	 * The following initialization is performed:
60  	 * 
61  	 * <ul>
62  	 * </ul>
63  	 * 
64  	 * @see org.kuali.rice.krad.uif.core.ComponentBase#performInitialization(org.kuali.rice.krad.uif.container.View)
65  	 */
66  	@Override
67  	public void performInitialization(View view) {
68  		super.performInitialization(view);
69  	}
70  
71  	/**
72  	 * The following finalization is performed:
73  	 * 
74  	 * <ul>
75  	 * <li>Set the labelForComponentId to this component id</li>
76  	 * <li>Set the label text on the label field from the field's label property
77  	 * </li>
78  	 * <li>Set the render property on the label's required message field if this
79  	 * field is marked as required</li>
80  	 * <li>If label placement is right, set render colon to false</li>
81  	 * </ul>
82  	 * 
83  	 * @see org.kuali.rice.krad.uif.core.ComponentBase#performFinalize(org.kuali.rice.krad.uif.container.View,
84  	 *      java.lang.Object, org.kuali.rice.krad.uif.core.Component)
85  	 */
86  	@Override
87  	public void performFinalize(View view, Object model, Component parent) {
88  		super.performFinalize(view, model, parent);
89  
90  		if (labelField != null) {
91  			labelField.setLabelForComponentId(this.getId());
92  
93  			if ((getRequired() != null) && getRequired().booleanValue()) {
94  				labelField.getRequiredMessageField().setRender(true);
95  			}
96  			else {
97  				setRequired(new Boolean(false));
98  				labelField.getRequiredMessageField().setRender(true);
99  				String prefixStyle = "";
100 				if(StringUtils.isNotBlank(labelField.getRequiredMessageField().getStyle())){
101                     prefixStyle = labelField.getRequiredMessageField().getStyle();
102                 }
103 				labelField.getRequiredMessageField().setStyle(prefixStyle + ";" + "display: none;");
104 			}
105 
106 			if (StringUtils.equals(labelPlacement, Position.RIGHT)) {
107 				labelField.setRenderColon(false);
108 			}
109 		}
110 	}
111 
112 	/**
113 	 * @see org.kuali.rice.krad.uif.core.Component#getComponentTypeName()
114 	 */
115 	@Override
116 	public final String getComponentTypeName() {
117 		return "field";
118 	}
119 
120 	/**
121 	 * @see org.kuali.rice.krad.uif.core.ComponentBase#getNestedComponents()
122 	 */
123 	@Override
124 	public List<Component> getNestedComponents() {
125 		List<Component> components = super.getNestedComponents();
126 
127 		components.add(labelField);
128 
129 		return components;
130 	}
131 
132 	/**
133 	 * @see org.kuali.rice.krad.uif.field.Field#getLabel()
134 	 */
135 	public String getLabel() {
136 		if (labelField != null) {
137 			return labelField.getLabelText();
138 		}
139 
140 		return null;
141 	}
142 
143 	/**
144 	 * @see org.kuali.rice.krad.uif.field.Field#setLabel(java.lang.String)
145 	 */
146 	public void setLabel(String label) {
147         if (StringUtils.isNotBlank(label) && labelField == null) {
148             labelField = ComponentFactory.getLabelField();
149         }
150 
151 		if (labelField != null) {
152 			labelField.setLabelText(label);
153 		}
154 	}
155 
156 	/**
157 	 * @see org.kuali.rice.krad.uif.field.Field#getShortLabel()
158 	 */
159 	public String getShortLabel() {
160 		return this.shortLabel;
161 	}
162 
163 	/**
164 	 * @see org.kuali.rice.krad.uif.field.Field#setShortLabel(java.lang.String)
165 	 */
166 	public void setShortLabel(String shortLabel) {
167 		this.shortLabel = shortLabel;
168 	}
169 
170 	/**
171 	 * Sets whether the label should be displayed
172 	 * 
173 	 * <p>
174 	 * Convenience method for configuration that sets the render indicator on
175 	 * the fields <code>LabelField</code> instance
176 	 * </p>
177 	 * 
178 	 * @param showLabel
179 	 *            boolean true if label should be displayed, false if the label
180 	 *            should not be displayed
181 	 */
182 	public void setShowLabel(boolean showLabel) {
183 		if (labelField != null) {
184 			labelField.setRender(showLabel);
185 		}
186 	}
187 
188 	/**
189 	 * @see org.kuali.rice.krad.uif.field.Field#getLabelField()
190 	 */
191 	public LabelField getLabelField() {
192 		return this.labelField;
193 	}
194 
195 	/**
196 	 * @see org.kuali.rice.krad.uif.field.Field#setLabelField(org.kuali.rice.krad.uif.field.LabelField)
197 	 */
198 	public void setLabelField(LabelField labelField) {
199 		this.labelField = labelField;
200 	}
201 
202 	public String getLabelPlacement() {
203 		return this.labelPlacement;
204 	}
205 
206 	public void setLabelPlacement(String labelPlacement) {
207 		this.labelPlacement = labelPlacement;
208 	}
209 
210 	/**
211 	 * @see org.kuali.rice.krad.uif.field.Field#isLabelFieldRendered()
212 	 */
213 	public boolean isLabelFieldRendered() {
214 		return this.labelFieldRendered;
215 	}
216 
217 	/**
218 	 * @see org.kuali.rice.krad.uif.field.Field#setLabelFieldRendered(boolean)
219 	 */
220 	public void setLabelFieldRendered(boolean labelFieldRendered) {
221 		this.labelFieldRendered = labelFieldRendered;
222 	}
223 }