1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.myfaces.cdi.behavior;
21
22 import java.util.logging.Level;
23 import java.util.logging.Logger;
24 import javax.enterprise.context.Dependent;
25 import javax.enterprise.context.spi.CreationalContext;
26 import javax.enterprise.inject.Typed;
27 import javax.enterprise.inject.spi.BeanManager;
28 import javax.faces.FacesException;
29 import javax.faces.component.behavior.Behavior;
30 import org.apache.myfaces.cdi.util.AbstractDynamicProducer;
31 import org.apache.myfaces.shared.util.ClassUtils;
32
33
34
35
36 @Typed
37 public class FacesBehaviorProducer extends AbstractDynamicProducer<Behavior>
38 {
39 public FacesBehaviorProducer(BeanManager beanManager, FacesBehaviorInfo typeInfo)
40 {
41 super(beanManager);
42
43 FacesBehaviorAnnotationLiteral literal = new FacesBehaviorAnnotationLiteral(
44 typeInfo.getBehaviorId() == null ? "" : typeInfo.getBehaviorId(), true);
45
46 String behaviorId = typeInfo.getBehaviorId() == null ? "" : typeInfo.getBehaviorId();
47 String id = "" + typeInfo.getType() + "_" + behaviorId;
48
49 super.id(id)
50 .scope(Dependent.class)
51 .qualifiers(literal)
52 .types(typeInfo.getType(), Object.class)
53 .beanClass(ClassUtils.simpleClassForName(typeInfo.getType().getTypeName()))
54 .create(e -> createBehavior(e));
55 }
56
57 protected Behavior createBehavior(CreationalContext<Behavior> cc)
58 {
59 Class<? extends Behavior> behaviorClass = (Class<? extends Behavior>) getBeanClass();
60 Behavior converter = null;
61 try
62 {
63 converter = behaviorClass.newInstance();
64 }
65 catch (Exception ex)
66 {
67 Logger.getLogger(FacesBehaviorProducer.class.getName()).log(
68 Level.SEVERE, "Could not instantiate behavior " + behaviorClass.getName(), ex);
69 throw new FacesException("Could not instantiate behavior: " + behaviorClass.getName(), ex);
70
71 }
72 return converter;
73 }
74
75 }