001/**
002 * Copyright 2005-2016 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.exception.AttributeValidationException;
021
022/**
023 * This is a description of what this class does - wliang don't forget to fill this in. 
024 * 
025 * @author Kuali Rice Team (rice.collab@kuali.org)
026 *
027 */
028public class InactivationBlockingDefinition extends DataDictionaryDefinitionBase implements InactivationBlockingMetadata {
029        private static final long serialVersionUID = -8765429636173190984L;
030        
031        protected  Class<? extends BusinessObject> blockingReferenceBusinessObjectClass;
032    protected  String blockedReferencePropertyName;
033    protected  Class<? extends BusinessObject> blockedBusinessObjectClass;
034    protected  String inactivationBlockingDetectionServiceBeanName;
035    protected  String relationshipLabel;
036    protected Class<? extends BusinessObject> businessObjectClass;
037
038    public InactivationBlockingDefinition() {
039    }    
040
041    /**
042     * This overridden method ...
043     * 
044     * @see org.kuali.rice.krad.datadictionary.DataDictionaryDefinition#completeValidation(java.lang.Class, java.lang.Class)
045     */
046    @SuppressWarnings("unchecked")
047        public void completeValidation(Class rootBusinessObjectClass, Class otherBusinessObjectClass) {
048        if (StringUtils.isBlank(inactivationBlockingDetectionServiceBeanName)) {
049                if (StringUtils.isBlank(blockedReferencePropertyName)) {
050                        // the default inactivation blocking detection service (used when inactivationBlockingDetectionServiceBeanName is blank) requires that the property name be set
051                    throw new AttributeValidationException("inactivationBlockingDetectionServiceBeanName and  blockedReferencePropertyName can't both be blank in InactivationBlockingDefinition for class " +
052                            rootBusinessObjectClass.getClass().getName());
053                }
054        }
055        if (getBlockedBusinessObjectClass() == null) {
056                throw new AttributeValidationException("Unable to determine blockedReferenceBusinessObjectClass in InactivationBlockingDefinition for class " +
057                            rootBusinessObjectClass.getClass().getName());
058        }
059        if (!BusinessObject.class.isAssignableFrom(getBlockedBusinessObjectClass())) {
060            throw new AttributeValidationException("InactivationBlockingDefinitions must block a reference of type BusinessObject.  Class name: " +
061                    rootBusinessObjectClass.getClass().getName() + " blockedReferencePropertyName " + blockedReferencePropertyName + 
062                    " class that should have been a BusinessObject: " + getBlockedBusinessObjectClass());
063        }
064    }
065
066    /**
067     * This overridden method ...
068     * 
069     * @see org.kuali.rice.krad.datadictionary.InactivationBlockingMetadata#getBlockedReferencePropertyName()
070     */
071    public String getBlockedReferencePropertyName() {
072        return this.blockedReferencePropertyName;
073    }
074
075    public void setBlockedReferencePropertyName(String blockedReferencePropertyName) {
076        this.blockedReferencePropertyName = blockedReferencePropertyName;
077    }
078
079    /**
080     * This overridden method ...
081     * 
082     * @see org.kuali.rice.krad.datadictionary.InactivationBlockingMetadata#getBlockedBusinessObjectClass()
083     */
084    public Class<? extends BusinessObject> getBlockedBusinessObjectClass() {
085        return this.blockedBusinessObjectClass;
086    }
087
088    public void setBlockedBusinessObjectClass(Class<? extends BusinessObject> blockedBusinessObjectClass) {
089        this.blockedBusinessObjectClass = blockedBusinessObjectClass;
090    }
091
092    /**
093     * This overridden method ...
094     * 
095     * @see org.kuali.rice.krad.datadictionary.InactivationBlockingMetadata#getInactivationBlockingDetectionServiceBeanName()
096     */
097    public String getInactivationBlockingDetectionServiceBeanName() {
098        return this.inactivationBlockingDetectionServiceBeanName;
099    }
100
101    public void setInactivationBlockingDetectionServiceBeanName(String inactivationBlockingDetectionServiceImpl) {
102        this.inactivationBlockingDetectionServiceBeanName = inactivationBlockingDetectionServiceImpl;
103    }
104
105    /**
106     * This overridden method ...
107     * 
108     * @see org.kuali.rice.krad.datadictionary.InactivationBlockingMetadata#getBlockingReferenceBusinessObjectClass()
109     */
110    public Class<? extends BusinessObject> getBlockingReferenceBusinessObjectClass() {
111        return this.blockingReferenceBusinessObjectClass;
112    }
113
114    public void setBlockingReferenceBusinessObjectClass(Class<? extends BusinessObject> blockingReferenceBusinessObjectClass) {
115        this.blockingReferenceBusinessObjectClass = blockingReferenceBusinessObjectClass;
116    }
117
118        public String getRelationshipLabel() {
119                return this.relationshipLabel;
120        }
121
122        public void setRelationshipLabel(String relationshipLabel) {
123                this.relationshipLabel = relationshipLabel;
124        }
125
126        public Class<? extends BusinessObject> getBusinessObjectClass() {
127                return this.businessObjectClass;
128        }
129
130        public void setBusinessObjectClass(Class<? extends BusinessObject> businessObjectClass) {
131                this.businessObjectClass = businessObjectClass;
132        }
133        
134        @Override
135        public String toString() {
136                return "InactivationBlockingDefinition: blockedClass=" + blockedBusinessObjectClass.getName() 
137                                + " /blockingReferenceProperty=" + blockedReferencePropertyName
138                                + " /blockingClass=" + blockingReferenceBusinessObjectClass.getName();
139        }
140}