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.InputSuggest;
23 import org.apache.myfaces.tobago.internal.component.AbstractUISuggest;
24 import org.apache.myfaces.tobago.model.SuggestFilter;
25
26 import javax.faces.view.facelets.FaceletContext;
27 import javax.faces.view.facelets.MetaRule;
28 import javax.faces.view.facelets.Metadata;
29 import javax.faces.view.facelets.MetadataTarget;
30 import javax.faces.view.facelets.TagAttribute;
31
32 public class SuggestMethodRule extends MetaRule {
33
34 public static final Class[] SUGGEST_METHOD = new Class[]{javax.faces.component.UIInput.class};
35
36 public static final SuggestMethodRule INSTANCE = new SuggestMethodRule();
37
38 @Override
39 public Metadata applyRule(final String name, final TagAttribute attribute, final MetadataTarget metadataTarget) {
40
41 if (metadataTarget.isTargetInstanceOf(InputSuggest.class)) {
42 if ("suggestMethod".equals(name)) {
43 return new SuggestMethodMapper(attribute);
44 }
45 }
46 if (metadataTarget.isTargetInstanceOf(AbstractUISuggest.class)) {
47 if (attribute.isLiteral()) {
48 if ("filter".equals(name)) {
49 return new SuggestFilterMapper(attribute);
50 }
51 }
52 }
53 return null;
54 }
55
56 static final class SuggestMethodMapper extends Metadata {
57 private final TagAttribute attribute;
58
59 SuggestMethodMapper(final TagAttribute attribute) {
60 this.attribute = attribute;
61 }
62
63 @Override
64 public void applyMetadata(final FaceletContext ctx, final Object instance) {
65 ((InputSuggest) instance).setSuggestMethodExpression(
66 attribute.getMethodExpression(ctx, null, SuggestMethodRule.SUGGEST_METHOD));
67 }
68 }
69
70 static final class SuggestFilterMapper extends Metadata {
71 private final TagAttribute attribute;
72
73 SuggestFilterMapper(final TagAttribute attribute) {
74 this.attribute = attribute;
75 }
76
77 @Override
78 public void applyMetadata(final FaceletContext ctx, final Object instance) {
79 ((AbstractUISuggest) instance).setFilter(SuggestFilter.parse(attribute.getValue()));
80 }
81 }
82
83 }