1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.cdi;
20
21 import javax.enterprise.event.Observes;
22 import javax.enterprise.inject.spi.AfterBeanDiscovery;
23 import javax.enterprise.inject.spi.AfterTypeDiscovery;
24 import javax.enterprise.inject.spi.AnnotatedType;
25 import javax.enterprise.inject.spi.BeanManager;
26 import javax.enterprise.inject.spi.Extension;
27 import javax.enterprise.inject.spi.ProcessAnnotatedType;
28 import javax.faces.annotation.FacesConfig;
29
30 public class JsfArtifactProducerExtension implements Extension
31 {
32 private boolean registerCdiProducers = false;
33
34 <T> void processAnnotatedType(@Observes ProcessAnnotatedType<T> event, BeanManager beanManager)
35 {
36 FacesConfig facesConfig = event.getAnnotatedType().getAnnotation(FacesConfig.class);
37 if (facesConfig != null && facesConfig.version() == FacesConfig.Version.JSF_2_3)
38 {
39 registerCdiProducers = true;
40 }
41 }
42
43 void afterTypeDiscovery(@Observes AfterTypeDiscovery event, BeanManager beanManager)
44 {
45 if (registerCdiProducers)
46 {
47 AnnotatedType<JsfArtifactProducer> jsfArtifactProducer =
48 beanManager.createAnnotatedType(JsfArtifactProducer.class);
49 event.addAnnotatedType(jsfArtifactProducer, jsfArtifactProducer.getJavaClass().getName());
50 }
51 }
52
53 void afterBeanDiscovery(@Observes AfterBeanDiscovery afterBeanDiscovery, BeanManager beanManager)
54 {
55 if (registerCdiProducers)
56 {
57 afterBeanDiscovery.addBean(new JsfArtifactFlowMapProducer(beanManager));
58 }
59 }
60
61 public boolean isRegisterCdiProducers()
62 {
63 return registerCdiProducers;
64 }
65 }