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.Attributes;
23 import org.apache.myfaces.tobago.component.Visual;
24 import org.apache.myfaces.tobago.context.Markup;
25
26 import javax.el.ValueExpression;
27 import javax.faces.component.UIComponent;
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 SupportsMarkupRule extends MetaRule {
35
36 public static final SupportsMarkupRule INSTANCE = new SupportsMarkupRule();
37
38 @Override
39 public Metadata applyRule(final String name, final TagAttribute attribute, final MetadataTarget metadataTarget) {
40 if (metadataTarget.isTargetInstanceOf(Visual.class)) {
41 final Attributes a = Attributes.valueOfFailsafe(name);
42 if (Attributes.markup == a) {
43 return new SupportsMarkupMapper(attribute);
44 }
45 }
46 return null;
47 }
48
49 static final class SupportsMarkupMapper extends Metadata {
50
51 private final TagAttribute attribute;
52
53 SupportsMarkupMapper(final TagAttribute attribute) {
54 this.attribute = attribute;
55 }
56
57 @Override
58 public void applyMetadata(final FaceletContext ctx, final Object instance) {
59 if (attribute.isLiteral()) {
60 ((Visual) instance).setMarkup(Markup.valueOf(attribute.getValue()));
61 } else {
62 final ValueExpression expression = attribute.getValueExpression(ctx, Object.class);
63 ((UIComponent) instance).setValueExpression(Attributes.markup.getName(), expression);
64 }
65 }
66 }
67 }