001
014
015 package com.liferay.portal.spring.aop;
016
017 import com.liferay.portal.kernel.spring.util.SpringFactoryUtil;
018
019 import java.util.ArrayList;
020 import java.util.List;
021
022 import org.springframework.beans.factory.config.BeanDefinition;
023 import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
024 import org.springframework.beans.factory.config.ConstructorArgumentValues;
025 import org.springframework.beans.factory.config.TypedStringValue;
026
027
030 public class ChainableMethodAdviceInjectorCollector {
031
032 public static final String BEAN_NAME =
033 ChainableMethodAdviceInjectorCollector.class.getName();
034
035 public static void collect(
036 ConfigurableListableBeanFactory configurableListableBeanFactory) {
037
038 ChainableMethodAdviceInjectorCollector
039 chainableMethodAdviceInjectorCollector =
040 new ChainableMethodAdviceInjectorCollector();
041
042 String[] beanNames =
043 configurableListableBeanFactory.getBeanDefinitionNames();
044
045 for (String beanName : beanNames) {
046 if (!beanName.contains(SpringFactoryUtil.class.getName())) {
047 continue;
048 }
049
050 BeanDefinition beanDefinition =
051 configurableListableBeanFactory.getBeanDefinition(beanName);
052
053 ConstructorArgumentValues constructorArgumentValues =
054 beanDefinition.getConstructorArgumentValues();
055
056 List<ConstructorArgumentValues.ValueHolder> valueHolders =
057 constructorArgumentValues.getGenericArgumentValues();
058
059 if (valueHolders.isEmpty()) {
060 continue;
061 }
062
063 ConstructorArgumentValues.ValueHolder valueHolder =
064 valueHolders.get(0);
065
066 TypedStringValue typedStringValue =
067 (TypedStringValue)valueHolder.getValue();
068
069 String className = typedStringValue.getValue();
070
071 if (className.contains(
072 ChainableMethodAdviceInjector.class.getSimpleName())) {
073
074 chainableMethodAdviceInjectorCollector.addBeanName(beanName);
075 }
076 }
077
078 if (!chainableMethodAdviceInjectorCollector.hasBeanNames()) {
079 configurableListableBeanFactory.registerSingleton(
080 BEAN_NAME, chainableMethodAdviceInjectorCollector);
081 }
082 }
083
084 public List<String> getBeanNames() {
085 return _beanNames;
086 }
087
088 protected void addBeanName(String beanName) {
089 _beanNames.add(beanName);
090 }
091
092 protected boolean hasBeanNames() {
093 return _beanNames.isEmpty();
094 }
095
096 private ChainableMethodAdviceInjectorCollector() {
097 }
098
099 private List<String> _beanNames = new ArrayList<String>();
100
101 }