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.event.TabChangeEvent;
23 import org.apache.myfaces.tobago.event.TabChangeSource;
24
25 import javax.faces.view.facelets.FaceletContext;
26 import javax.faces.view.facelets.MetaRule;
27 import javax.faces.view.facelets.Metadata;
28 import javax.faces.view.facelets.MetadataTarget;
29 import javax.faces.view.facelets.TagAttribute;
30
31 public class TabChangeSourceRule extends MetaRule {
32 static final Class[] ACTION_LISTENER = new Class[]{TabChangeEvent.class};
33 public static final TabChangeSourceRule INSTANCE = new TabChangeSourceRule();
34
35 @Override
36 public Metadata applyRule(final String name, final TagAttribute attribute, final MetadataTarget metadataTarget) {
37 if (metadataTarget.isTargetInstanceOf(TabChangeSource.class)) {
38 if ("tabChangeListener".equals(name)) {
39 return new TabChangeListenerMapper(attribute);
40 }
41 }
42 return null;
43 }
44
45 static final class TabChangeListenerMapper extends Metadata {
46
47 private final TagAttribute attribute;
48
49 TabChangeListenerMapper(final TagAttribute attribute) {
50 this.attribute = attribute;
51 }
52
53 @Override
54 public void applyMetadata(final FaceletContext ctx, final Object instance) {
55 ((TabChangeSource) instance).setTabChangeListenerExpression(
56 attribute.getMethodExpression(ctx, null, TabChangeSourceRule.ACTION_LISTENER));
57 }
58 }
59 }