1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.myfaces.tobago.facelets;
21
22 import org.apache.myfaces.tobago.component.MethodExpressionToMethodBinding;
23 import org.apache.myfaces.tobago.event.TabChangeEvent;
24 import org.apache.myfaces.tobago.event.TabChangeSource;
25
26 import javax.faces.view.facelets.FaceletContext;
27 import javax.faces.view.facelets.MetaRule;
28 import javax.faces.view.facelets.Metadata;
29 import javax.faces.view.facelets.MetadataTarget;
30 import javax.faces.view.facelets.TagAttribute;
31
32 public class TabChangeSourceRule extends MetaRule {
33 static final Class[] ACTION_LISTENER = new Class[]{TabChangeEvent.class};
34 public static final TabChangeSourceRule INSTANCE = new TabChangeSourceRule();
35
36 public Metadata applyRule(String name, TagAttribute attribute,
37 MetadataTarget metadataTarget) {
38 if (metadataTarget.isTargetInstanceOf(TabChangeSource.class)) {
39 if ("tabChangeListener".equals(name)) {
40 return new TabChangeListenerMapper(attribute);
41 }
42 }
43 return null;
44 }
45
46 static final class TabChangeListenerMapper extends Metadata {
47
48 private final TagAttribute attribute;
49
50 public TabChangeListenerMapper(TagAttribute attribute) {
51 this.attribute = attribute;
52 }
53
54 public void applyMetadata(FaceletContext ctx, Object instance) {
55 ((TabChangeSource) instance).setTabChangeListener(
56 new MethodExpressionToMethodBinding(
57 attribute.getMethodExpression(ctx, null, TabChangeSourceRule.ACTION_LISTENER)));
58 }
59 }
60 }