KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sun > facelets > tag > jsf > ValueHolderRule


1 /**
2  * Licensed under the Common Development and Distribution License,
3  * you may not use this file except in compliance with the License.
4  * You may obtain a copy of the License at
5  *
6  * http://www.sun.com/cddl/
7  *
8  * Unless required by applicable law or agreed to in writing, software
9  * distributed under the License is distributed on an "AS IS" BASIS,
10  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
11  * implied. See the License for the specific language governing
12  * permissions and limitations under the License.
13  */

14
15 package com.sun.facelets.tag.jsf;
16
17 import javax.faces.component.UIComponent;
18 import javax.faces.component.ValueHolder;
19 import javax.faces.convert.Converter;
20
21 import com.sun.facelets.FaceletContext;
22 import com.sun.facelets.el.LegacyValueBinding;
23 import com.sun.facelets.tag.TagAttribute;
24 import com.sun.facelets.tag.Metadata;
25 import com.sun.facelets.tag.MetaRule;
26 import com.sun.facelets.tag.MetadataTarget;
27 import com.sun.facelets.util.FacesAPI;
28
29 /**
30  *
31  * @author Jacob Hookom
32  * @version $Id: ValueHolderRule.java,v 1.3 2006/05/03 04:03:36 jhook Exp $
33  */

34 final class ValueHolderRule extends MetaRule {
35
36     final static class LiteralConverterMetadata extends Metadata {
37
38         private final String JavaDoc converterId;
39
40         public LiteralConverterMetadata(String JavaDoc converterId) {
41             this.converterId = converterId;
42         }
43
44         public void applyMetadata(FaceletContext ctx, Object JavaDoc instance) {
45             ((ValueHolder) instance).setConverter(ctx.getFacesContext()
46                     .getApplication().createConverter(this.converterId));
47         }
48     }
49
50     final static class DynamicConverterMetadata extends Metadata {
51
52         private final TagAttribute attr;
53
54         public DynamicConverterMetadata(TagAttribute attr) {
55             this.attr = attr;
56         }
57
58         public void applyMetadata(FaceletContext ctx, Object JavaDoc instance) {
59             ((UIComponent) instance).setValueBinding("converter",
60                     new LegacyValueBinding(attr.getValueExpression(ctx,
61                             Converter.class)));
62         }
63     }
64
65     final static class DynamicConverterMetadata2 extends Metadata {
66
67         private final TagAttribute attr;
68
69         public DynamicConverterMetadata2(TagAttribute attr) {
70             this.attr = attr;
71         }
72
73         public void applyMetadata(FaceletContext ctx, Object JavaDoc instance) {
74             ((UIComponent) instance).setValueExpression("converter", attr
75                     .getValueExpression(ctx, Converter.class));
76         }
77     }
78
79     final static class LiteralValueMetadata extends Metadata {
80
81         private final String JavaDoc value;
82
83         public LiteralValueMetadata(String JavaDoc value) {
84             this.value = value;
85         }
86
87         public void applyMetadata(FaceletContext ctx, Object JavaDoc instance) {
88             ((ValueHolder) instance).setValue(this.value);
89         }
90     }
91
92     final static class DynamicValueExpressionMetadata extends Metadata {
93
94         private final TagAttribute attr;
95
96         public DynamicValueExpressionMetadata(TagAttribute attr) {
97             this.attr = attr;
98         }
99
100         public void applyMetadata(FaceletContext ctx, Object JavaDoc instance) {
101             ((UIComponent) instance).setValueExpression("value", attr
102                     .getValueExpression(ctx, Object JavaDoc.class));
103         }
104     }
105
106     final static class DynamicValueBindingMetadata extends Metadata {
107
108         private final TagAttribute attr;
109
110         public DynamicValueBindingMetadata(TagAttribute attr) {
111             this.attr = attr;
112         }
113
114         public void applyMetadata(FaceletContext ctx, Object JavaDoc instance) {
115             ((UIComponent) instance).setValueBinding("value",
116                     new LegacyValueBinding(attr.getValueExpression(ctx,
117                             Object JavaDoc.class)));
118         }
119     }
120
121     public final static ValueHolderRule Instance = new ValueHolderRule();
122
123     public Metadata applyRule(String JavaDoc name, TagAttribute attribute,
124             MetadataTarget meta) {
125         if (meta.isTargetInstanceOf(ValueHolder.class)) {
126
127             if ("converter".equals(name)) {
128                 if (attribute.isLiteral()) {
129                     return new LiteralConverterMetadata(attribute.getValue());
130                 } else {
131                     if (FacesAPI.getComponentVersion(meta.getTargetClass()) >= 12) {
132                         return new DynamicConverterMetadata2(attribute);
133                     } else {
134                         return new DynamicConverterMetadata(attribute);
135                     }
136                 }
137             }
138
139             if ("value".equals(name)) {
140                 if (attribute.isLiteral()) {
141                     return new LiteralValueMetadata(attribute.getValue());
142                 } else {
143                     if (FacesAPI.getComponentVersion(meta.getTargetClass()) >= 12) {
144                         return new DynamicValueExpressionMetadata(attribute);
145                     } else {
146                         return new DynamicValueBindingMetadata(attribute);
147                     }
148                 }
149             }
150         }
151         return null;
152     }
153
154 }
155
Popular Tags