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    }