1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.flow.cdi;
20
21 import java.util.ArrayList;
22 import java.util.List;
23
24 import javax.enterprise.event.Observes;
25 import javax.enterprise.inject.spi.AnnotatedType;
26 import javax.enterprise.inject.spi.BeanManager;
27 import javax.enterprise.inject.spi.BeforeBeanDiscovery;
28 import javax.enterprise.inject.spi.Extension;
29 import javax.enterprise.inject.spi.ProcessProducer;
30 import javax.enterprise.inject.spi.Producer;
31 import javax.faces.flow.Flow;
32 import javax.faces.flow.builder.FlowDefinition;
33
34
35
36
37
38
39
40
41
42
43
44 public class FlowBuilderCDIExtension implements Extension
45 {
46 private List<Producer<Flow>> flowProducers = new ArrayList<Producer<Flow>>();
47
48 public List<Producer<Flow>> getFlowProducers()
49 {
50 return flowProducers;
51 }
52
53 void beforeBeanDiscovery(
54 @Observes final BeforeBeanDiscovery event, BeanManager beanManager)
55 {
56
57
58 AnnotatedType<FlowBuilderFactoryBean> flowDiscoveryHelper =
59 beanManager.createAnnotatedType(FlowBuilderFactoryBean.class);
60 event.addAnnotatedType(flowDiscoveryHelper);
61 }
62
63
64
65
66 <T> void findFlowDefinition(@Observes ProcessProducer<T, Flow> processProducer)
67 {
68 if (processProducer.getAnnotatedMember().isAnnotationPresent(FlowDefinition.class))
69 {
70 flowProducers.add(processProducer.getProducer());
71 }
72 }
73 }