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 }