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
98 if (log.isDebugEnabled())
99 {
100 log.debug(e.getLocalizedMessage(), e);
101 }
102 }
103
104 if (beanClass != null)
105 {
106
107 if (!_SpringUtils.isAlternateBeanName(beanName))
108 {
109
110 String alternateBeanName = _SpringUtils.getAlternateBeanName(beanName);
111 if (beanFactory.containsBeanDefinition(alternateBeanName))
112 {
113
114 continue;
115 }
116 }
117 String realBeanName = _SpringUtils.getRealBeanName(beanName);
118
119
120
121 annotationInfoManager.processBeanAnnotations(realBeanName, beanClass);
122
123
124 AnnotationInfo info = annotationInfoManager
125 .getAnnotationInfoByBeanName(realBeanName);
126 if (info != null)
127 {
128 processStartupAnnotations(beanDefinition, info);
129 }
130 }
131 }
132 }
133 }
134
135
136
137
138
139
140
141
142
143
144
145 private void processStartupAnnotations(BeanDefinition beanDefinition, AnnotationInfo info)
146 {
147 ConversationName conversationName = info.getConversationName();
148 if (conversationName != null)
149 {
150 String convNameFromAnno = conversationName.value();
151 if (convNameFromAnno != null && convNameFromAnno.length() > 0)
152 {
153 String convNameFromDef = getConversationName(beanDefinition);
154 if (convNameFromDef == null)
155 {
156 setConversationName(beanDefinition, convNameFromAnno);
157 }
158 }
159 }
160 }
161
162
163
164
165
166
167
168
169
170 private static String getConversationName(BeanDefinition def)
171 {
172 return (String) def
173 .getAttribute(BeanDefinitionConversationNameAttrDecorator.CONVERSATION_NAME_ATTRIBUTE);
174 }
175
176
177 private static void setConversationName(BeanDefinition def, String convName)
178 {
179 def.setAttribute(BeanDefinitionConversationNameAttrDecorator.CONVERSATION_NAME_ATTRIBUTE,
180 convName);
181 }
182 }