1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.view.facelets.tag.composite;
20
21 import java.beans.BeanDescriptor;
22 import java.beans.IntrospectionException;
23 import java.beans.PropertyDescriptor;
24 import java.io.IOException;
25 import java.util.HashMap;
26 import java.util.Map;
27 import java.util.logging.Level;
28 import java.util.logging.Logger;
29
30 import javax.faces.component.UIComponent;
31 import javax.faces.view.Location;
32 import javax.faces.view.facelets.FaceletContext;
33 import javax.faces.view.facelets.TagConfig;
34 import javax.faces.view.facelets.TagException;
35 import javax.faces.view.facelets.TagHandler;
36
37 import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFFaceletTag;
38 import org.apache.myfaces.view.facelets.AbstractFaceletContext;
39 import org.apache.myfaces.view.facelets.FaceletCompositionContext;
40
41
42
43
44
45 @JSFFaceletTag(name="composite:implementation")
46 public class ImplementationHandler extends TagHandler
47 {
48 private static final Logger log = Logger.getLogger(ImplementationHandler.class.getName());
49
50 public final static String NAME = "implementation";
51
52 public ImplementationHandler(TagConfig config)
53 {
54 super(config);
55 }
56
57 public void apply(FaceletContext ctx, UIComponent parent)
58 throws IOException
59 {
60 if (!((AbstractFaceletContext)ctx).isBuildingCompositeComponentMetadata())
61 {
62
63
64
65
66 nextHandler.apply(ctx, parent);
67 }
68 else
69 {
70 UIComponent compositeBaseParent
71 = FaceletCompositionContext.getCurrentInstance(ctx).getCompositeComponentFromStack();
72
73 CompositeComponentBeanInfo beanInfo =
74 (CompositeComponentBeanInfo) compositeBaseParent.getAttributes()
75 .get(UIComponent.BEANINFO_KEY);
76
77 if (beanInfo == null)
78 {
79 if (log.isLoggable(Level.SEVERE))
80 {
81 log.severe("Cannot find composite bean descriptor UIComponent.BEANINFO_KEY ");
82 }
83 return;
84 }
85
86 BeanDescriptor beanDescriptor = beanInfo.getBeanDescriptor();
87
88 Map<String, PropertyDescriptor> facetPropertyDescriptorMap =
89 (Map<String, PropertyDescriptor>) beanDescriptor.getValue(UIComponent.FACETS_KEY);
90
91 if (facetPropertyDescriptorMap == null)
92 {
93 facetPropertyDescriptorMap = new HashMap<String, PropertyDescriptor>();
94 beanDescriptor.setValue(UIComponent.FACETS_KEY, facetPropertyDescriptorMap);
95 }
96
97 if (!facetPropertyDescriptorMap.containsKey(UIComponent.COMPOSITE_FACET_NAME))
98 {
99 try
100 {
101 facetPropertyDescriptorMap.put(UIComponent.COMPOSITE_FACET_NAME,
102 new CompositeComponentPropertyDescriptor(UIComponent.COMPOSITE_FACET_NAME));
103 }
104 catch (IntrospectionException e)
105 {
106 if (log.isLoggable(Level.SEVERE))
107 {
108 log.log(Level.SEVERE, "Cannot create PropertyDescriptor for facet ",e);
109 }
110 throw new TagException(tag,e);
111 }
112 }
113
114
115
116 nextHandler.apply(ctx, parent);
117 }
118 }
119
120 public Location getLocation()
121 {
122 return this.tag.getLocation();
123 }
124 }