1 /**
2 * Copyright 2005-2014 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.data.metadata;
17
18 import com.google.common.annotations.Beta;
19 import org.kuali.rice.core.api.data.DataType;
20 import org.kuali.rice.krad.data.DataObjectService;
21 import org.kuali.rice.krad.data.provider.PersistenceProvider;
22 import org.kuali.rice.krad.data.provider.annotation.UifDisplayHint;
23 import org.kuali.rice.krad.keyvalues.KeyValuesFinder;
24
25 import java.beans.PropertyEditor;
26 import java.util.Set;
27
28 /**
29 * Attribute metadata
30 *
31 * <p>
32 * Represents attribute metadata (persistent or non-persistent) for a data object.
33 * </p>
34 *
35 * @author Kuali Rice Team (rice.collab@kuali.org)
36 */
37 public interface DataObjectAttribute extends MetadataCommon {
38
39 /**
40 * Gets the data object type
41 *
42 * <p>
43 * Gets the data object type to which this attribute belongs.
44 * </p>
45 *
46 * @return class type
47 */
48 Class<?> getOwningType();
49
50 /**
51 * Gets the display attribute name.
52 *
53 * <p>
54 * To be used on attributes which have an associated business key that is shown to users rather than the "internal"
55 * key which is likely a meaningless (to the users) sequence number.
56 * </p>
57 *
58 * @return user friendly business key
59 */
60 String getDisplayAttributeName();
61
62 /**
63 * Gets the maximum length.
64 *
65 * <p>
66 * The maximum length value which will be accepted into this field.
67 * </p>
68 *
69 * @return maximum length
70 */
71 Long getMaxLength();
72
73 /**
74 * Gets the minimum length.
75 *
76 * <p>
77 * The minimum length value which will be accepted into this field.
78 * </p>
79 *
80 * @return minimum length
81 */
82 Long getMinLength();
83
84 /**
85 * Determines if attribute is case insensitive.
86 *
87 * <p>
88 * Whether this attribute should be treated as case insensitive when performing lookups and searches.
89 * </p>
90 *
91 * @return attribute case insensitive
92 */
93 boolean isCaseInsensitive();
94
95 /**
96 * Determines if attribute should be forced to upper case.
97 *
98 * <p>
99 * Whether this attribute should be forced to upper case before being sent to the {@link PersistenceProvider}.
100 * </p>
101 *
102 * @return attribute forced upper case
103 */
104 boolean isForceUppercase();
105
106 /**
107 * Determines if attribute is required.
108 *
109 * <p>
110 * Whether (at the data level) this attribute must have a non-null value.
111 * </p>
112 *
113 * @return attribute is required
114 */
115 boolean isRequired();
116
117 /**
118 * BETA: Gets the bean name.
119 *
120 * <p>
121 * The bean name (in the UIF data dictionary), which checks the entered value's characters for correctness.
122 * </p>
123 *
124 * @return bean name
125 */
126 @Beta
127 String getValidCharactersConstraintBeanName();
128
129 /**
130 * Gets the property editor.
131 *
132 * <p>
133 * To be used by the persistence layer when loading and persisting the data.
134 * (E.g., strip extra characters from phone numbers to leave only the digits for storage in the database.).
135 * </p>
136 *
137 * @return property editor
138 */
139 PropertyEditor getPropertyEditor();
140
141 /**
142 * Determines attribute case insensitivity.
143 *
144 * <p>
145 * Whether this attribute is protected at the persistence level and should be protected by default when included on
146 * user interfaces.
147 * </p>
148 *
149 * @return attribute case insensitivity
150 */
151 boolean isSensitive();
152
153 /**
154 * Gets the values if a drop-down.
155 *
156 * <p>
157 * If this field should be rendered using a drop-down list, specify the instance on this property.
158 * </p>
159 *
160 * @return drop-down values
161 */
162 KeyValuesFinder getValidValues();
163
164 /**
165 * Gets the derived krad data type.
166 *
167 * <p>
168 * The derived krad-data data type used by the UIF to help generate the appropriate control and perform default
169 * validation.
170 * </p>
171 *
172 * @return derived keard data type
173 */
174 DataType getDataType();
175
176 /**
177 * Determines whether data object is persistent.
178 *
179 * <p>
180 * Whether or not this attribute of the data object is saved to persistent storage when saved via the
181 * {@link DataObjectService}.
182 * </p>
183 *
184 * @return whether data object is persistent
185 */
186 boolean isPersisted();
187
188 /**
189 * Gets class type object is inherited from.
190 *
191 * <p>
192 * If this attribute is inherited from a different data object, that object's type. Otherwise null.
193 * </p>
194 *
195 * @return class type inherited from
196 */
197 Class<?> getInheritedFromType();
198
199 /**
200 * Gets inherited attribute name.
201 *
202 * <p>
203 * If this attribute is inherited from a different data object, the source attribute name. Otherwise null.
204 * </p>
205 *
206 * @return inherited attribute name
207 */
208 String getInheritedFromAttributeName();
209
210 /**
211 * Gets inherited parent attribute name.
212 *
213 * <p>
214 * If this attribute is inherited from a different data object, the attribute name on the parent object. Otherwise
215 * null.
216 * </p>
217 *
218 * @return inherited parent attribute name
219 */
220 String getInheritedFromParentAttributeName();
221
222 /**
223 * Determines whether attribute is inherited.
224 *
225 * <p>
226 * Whether this attribute is inherited from a different data object.
227 * </p>
228 *
229 * @return whether attribute is inherited
230 */
231 boolean isInherited();
232
233 /**
234 * Gets original data object.
235 *
236 * <p>
237 * Obtains the "original" data object attribute in a chain of embedded attribute definitions.
238 * </p>
239 *
240 * @return original data object
241 */
242 DataObjectAttribute getOriginalDataObjectAttribute();
243
244 /**
245 * BETA: Gets the display hints.
246 *
247 * <p>
248 * Returns a set of display hints which can be used by the UIF layer when displaying these fields.
249 * </p>
250 *
251 * @return display hints
252 */
253 @Beta
254 Set<UifDisplayHint> getDisplayHints();
255 }