001 /**
002 * Copyright 2005-2012 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.datadictionary;
017
018 import org.apache.commons.lang.StringUtils;
019 import org.kuali.rice.krad.bo.Exporter;
020 import org.kuali.rice.krad.datadictionary.InactivationBlockingDefinition;
021 import org.kuali.rice.krad.datadictionary.exception.AttributeValidationException;
022 import org.kuali.rice.krad.datadictionary.validation.capability.MustOccurConstrainable;
023 import org.kuali.rice.krad.datadictionary.validation.constraint.MustOccurConstraint;
024
025 import java.util.List;
026
027 /**
028 * Generic dictionary entry for an object that does not have to implement BusinessObject. It provides support
029 * for general objects.
030 *
031 * @author Kuali Rice Team (rice.collab@kuali.org)
032 */
033 public class DataObjectEntry extends DataDictionaryEntryBase implements MustOccurConstrainable {
034
035 protected String name;
036 protected Class<?> dataObjectClass;
037
038 protected String titleAttribute;
039 protected String objectLabel;
040 protected String objectDescription;
041
042 protected List<String> primaryKeys;
043 protected Class<? extends Exporter> exporterClass;
044
045 protected List<MustOccurConstraint> mustOccurConstraints;
046
047 protected List<String> groupByAttributesForEffectiveDating;
048
049 protected HelpDefinition helpDefinition;
050
051
052 protected boolean boNotesEnabled = false;
053
054 protected List<InactivationBlockingDefinition> inactivationBlockingDefinitions;
055
056 @Override
057 public void completeValidation() {
058 //KFSMI-1340 - Object label should never be blank
059 if (StringUtils.isBlank(getObjectLabel())) {
060 throw new AttributeValidationException("Object label cannot be blank for class " + dataObjectClass.getName());
061 }
062
063 super.completeValidation();
064 }
065
066 /**
067 * @see org.kuali.rice.krad.datadictionary.DataDictionaryEntry#getJstlKey()
068 */
069 @Override
070 public String getJstlKey() {
071 if (dataObjectClass == null) {
072 throw new IllegalStateException("cannot generate JSTL key: dataObjectClass is null");
073 }
074
075 return (dataObjectClass != null) ? dataObjectClass.getSimpleName() : dataObjectClass.getSimpleName();
076 }
077
078 /**
079 * @see org.kuali.rice.krad.datadictionary.DataDictionaryEntry#getFullClassName()
080 */
081 @Override
082 public String getFullClassName() {
083 return dataObjectClass.getName();
084 }
085
086 /**
087 * @see org.kuali.rice.krad.datadictionary.DataDictionaryEntryBase#getEntryClass()
088 */
089 @Override
090 public Class<?> getEntryClass() {
091 return dataObjectClass;
092 }
093
094 /**
095 * @return the dataObjectClass
096 */
097 public Class<?> getDataObjectClass() {
098 return this.dataObjectClass;
099 }
100
101 /**
102 * @param dataObjectClass the dataObjectClass to set
103 */
104 public void setDataObjectClass(Class<?> dataObjectClass) {
105 this.dataObjectClass = dataObjectClass;
106 }
107
108 /**
109 * @return the name
110 */
111 public String getName() {
112 return this.name;
113 }
114
115 /**
116 * @param name the name to set
117 */
118 public void setName(String name) {
119 this.name = name;
120 }
121
122 /**
123 * @return Returns the objectLabel.
124 */
125 public String getObjectLabel() {
126 return objectLabel;
127 }
128
129 /**
130 * The objectLabel provides a short name of the business
131 * object for use on help screens.
132 *
133 * @param objectLabel The objectLabel to set.
134 */
135 public void setObjectLabel(String objectLabel) {
136 this.objectLabel = objectLabel;
137 }
138
139 /**
140 * @return Returns the description.
141 */
142 public String getObjectDescription() {
143 return objectDescription;
144 }
145
146 /**
147 * The objectDescription provides a brief description
148 * of the business object for use on help screens.
149 *
150 * @param description The description to set.
151 */
152 public void setObjectDescription(String objectDescription) {
153 this.objectDescription = objectDescription;
154 }
155
156 /**
157 * Gets the helpDefinition attribute.
158 *
159 * @return Returns the helpDefinition.
160 */
161 public HelpDefinition getHelpDefinition() {
162 return helpDefinition;
163 }
164
165 /**
166 * Sets the helpDefinition attribute value.
167 *
168 * The objectHelp element provides the keys to
169 * obtain a help description from the system parameters table.
170 *
171 * parameterNamespace the namespace of the parameter containing help information
172 * parameterName the name of the parameter containing help information
173 * parameterDetailType the detail type of the parameter containing help information
174 *
175 * @param helpDefinition The helpDefinition to set.
176 */
177 public void setHelpDefinition(HelpDefinition helpDefinition) {
178 this.helpDefinition = helpDefinition;
179 }
180
181 /**
182 * @see java.lang.Object#toString()
183 */
184 @Override
185 public String toString() {
186 return "DataObjectEntry for " + getDataObjectClass();
187 }
188
189 /**
190 * @return the mustOccurConstraints
191 */
192 public List<MustOccurConstraint> getMustOccurConstraints() {
193 return this.mustOccurConstraints;
194 }
195
196 /**
197 * @param mustOccurConstraints the mustOccurConstraints to set
198 */
199 public void setMustOccurConstraints(List<MustOccurConstraint> mustOccurConstraints) {
200 this.mustOccurConstraints = mustOccurConstraints;
201 }
202
203 /**
204 * @return the titleAttribute
205 */
206 public String getTitleAttribute() {
207 return this.titleAttribute;
208 }
209
210 /**
211 * The titleAttribute element is the name of the attribute that
212 * will be used as an inquiry field when the lookup search results
213 * fields are displayed.
214 *
215 * For some business objects, there is no obvious field to serve
216 * as the inquiry field. in that case a special field may be required
217 * for inquiry purposes.
218 */
219 public void setTitleAttribute(String titleAttribute) {
220 this.titleAttribute = titleAttribute;
221 }
222
223 /**
224 * @return the primaryKeys
225 */
226 public List<String> getPrimaryKeys() {
227 return this.primaryKeys;
228 }
229
230 /**
231 * @param primaryKeys the primaryKeys to set
232 */
233 public void setPrimaryKeys(List<String> primaryKeys) {
234 this.primaryKeys = primaryKeys;
235 }
236
237 public Class<? extends Exporter> getExporterClass() {
238 return this.exporterClass;
239 }
240
241 public void setExporterClass(Class<? extends Exporter> exporterClass) {
242 this.exporterClass = exporterClass;
243 }
244
245 /**
246 * Provides list of attributes that should be used for grouping
247 * when performing effective dating logic in the framework
248 *
249 * @return List<String> list of attributes to group by
250 */
251 public List<String> getGroupByAttributesForEffectiveDating() {
252 return this.groupByAttributesForEffectiveDating;
253 }
254
255 /**
256 * Setter for the list of attributes to group by
257 *
258 * @param groupByAttributesForEffectiveDating
259 */
260 public void setGroupByAttributesForEffectiveDating(List<String> groupByAttributesForEffectiveDating) {
261 this.groupByAttributesForEffectiveDating = groupByAttributesForEffectiveDating;
262 }
263
264
265 /**
266 * Gets the boNotesEnabled flag for the Data object
267 *
268 * <p>
269 * true indicates that notes and attachments will be permanently
270 * associated with the business object
271 * false indicates that notes and attachments are associated
272 * with the document used to create or edit the business object.
273 * </p>
274 *
275 * @return the boNotesEnabled flag
276 */
277 public boolean isBoNotesEnabled() {
278 return boNotesEnabled;
279 }
280
281 /**
282 * Setter for the boNotesEnabled flag
283 */
284 public void setBoNotesEnabled(boolean boNotesEnabled) {
285 this.boNotesEnabled = boNotesEnabled;
286 }
287
288 /**
289 * Gets the inactivationBlockingDefinitions for the Data object
290 *
291 * <p>
292 *
293 * </p>
294 *
295 * @return the list of <code>InactivationBlockingDefinition</code>
296 */
297 public List<InactivationBlockingDefinition> getInactivationBlockingDefinitions() {
298 return this.inactivationBlockingDefinitions;
299 }
300
301 /**
302 * Setter for the inactivationBlockingDefinitions
303 */
304 public void setInactivationBlockingDefinitions(
305 List<InactivationBlockingDefinition> inactivationBlockingDefinitions) {
306 this.inactivationBlockingDefinitions = inactivationBlockingDefinitions;
307 }
308 }