001 /** 002 * Copyright 2005-2011 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.BusinessObject; 020 import org.kuali.rice.krad.datadictionary.exception.ClassValidationException; 021 022 import java.util.List; 023 024 /** 025 * A single BusinessObject entry in the DataDictionary, which contains information relating to the display, validation, 026 * and general maintenance of a BusinessObject and its attributes. 027 * 028 * Note: the setters do copious amounts of validation, to facilitate generating errors during the parsing process 029 * 030 * @author Kuali Rice Team (rice.collab@kuali.org) 031 */ 032 public class BusinessObjectEntry extends DataObjectEntry { 033 034 protected Class<? extends BusinessObject> baseBusinessObjectClass; 035 036 public void setBusinessObjectClass(Class<? extends BusinessObject> businessObjectClass) { 037 super.setDataObjectClass(businessObjectClass); 038 039 if (businessObjectClass == null) { 040 throw new IllegalArgumentException("invalid (null) dataObjectClass"); 041 } 042 043 if (getRelationships() != null) { 044 for (RelationshipDefinition rd : getRelationships()) { 045 rd.setSourceClass(businessObjectClass); 046 } 047 } 048 } 049 050 public Class<? extends BusinessObject> getBusinessObjectClass() { 051 return (Class<? extends BusinessObject>) super.getDataObjectClass(); 052 } 053 054 /** 055 * The baseBusinessObjectClass is an optional parameter for specifying a superclass 056 * for the dataObjectClass, allowing the data dictionary to index by superclass 057 * in addition to the current class. 058 */ 059 060 public void setBaseBusinessObjectClass(Class<? extends BusinessObject> baseBusinessObjectClass) { 061 this.baseBusinessObjectClass = baseBusinessObjectClass; 062 } 063 064 public Class<? extends BusinessObject> getBaseBusinessObjectClass() { 065 return baseBusinessObjectClass; 066 } 067 068 /** 069 * Directly validate simple fields, call completeValidation on Definition fields. 070 */ 071 @Override 072 public void completeValidation() { 073 try { 074 075 if (baseBusinessObjectClass != null && !baseBusinessObjectClass.isAssignableFrom(getDataObjectClass())) { 076 throw new ClassValidationException("The baseBusinessObjectClass " + baseBusinessObjectClass.getName() + 077 " is not a superclass of the dataObjectClass " + getDataObjectClass().getName()); 078 } 079 080 super.completeValidation(); 081 082 if (inactivationBlockingDefinitions != null && !inactivationBlockingDefinitions.isEmpty()) { 083 for (InactivationBlockingDefinition inactivationBlockingDefinition : inactivationBlockingDefinitions) { 084 inactivationBlockingDefinition.completeValidation(getDataObjectClass(), null); 085 } 086 } 087 } catch (DataDictionaryException ex) { 088 // just rethrow 089 throw ex; 090 } catch (Exception ex) { 091 throw new DataDictionaryException("Exception validating " + this, ex); 092 } 093 } 094 095 /** 096 * @see org.kuali.rice.krad.datadictionary.DataDictionaryEntryBase#afterPropertiesSet() 097 */ 098 @SuppressWarnings("unchecked") 099 @Override 100 public void afterPropertiesSet() throws Exception { 101 super.afterPropertiesSet(); 102 if (inactivationBlockingDefinitions != null) { 103 for (InactivationBlockingDefinition ibd : inactivationBlockingDefinitions) { 104 ibd.setBusinessObjectClass(getBusinessObjectClass()); 105 if (StringUtils.isNotBlank(ibd.getBlockedReferencePropertyName()) && 106 ibd.getBlockedBusinessObjectClass() == null) { 107 // if the user didn't specify a class name for the blocked reference, determine it here 108 ibd.setBlockedBusinessObjectClass(DataDictionary 109 .getAttributeClass(getDataObjectClass(), ibd.getBlockedReferencePropertyName())); 110 } 111 ibd.setBlockingReferenceBusinessObjectClass(getBusinessObjectClass()); 112 } 113 } 114 } 115 116 /** 117 * @see java.lang.Object#toString() 118 */ 119 @Override 120 public String toString() { 121 return "BusinessObjectEntry for " + getBusinessObjectClass(); 122 } 123 }