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.SheetStateChangeSource;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
26
27 import javax.faces.event.ActionEvent;
28 import javax.faces.view.facelets.FaceletContext;
29 import javax.faces.view.facelets.MetaRule;
30 import javax.faces.view.facelets.Metadata;
31 import javax.faces.view.facelets.MetadataTarget;
32 import javax.faces.view.facelets.TagAttribute;
33
34 public class SheetStateChangeSourceRule extends MetaRule {
35
36 private static final Logger LOG = LoggerFactory.getLogger(SheetStateChangeSourceRule.class);
37
38 static final Class[] ACTION_LISTENER = new Class[]{ActionEvent.class};
39
40 public static final SheetStateChangeSourceRule INSTANCE = new SheetStateChangeSourceRule();
41
42 public Metadata applyRule(String name, TagAttribute attribute, MetadataTarget metadataTarget) {
43 if (metadataTarget.isTargetInstanceOf(SheetStateChangeSource.class)) {
44 if ("stateChangeListener".equals(name)) {
45 return new SheetStateChangeListenerMapper(attribute);
46 }
47 }
48 return null;
49 }
50
51 static final class SheetStateChangeListenerMapper extends Metadata {
52
53 private final TagAttribute attribute;
54
55 public SheetStateChangeListenerMapper(TagAttribute attribute) {
56 this.attribute = attribute;
57 }
58
59 public void applyMetadata(FaceletContext ctx, Object instance) {
60 LOG.error("TODO: implementation for JSF 1.2 / JSF 2.0");
61 ((SheetStateChangeSource) instance)
62
63 .setStateChangeListener(new MethodExpressionToMethodBinding(attribute
64 .getMethodExpression(ctx, null,
65 SheetStateChangeSourceRule.ACTION_LISTENER)));
66 }
67 }
68 }