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