001 /**
002 * Copyright 2005-2013 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.control;
017
018 import org.kuali.rice.krad.datadictionary.parse.BeanTag;
019 import org.kuali.rice.krad.datadictionary.parse.BeanTagAttribute;
020 import org.kuali.rice.krad.datadictionary.validator.ErrorReport;
021 import org.kuali.rice.krad.datadictionary.validator.ValidationTrace;
022 import org.kuali.rice.krad.uif.component.Component;
023 import org.kuali.rice.krad.uif.element.Message;
024 import org.kuali.rice.krad.uif.util.ComponentFactory;
025 import org.kuali.rice.krad.uif.view.View;
026
027 import java.util.ArrayList;
028 import java.util.List;
029
030 /**
031 * Represents a HTML Checkbox control. Typically used for boolean attributes (where the
032 * value is either on/off, true/false)
033 *
034 * @author Kuali Rice Team (rice.collab@kuali.org)
035 */
036 @BeanTag(name = "checkboxControl-bean", parent = "Uif-CheckboxControl")
037 public class CheckboxControl extends ControlBase implements ValueConfiguredControl {
038 private static final long serialVersionUID = -1397028958569144230L;
039
040 private String value;
041 private String checkboxLabel;
042
043 private Message richLabelMessage;
044 private List<Component> inlineComponents;
045
046 public CheckboxControl() {
047 super();
048 }
049
050 /**
051 * Sets up rich message content for the label, if any exists
052 *
053 * @see Component#performApplyModel(org.kuali.rice.krad.uif.view.View, Object, org.kuali.rice.krad.uif.component.Component)
054 */
055 @Override
056 public void performApplyModel(View view, Object model, Component parent) {
057 super.performApplyModel(view, model, parent);
058
059 if (richLabelMessage == null) {
060 Message message = ComponentFactory.getMessage();
061 view.assignComponentIds(message);
062 message.setMessageText(checkboxLabel);
063 message.setInlineComponents(inlineComponents);
064 message.setGenerateSpan(false);
065 view.getViewHelperService().performComponentInitialization(view, model, message);
066 this.setRichLabelMessage(message);
067 }
068 }
069
070 /**
071 * @see org.kuali.rice.krad.uif.component.ComponentBase#getComponentsForLifecycle()
072 */
073 @Override
074 public List<Component> getComponentsForLifecycle() {
075 List<Component> components = super.getComponentsForLifecycle();
076
077 components.add(richLabelMessage);
078
079 return components;
080 }
081
082 /**
083 * The value that will be submitted when the checkbox control is checked
084 *
085 * <p>
086 * Value can be left blank, in which case the checkbox will submit a boolean value that
087 * will populate a boolean property. In cases where the checkbox needs to submit another value (for
088 * instance possibly in the checkbox group) the value can be set which will override the default.
089 * </p>
090 *
091 * @return value for checkbox
092 */
093 @BeanTagAttribute(name="value")
094 public String getValue() {
095 return value;
096 }
097
098 /**
099 * Setter for the value that should be submitted when the checkbox is checked
100 *
101 * @param value
102 */
103 public void setValue(String value) {
104 this.value = value;
105 }
106
107 /**
108 * Returns the label text for this checkbox
109 *
110 * @return the checkbox label text
111 */
112 @BeanTagAttribute(name="checkboxLabel")
113 public String getCheckboxLabel() {
114 return checkboxLabel;
115 }
116
117 /**
118 * Sets the label text for this checkbox
119 *
120 * @param checkboxLabel the label text
121 */
122 public void setCheckboxLabel(String checkboxLabel) {
123 this.checkboxLabel = checkboxLabel;
124 }
125
126 /**
127 * Gets the Message that represents the rich message content of the label if labelText is using rich message tags.
128 * <b>DO NOT set this
129 * property directly unless you need full control over the message structure.</b>
130 *
131 * @return Message with rich message structure, null if no rich message structure
132 */
133 @BeanTagAttribute(name="richLabelMessage",type= BeanTagAttribute.AttributeType.SINGLEBEAN)
134 public Message getRichLabelMessage() {
135 return richLabelMessage;
136 }
137
138 /**
139 * Sets the Message that represents the rich message content of the label if it is using rich message tags. <b>DO
140 * NOT set this
141 * property directly unless you need full control over the message structure.</b>
142 *
143 * @param richLabelMessage
144 */
145 public void setRichLabelMessage(Message richLabelMessage) {
146 this.richLabelMessage = richLabelMessage;
147 }
148
149 /**
150 * Gets the inlineComponents used by index in the checkboxLabel that has rich message component index tags
151 *
152 * @return the Label's inlineComponents
153 */
154 @BeanTagAttribute(name="inlineComponents",type= BeanTagAttribute.AttributeType.LISTBEAN)
155 public List<Component> getInlineComponents() {
156 return inlineComponents;
157 }
158
159 /**
160 * Sets the inlineComponents used by index in the checkboxLabel that has rich message component index tags
161 *
162 * @param inlineComponents
163 */
164 public void setInlineComponents(List<Component> inlineComponents) {
165 this.inlineComponents = inlineComponents;
166 }
167
168 /**
169 * @see org.kuali.rice.krad.uif.component.Component#completeValidation
170 */
171 @Override
172 public void completeValidation(ValidationTrace tracer){
173 tracer.addBean(this);
174
175 super.completeValidation(tracer.getCopy());
176 }
177 }