1 /**
2 * Copyright 2005-2013 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.datadictionary;
17
18 import org.apache.commons.lang.StringUtils;
19 import org.kuali.rice.krad.datadictionary.parse.BeanTagAttribute;
20 import org.kuali.rice.krad.datadictionary.validation.capability.ExistenceConstrainable;
21 import org.kuali.rice.krad.datadictionary.validation.capability.SimpleConstrainable;
22 import org.kuali.rice.krad.datadictionary.validation.constraint.SimpleConstraint;
23
24 /**
25 * Common class for attribute definitions in the DataDictionary, which contains
26 * information relating to the display, validation, and general maintenance of a
27 * specific attribute of an entry. An attribute can be a simple or complex attribute
28 *
29 * @author Kuali Rice Team (rice.collab@kuali.org)
30 */
31 public abstract class AttributeDefinitionBase extends DataDictionaryDefinitionBase implements ExistenceConstrainable,
32 SimpleConstrainable {
33
34 protected String name;
35
36 protected String label;
37 protected String shortLabel;
38 protected String displayLabelAttribute;
39
40 protected String constraintText;
41 protected String summary;
42 protected String description;
43
44 protected SimpleConstraint simpleConstraint;
45
46 public AttributeDefinitionBase() {
47 super();
48 simpleConstraint = new SimpleConstraint();
49 }
50
51 /**
52 * Name of the attribute
53 *
54 * @return the name
55 */
56 @BeanTagAttribute(name="name")
57 public String getName() {
58 return name;
59 }
60
61 /**
62 * Name of the attribute
63 *
64 * @param name
65 */
66 public void setName(String name) {
67 if (StringUtils.isBlank(name)) {
68 throw new IllegalArgumentException("invalid (blank) name");
69 }
70 this.name = name;
71 }
72
73 /**
74 * The label element is the field or collection name that will be shown on
75 * inquiry and maintenance screens. This will be overridden by presence of
76 * displayLabelAttribute element.
77 *
78 * @return the label
79 */
80 @BeanTagAttribute(name="label")
81 public String getLabel() {
82 return label;
83 }
84
85 /**
86 * The label element is the field or collection name that will be shown on
87 * inquiry and maintenance screens. This will be overridden by presence of
88 * displayLabelAttribute element.
89 */
90 public void setLabel(String label) {
91 if (StringUtils.isBlank(label)) {
92 throw new IllegalArgumentException("invalid (blank) label");
93 }
94 this.label = label;
95 }
96
97 /**
98 * @return the shortLabel, or the label if no shortLabel has been set
99 */
100 @BeanTagAttribute(name="shortLabel")
101 public String getShortLabel() {
102 return (shortLabel != null) ? shortLabel : getLabel();
103 }
104
105 /**
106 * @return the shortLabel directly, without substituting in the label
107 */
108 protected String getDirectShortLabel() {
109 return shortLabel;
110 }
111
112 /**
113 * The shortLabel element is the field or collection name that will be used
114 * in applications when a shorter name (than the label element) is required.
115 * This will be overridden by presence of displayLabelAttribute element.
116 */
117 public void setShortLabel(String shortLabel) {
118 if (StringUtils.isBlank(shortLabel)) {
119 throw new IllegalArgumentException("invalid (blank) shortLabel");
120 }
121 this.shortLabel = shortLabel;
122 }
123
124 /**
125 * Text that display a restriction on the value a field can hold
126 *
127 * <p>
128 * For example when the value must be a valid format (phone number, email), certain length, min/max value and
129 * so on this text can be used to indicate the constraint to the user. Generally displays with the control so
130 * it is visible when the user tabs to the field
131 * </p>
132 *
133 * @return String text to display for the constraint message
134 */
135 @BeanTagAttribute(name="constraintText")
136 public String getConstraintText() {
137 return this.constraintText;
138 }
139
140 /**
141 * Setter for the constraint message text
142 *
143 * @param constraintText
144 */
145 public void setConstraintText(String constraintText) {
146 this.constraintText = constraintText;
147 }
148
149 /**
150 * The summary element is used to provide a short description of the
151 * attribute or collection. This is designed to be used for help purposes.
152 *
153 * @return the summary
154 */
155 @BeanTagAttribute(name="summary")
156 public String getSummary() {
157 return summary;
158 }
159
160 /**
161 * The summary element is used to provide a short description of the
162 * attribute or collection. This is designed to be used for help purposes.
163 */
164 public void setSummary(String summary) {
165 this.summary = summary;
166 }
167
168 /**
169 * The description element is used to provide a long description of the
170 * attribute or collection. This is designed to be used for help purposes.
171 *
172 * @return the description
173 */
174 @BeanTagAttribute(name="description")
175 public String getDescription() {
176 return description;
177 }
178
179 /**
180 * The description element is used to provide a long description of the
181 * attribute or collection. This is designed to be used for help purposes.
182 */
183 public void setDescription(String description) {
184 this.description = description;
185 }
186
187 public String getDisplayLabelAttribute() {
188 return displayLabelAttribute;
189 }
190
191 /**
192 * The displayLabelAttribute element is used to indicate that the label and
193 * short label should be obtained from another attribute.
194 *
195 * The label element and short label element defined for this attribute will
196 * be overridden. Instead, the label and short label values will be obtained
197 * by referencing the corresponding values from the attribute indicated by
198 * this element.
199 */
200 public void setDisplayLabelAttribute(String displayLabelAttribute) {
201 this.displayLabelAttribute = displayLabelAttribute;
202 }
203
204 /**
205 * Gets the SimpleConstraint which contains settings for required, min, max, minLength, and maxLength.
206 *
207 * @return SimpleConstraint object
208 */
209 public SimpleConstraint getSimpleConstraint() {
210 return simpleConstraint;
211 }
212
213 /**
214 * Sets the SimpleConstraint which contains settings for required, min, max, minLength, and maxLength.
215 *
216 * @param simpleConstraint
217 */
218 public void setSimpleConstraint(SimpleConstraint simpleConstraint) {
219 this.simpleConstraint = simpleConstraint;
220 }
221
222 /**
223 * Sets if this attribute is required
224 *
225 * @param required true when required, false otherwise
226 */
227 public void setRequired(Boolean required) {
228 this.simpleConstraint.setRequired(required);
229 }
230
231 /**
232 * The required element allows values of "true" or "false". A value of
233 * "true" indicates that a value must be entered for this business object
234 * when creating or editing a new business object.
235 */
236 @BeanTagAttribute(name="required")
237 public Boolean isRequired() {
238 return this.simpleConstraint.isRequired();
239 }
240
241 }