View Javadoc

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.bo.BusinessObject;
20  import org.kuali.rice.krad.datadictionary.parse.BeanTag;
21  import org.kuali.rice.krad.datadictionary.parse.BeanTagAttribute;
22  
23  /**
24   * A single BusinessObject entry in the DataDictionary, which contains information relating to the display, validation,
25   * and general maintenance of a BusinessObject and its attributes.
26   *
27   * Note: the setters do copious amounts of validation, to facilitate generating errors during the parsing process
28   *
29   * @author Kuali Rice Team (rice.collab@kuali.org)
30   */
31  @BeanTag(name = "businessObjectEntry-bean")
32  public class BusinessObjectEntry extends DataObjectEntry {
33  
34      protected Class<? extends BusinessObject> baseBusinessObjectClass;
35  
36      public void setBusinessObjectClass(Class<? extends BusinessObject> businessObjectClass) {
37          super.setDataObjectClass(businessObjectClass);
38  
39          if (businessObjectClass == null) {
40              throw new IllegalArgumentException("invalid (null) dataObjectClass");
41          }
42  
43          if (getRelationships() != null) {
44              for (RelationshipDefinition rd : getRelationships()) {
45                  rd.setSourceClass(businessObjectClass);
46              }
47          }
48      }
49  
50      public Class<? extends BusinessObject> getBusinessObjectClass() {
51          return (Class<? extends BusinessObject>) super.getDataObjectClass();
52      }
53  
54      /**
55       * The baseBusinessObjectClass is an optional parameter for specifying a base class
56       * for the dataObjectClass, allowing the data dictionary to index by the base class
57       * in addition to the current class.
58       */
59  
60      public void setBaseBusinessObjectClass(Class<? extends BusinessObject> baseBusinessObjectClass) {
61          this.baseBusinessObjectClass = baseBusinessObjectClass;
62      }
63  
64      @BeanTagAttribute(name = "baseBusinessObjectClass")
65      public Class<? extends BusinessObject> getBaseBusinessObjectClass() {
66          return baseBusinessObjectClass;
67      }
68  
69      /**
70       * Directly validate simple fields, call completeValidation on Definition fields.
71       */
72      @Override
73      public void completeValidation() {
74          try {
75  
76              super.completeValidation();
77  
78              if (inactivationBlockingDefinitions != null && !inactivationBlockingDefinitions.isEmpty()) {
79                  for (InactivationBlockingDefinition inactivationBlockingDefinition : inactivationBlockingDefinitions) {
80                      inactivationBlockingDefinition.completeValidation(getDataObjectClass(), null);
81                  }
82              }
83          } catch (DataDictionaryException ex) {
84              // just rethrow
85              throw ex;
86          } catch (Exception ex) {
87              throw new DataDictionaryException("Exception validating " + this, ex);
88          }
89      }
90  
91      /**
92       * @see org.kuali.rice.krad.datadictionary.DataDictionaryEntryBase#afterPropertiesSet()
93       */
94      @SuppressWarnings("unchecked")
95      @Override
96      public void afterPropertiesSet() throws Exception {
97          super.afterPropertiesSet();
98          if (inactivationBlockingDefinitions != null) {
99              for (InactivationBlockingDefinition ibd : inactivationBlockingDefinitions) {
100                 ibd.setBusinessObjectClass(getBusinessObjectClass());
101                 if (StringUtils.isNotBlank(ibd.getBlockedReferencePropertyName())
102                         && ibd.getBlockedBusinessObjectClass() == null) {
103                     // if the user didn't specify a class name for the blocked reference, determine it here
104                     ibd.setBlockedBusinessObjectClass(DataDictionary.getAttributeClass(getDataObjectClass(),
105                             ibd.getBlockedReferencePropertyName()));
106                 }
107                 ibd.setBlockingReferenceBusinessObjectClass(getBusinessObjectClass());
108             }
109         }
110     }
111 
112     /**
113      * @see java.lang.Object#toString()
114      */
115     @Override
116     public String toString() {
117         return "BusinessObjectEntry for " + getBusinessObjectClass();
118     }
119 }