1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.orchestra.annotation.spring;
20
21 import org.apache.commons.logging.Log;
22 import org.apache.commons.logging.LogFactory;
23 import org.apache.myfaces.orchestra.annotation.AnnotationInfo;
24 import org.apache.myfaces.orchestra.annotation.AnnotationInfoManager;
25 import org.apache.myfaces.orchestra.conversation.annotations.ConversationName;
26 import org.apache.myfaces.orchestra.conversation.spring.BeanDefinitionConversationNameAttrDecorator;
27 import org.apache.myfaces.orchestra.conversation.spring._SpringUtils;
28 import org.apache.myfaces.shared_orchestra.util.ClassUtils;
29 import org.springframework.beans.BeansException;
30 import org.springframework.beans.factory.config.BeanDefinition;
31 import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
32 import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
33 import org.springframework.core.Ordered;
34
35
36
37
38
39
40
41
42
43
44
45
46
47 public class AnnotationsInfoInitializer implements BeanFactoryPostProcessor, Ordered
48 {
49 private Log log = LogFactory.getLog(AnnotationsInfoInitializer.class);
50
51 private int order = Ordered.LOWEST_PRECEDENCE;
52
53 private AnnotationInfoManager annotationInfoManager;
54
55
56
57
58 public int getOrder()
59 {
60 return order;
61 }
62
63 public void setOrder(int order)
64 {
65 this.order = order;
66 }
67
68
69
70
71 public void setAnnotationInfoManager(AnnotationInfoManager annotationInfoManager)
72 {
73 this.annotationInfoManager = annotationInfoManager;
74 }
75
76
77
78
79
80 public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
81 throws BeansException
82 {
83 String[] beanNames = beanFactory.getBeanDefinitionNames();
84 for (String beanName : beanNames)
85 {
86 BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);
87 String className = beanDefinition.getBeanClassName();
88 if (className != null)
89 {
90 Class<?> beanClass = null;
91 try
92 {
93 beanClass = ClassUtils.classForName(className);
94 }
95 catch (ClassNotFoundException e)
96 {
97 log.debug(e.getLocalizedMessage(), e);
98 }
99
100 if (beanClass != null)
101 {
102
103 if (!_SpringUtils.isAlternateBeanName(beanName))
104 {
105
106 String alternateBeanName = _SpringUtils.getAlternateBeanName(beanName);
107 if (beanFactory.containsBeanDefinition(alternateBeanName))
108 {
109
110 continue;
111 }
112 }
113 String realBeanName = _SpringUtils.getRealBeanName(beanName);
114
115
116
117 annotationInfoManager.processBeanAnnotations(realBeanName, beanClass);
118
119
120 AnnotationInfo info = annotationInfoManager
121 .getAnnotationInfoByBeanName(realBeanName);
122 if (info != null)
123 {
124 processStartupAnnotations(beanDefinition, info);
125 }
126 }
127 }
128 }
129 }
130
131
132
133
134
135
136
137
138
139
140
141 private void processStartupAnnotations(BeanDefinition beanDefinition, AnnotationInfo info)
142 {
143 ConversationName conversationName = info.getConversationName();
144 if (conversationName != null)
145 {
146 String convNameFromAnno = conversationName.value();
147 if (convNameFromAnno != null && convNameFromAnno.length() > 0)
148 {
149 String convNameFromDef = getConversationName(beanDefinition);
150 if (convNameFromDef == null)
151 {
152 setConversationName(beanDefinition, convNameFromAnno);
153 }
154 }
155 }
156 }
157
158
159
160
161
162
163
164
165
166 private static String getConversationName(BeanDefinition def)
167 {
168 return (String) def
169 .getAttribute(BeanDefinitionConversationNameAttrDecorator.CONVERSATION_NAME_ATTRIBUTE);
170 }
171
172
173 private static void setConversationName(BeanDefinition def, String convName)
174 {
175 def.setAttribute(BeanDefinitionConversationNameAttrDecorator.CONVERSATION_NAME_ATTRIBUTE,
176 convName);
177 }
178 }