1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.primefaces.extensions.component.parameters;
23
24 import javax.el.ValueExpression;
25 import javax.faces.view.facelets.ComponentConfig;
26 import javax.faces.view.facelets.ComponentHandler;
27 import javax.faces.view.facelets.FaceletContext;
28 import javax.faces.view.facelets.MetaRule;
29 import javax.faces.view.facelets.MetaRuleset;
30 import javax.faces.view.facelets.Metadata;
31 import javax.faces.view.facelets.MetadataTarget;
32 import javax.faces.view.facelets.TagAttribute;
33
34
35
36
37
38
39
40
41 public class AssignableParameterHandler extends ComponentHandler {
42
43 private static final AssignToMetaRule META_RULE = new AssignToMetaRule();
44
45
46
47
48
49
50
51 private static final class AssignToMetaRule extends MetaRule {
52
53 @Override
54 public Metadata applyRule(final String name, final TagAttribute attribute, final MetadataTarget meta) {
55 if (meta.isTargetInstanceOf(AssignableParameter.class) && AssignableParameter.PropertyKeys.assignTo.toString().equals(name)) {
56 return new AssignToValueExpressionMetadata(attribute);
57 }
58
59 return null;
60 }
61 }
62
63
64
65
66
67
68
69 private static final class AssignToValueExpressionMetadata extends Metadata {
70
71 private final TagAttribute attribute;
72
73 public AssignToValueExpressionMetadata(final TagAttribute attribute) {
74 this.attribute = attribute;
75 }
76
77 @Override
78 public void applyMetadata(final FaceletContext context, final Object instance) {
79 final AssignableParameter param = (AssignableParameter) instance;
80 final ValueExpression valueExpression = attribute.getValueExpression(context, Object.class);
81
82 param.setAssignTo(valueExpression);
83 }
84 }
85
86 public AssignableParameterHandler(final ComponentConfig config) {
87 super(config);
88 }
89
90 @Override
91 protected MetaRuleset createMetaRuleset(final Class type) {
92 final MetaRuleset metaRuleset = super.createMetaRuleset(type);
93 metaRuleset.addRule(META_RULE);
94
95 return metaRuleset;
96 }
97 }