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.ui;
20
21 import java.beans.Introspector;
22 import java.beans.PropertyDescriptor;
23 import java.util.HashSet;
24 import java.util.Map;
25 import java.util.Set;
26
27 import javax.faces.component.UIComponent;
28 import javax.faces.view.facelets.ComponentConfig;
29 import javax.faces.view.facelets.ComponentHandler;
30 import javax.faces.view.facelets.FaceletContext;
31 import javax.faces.view.facelets.MetaRuleset;
32 import javax.faces.view.facelets.Metadata;
33 import javax.faces.view.facelets.TagAttribute;
34
35
36
37
38
39 public class RepeatHandler extends ComponentHandler
40 {
41
42 public RepeatHandler(ComponentConfig config)
43 {
44 super(config);
45 }
46
47 protected MetaRuleset createMetaRuleset(Class type)
48 {
49 MetaRuleset meta = super.createMetaRuleset(type);
50
51 if (!UILibrary.Namespace.equals(this.tag.getNamespace()))
52 {
53 meta.add(new TagMetaData(type));
54 }
55
56 meta.alias("class", "styleClass");
57
58 return meta;
59 }
60
61 private class TagMetaData extends Metadata
62 {
63 private final String[] _attrs;
64
65 public TagMetaData(Class<?> type)
66 {
67 Set<String> names = new HashSet<String>();
68 for (TagAttribute attribute : tag.getAttributes().getAll())
69 {
70 if ("class".equals(attribute.getLocalName()))
71 {
72 names.add("styleClass");
73 }
74 else
75 {
76 names.add(attribute.getLocalName());
77 }
78 }
79
80 try
81 {
82 for (PropertyDescriptor descriptor : Introspector.getBeanInfo(type).getPropertyDescriptors())
83 {
84 if (descriptor.getWriteMethod() != null)
85 {
86 names.remove(descriptor.getName());
87 }
88 }
89 }
90 catch (Exception e)
91 {
92
93 }
94
95 _attrs = names.toArray(new String[names.size()]);
96 }
97
98 public void applyMetadata(FaceletContext ctx, Object instance)
99 {
100 UIComponent component = (UIComponent) instance;
101 Map<String, Object> attrs = component.getAttributes();
102 attrs.put("alias.element", tag.getQName());
103 if (_attrs.length > 0)
104 {
105 attrs.put("alias.attributes", _attrs);
106 }
107 }
108 }
109 }