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.SheetStateChangeSource;
23
24 import javax.faces.event.ActionEvent;
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 SheetStateChangeSourceRule extends MetaRule {
32
33 static final Class[] ACTION_LISTENER = new Class[]{ActionEvent.class};
34
35 public static final SheetStateChangeSourceRule INSTANCE = new SheetStateChangeSourceRule();
36
37 @Override
38 public Metadata applyRule(final String name, final TagAttribute attribute, final MetadataTarget metadataTarget) {
39 if (metadataTarget.isTargetInstanceOf(SheetStateChangeSource.class)) {
40 if ("stateChangeListener".equals(name)) {
41 return new SheetStateChangeListenerMapper(attribute);
42 }
43 }
44 return null;
45 }
46
47 static final class SheetStateChangeListenerMapper extends Metadata {
48
49 private final TagAttribute attribute;
50
51 SheetStateChangeListenerMapper(final TagAttribute attribute) {
52 this.attribute = attribute;
53 }
54
55 @Override
56 public void applyMetadata(final FaceletContext ctx, final Object instance) {
57 ((SheetStateChangeSource) instance).setStateChangeListenerExpression(
58 attribute.getMethodExpression(ctx, null, SheetStateChangeSourceRule.ACTION_LISTENER));
59 }
60 }
61 }