001/** 002 * Copyright 2005-2018 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 */ 016package org.kuali.rice.krad.datadictionary; 017 018import org.apache.commons.lang.StringUtils; 019import org.kuali.rice.krad.bo.BusinessObject; 020import org.kuali.rice.krad.datadictionary.parse.BeanTag; 021import org.kuali.rice.krad.datadictionary.parse.BeanTagAttribute; 022import org.kuali.rice.krad.datadictionary.validator.ValidationTrace; 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@BeanTag(name = "businessObjectEntry") 033public class BusinessObjectEntry extends DataObjectEntry { 034 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(BusinessObjectEntry.class); 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 base class 056 * for the dataObjectClass, allowing the data dictionary to index by the base class 057 * in addition to the current class. 058 */ 059 060 public void setBaseBusinessObjectClass(Class<? extends BusinessObject> baseBusinessObjectClass) { 061 super.setBaseDataObjectClass(baseBusinessObjectClass); 062 } 063 064 @BeanTagAttribute(name = "baseBusinessObjectClass") 065 public Class<? extends BusinessObject> getBaseBusinessObjectClass() { 066 return (Class<? extends BusinessObject>) super.getBaseDataObjectClass(); 067 } 068 069 /** 070 * Directly validate simple fields, call completeValidation on Definition fields. 071 */ 072 @Override 073 public void completeValidation() { 074 completeValidation(new ValidationTrace()); 075 } 076 077 @Override 078 public void completeValidation(ValidationTrace tracer) { 079 super.completeValidation(tracer); 080 try { 081 if (inactivationBlockingDefinitions != null && !inactivationBlockingDefinitions.isEmpty()) { 082 for (InactivationBlockingDefinition inactivationBlockingDefinition : inactivationBlockingDefinitions) { 083 inactivationBlockingDefinition.completeValidation(getDataObjectClass(), null, tracer.getCopy()); 084 } 085 } 086 } catch (Exception ex) { 087 String currentValues[] = 088 {"BO Class = " + getBusinessObjectClass(), "Exception = " + ex.getMessage()}; 089 tracer.createError("Unable to validate BO Entry", currentValues); 090 LOG.error("Exception while validating BusinessObjectEntry: " + getBusinessObjectClass(), ex ); 091 } 092 } 093 094 @Override 095 public void dataDictionaryPostProcessing() { 096 super.dataDictionaryPostProcessing(); 097 if (inactivationBlockingDefinitions != null) { 098 for (InactivationBlockingDefinition ibd : inactivationBlockingDefinitions) { 099 ibd.setBusinessObjectClass(getBusinessObjectClass()); 100 if (StringUtils.isNotBlank(ibd.getBlockedReferencePropertyName()) 101 && ibd.getBlockedBusinessObjectClass() == null) { 102 // if the user didn't specify a class name for the blocked reference, determine it here 103 ibd.setBlockedBusinessObjectClass(DataDictionary.getAttributeClass(getDataObjectClass(), 104 ibd.getBlockedReferencePropertyName())); 105 } 106 ibd.setBlockingReferenceBusinessObjectClass(getBusinessObjectClass()); 107 } 108 } 109 } 110}