001    /**
002     * Copyright 2005-2013 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.springframework.beans.factory.config.BeanDefinition;
019    import org.springframework.beans.factory.config.BeanDefinitionHolder;
020    
021    import java.util.List;
022    import java.util.Map;
023    import java.util.Set;
024    import java.util.Stack;
025    
026    /**
027     * API for classes that perform post processing of the dictionary bean definitions
028     *
029     * @author Kuali Rice Team (rice.collab@kuali.org)
030     */
031    public interface DictionaryBeanProcessor {
032    
033        /**
034         * Invoked to process a root bean definition (a root bean definition is a top level bean)
035         *
036         * @param beanName name of the bean within the factory
037         * @param beanDefinition bean definition to process
038         */
039        public void processRootBeanDefinition(String beanName, BeanDefinition beanDefinition);
040    
041        /**
042         * Invoked to process a nested bean definition (a bean definition that is a property value of another
043         * bean definition)
044         *
045         * @param beanName name of the bean within the factory
046         * @param beanDefinition bean definition to process
047         * @param propertyName the name of the property which has the bean definition value
048         * @param nestedBeanStack the stack of beans which contain the given bean
049         */
050        public void processNestedBeanDefinition(String beanName, BeanDefinition beanDefinition, String propertyName,
051                Stack<BeanDefinitionHolder> nestedBeanStack);
052    
053        /**
054         * Invoked to process a string property value (straight property value, not a string within a collection)
055         *
056         * @param propertyName name of the property whose string value is being processed
057         * @param propertyValue string value for the property
058         * @return String new property value (possibly modified)
059         */
060        public String processStringPropertyValue(String propertyName, String propertyValue,
061                Stack<BeanDefinitionHolder> nestedBeanStack);
062    
063        /**
064         * Invoked to process a collection value that is a bean definition
065         *
066         * @param beanName name of the bean within the factory
067         * @param beanDefinition bean definition within the collection to process
068         * @param propertyName the name of the property which has the collection value
069         * @param nestedBeanStack the stack of beans which contain the given collection (and collection bean)
070         */
071        public void processCollectionBeanDefinition(String beanName, BeanDefinition beanDefinition, String propertyName,
072                Stack<BeanDefinitionHolder> nestedBeanStack);
073    
074        /**
075         * Invokes the processors to handle an array string value (which may be changed)
076         *
077         * @param propertyName name of the property that is being processed
078         * @param propertyValue the array which contains the string
079         * @param elementValue the string element value
080         * @param elementIndex the index of the string within the array
081         * @param nestedBeanStack the stack of bean containers, including the bean that contains the property
082         * @return String new property value (possibly modified by processors)
083         */
084        public String processArrayStringPropertyValue(String propertyName, Object[] propertyValue, String elementValue,
085                int elementIndex, Stack<BeanDefinitionHolder> nestedBeanStack);
086    
087        /**
088         * Invokes the processors to handle an list string value (which may be changed)
089         *
090         * @param propertyName name of the property that is being processed
091         * @param propertyValue the list which contains the string
092         * @param elementValue the string element value
093         * @param elementIndex the index of the string within the list
094         * @param nestedBeanStack the stack of bean containers, including the bean that contains the property
095         * @return String new property value (possibly modified by processors)
096         */
097        public String processListStringPropertyValue(String propertyName, List<?> propertyValue, String elementValue,
098                int elementIndex, Stack<BeanDefinitionHolder> nestedBeanStack);
099    
100        /**
101         * Invokes the processors to handle an set string value (which may be changed)
102         *
103         * @param propertyName name of the property that is being processed
104         * @param propertyValue the set which contains the string
105         * @param elementValue the string element value
106         * @param nestedBeanStack the stack of bean containers, including the bean that contains the property
107         * @return String new property value (possibly modified by processors)
108         */
109        public String processSetStringPropertyValue(String propertyName, Set<?> propertyValue, String elementValue,
110                Stack<BeanDefinitionHolder> nestedBeanStack);
111    
112        /**
113         * Invokes the processors to handle an map string value (which may be changed)
114         *
115         * @param propertyName name of the property that is being processed
116         * @param propertyValue the map which contains the string
117         * @param elementValue the string element value
118         * @param elementKey the key for the string within the map
119         * @param nestedBeanStack the stack of bean containers, including the bean that contains the property
120         * @return String new property value (possibly modified by processors)
121         */
122        public String processMapStringPropertyValue(String propertyName, Map<?, ?> propertyValue, String elementValue,
123                Object elementKey, Stack<BeanDefinitionHolder> nestedBeanStack);
124    }