1 /**
2 * Copyright 2005-2012 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.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.component.Component;
21 import org.kuali.rice.krad.uif.view.View;
22
23 import java.util.List;
24
25 /**
26 * Contains a label for another <code>Field</code> instance
27 *
28 * <p>
29 * The <code>LabelField</code> exists so that the label can be placed separate
30 * from the component in a layout manager such as the
31 * <code>GridLayoutManager</code>. It addition it can be used to style the label
32 * (from the inherited styleClass and style properties)
33 * </p>
34 *
35 * @author Kuali Rice Team (rice.collab@kuali.org)
36 */
37 public class LabelField extends FieldBase {
38 private static final long serialVersionUID = -6491546893195180114L;
39
40 private String labelText;
41 private String labelForComponentId;
42
43 private boolean renderColon;
44
45 private Position requiredMessagePlacement;
46 private MessageField requiredMessageField;
47
48 public LabelField() {
49 renderColon = true;
50
51 requiredMessagePlacement = Position.LEFT;
52 }
53
54 /**
55 * The following finalization is performed:
56 *
57 * <ul>
58 * <li>If label text is blank, set render to false for field</li>
59 *
60 * @see org.kuali.rice.krad.uif.component.ComponentBase#performFinalize(org.kuali.rice.krad.uif.view.View,
61 * java.lang.Object, org.kuali.rice.krad.uif.component.Component)
62 */
63 @Override
64 public void performFinalize(View view, Object model, Component parent) {
65 super.performFinalize(view, model, parent);
66
67 if (StringUtils.isBlank(getLabelText())) {
68 setRender(false);
69 }
70 }
71
72 /**
73 * @see org.kuali.rice.krad.uif.component.ComponentBase#getComponentsForLifecycle()
74 */
75 @Override
76 public List<Component> getComponentsForLifecycle() {
77 List<Component> components = super.getComponentsForLifecycle();
78
79 components.add(requiredMessageField);
80
81 return components;
82 }
83
84 /**
85 * Indicates the id for the component the label applies to
86 * <p>
87 * Used for setting the labelFor attribute of the corresponding HTML
88 * element. Note this gets set automatically by the framework during the
89 * initialize phase
90 * </p>
91 *
92 * @return String component id
93 */
94 public String getLabelForComponentId() {
95 return this.labelForComponentId;
96 }
97
98 /**
99 * Setter for the component id the label applies to
100 *
101 * @param labelForComponentId
102 */
103 public void setLabelForComponentId(String labelForComponentId) {
104 this.labelForComponentId = labelForComponentId;
105 }
106
107 /**
108 * Text that will display as the label
109 *
110 * @return String label text
111 */
112 public String getLabelText() {
113 return this.labelText;
114 }
115
116 /**
117 * Setter for the label text
118 *
119 * @param labelText
120 */
121 public void setLabelText(String labelText) {
122 this.labelText = labelText;
123 }
124
125 /**
126 * Indicates whether a colon should be rendered after the label text,
127 * generally used when the label appears to the left of the field's control
128 * or value
129 *
130 * @return boolean true if a colon should be rendered, false if it should
131 * not be
132 */
133 public boolean isRenderColon() {
134 return this.renderColon;
135 }
136
137 /**
138 * Setter for the render colon indicator
139 *
140 * @param renderColon
141 */
142 public void setRenderColon(boolean renderColon) {
143 this.renderColon = renderColon;
144 }
145
146 /**
147 * <code>MessageField</code> instance that will display a required indicator
148 *
149 * <p>
150 * To indicate a field must have a value (required input) the required
151 * message field can be set to display an indicator or message along with
152 * the label. The message field also dictates the styling of the required
153 * message
154 * </p>
155 *
156 * @return MessageField instance
157 */
158 public MessageField getRequiredMessageField() {
159 return this.requiredMessageField;
160 }
161
162 /**
163 * Setter for the required message field
164 *
165 * @param requiredMessageField
166 */
167 public void setRequiredMessageField(MessageField requiredMessageField) {
168 this.requiredMessageField = requiredMessageField;
169 }
170
171 /**
172 * Indicates where the required message field should be placed in relation
173 * to the label field, valid options are 'LEFT' and 'RIGHT'
174 *
175 * @return Position the requiredMessage placement
176 */
177 public Position getRequiredMessagePlacement() {
178 return this.requiredMessagePlacement;
179 }
180
181 /**
182 * Setter for the required message field placement
183 *
184 * @param requiredMessagePlacement
185 */
186 public void setRequiredMessagePlacement(Position requiredMessagePlacement) {
187 this.requiredMessagePlacement = requiredMessagePlacement;
188 }
189
190 }