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.SortActionSource;
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 SortActionSourceRule extends MetaRule {
35
36 private static final Logger LOG = LoggerFactory.getLogger(SortActionSourceRule.class);
37
38 static final Class[] ACTION_LISTENER = new Class[]{ActionEvent.class};
39
40 public static final SortActionSourceRule INSTANCE = new SortActionSourceRule();
41
42 public Metadata applyRule(String name, TagAttribute attribute,
43 MetadataTarget metadataTarget) {
44 if (metadataTarget.isTargetInstanceOf(SortActionSource.class)) {
45 if ("sortActionListener".equals(name)) {
46 return new SortActionListenerMapper(attribute);
47 }
48 }
49 return null;
50 }
51
52 static final class SortActionListenerMapper extends Metadata {
53
54 private final TagAttribute attribute;
55
56 public SortActionListenerMapper(TagAttribute attribute) {
57 this.attribute = attribute;
58 }
59
60 public void applyMetadata(FaceletContext ctx, Object instance) {
61 LOG.error("TODO: implementation for JSF 1.2 / JSF 2.0");
62 ((SortActionSource) instance).setSortActionListener(new MethodExpressionToMethodBinding(attribute
63 .getMethodExpression(ctx, null, SortActionSourceRule.ACTION_LISTENER)));
64 }
65 }
66
67 }