1
2
3
4 package org.rcfaces.core.internal.facelets;
5
6 import java.util.Locale;
7
8 import javax.faces.convert.Converter;
9 import javax.faces.convert.NumberConverter;
10
11 import org.rcfaces.core.converter.AbstractNumberConverter;
12 import org.rcfaces.core.internal.converter.LocaleConverter;
13
14 import com.sun.facelets.FaceletContext;
15 import com.sun.facelets.tag.MetaRuleset;
16 import com.sun.facelets.tag.TagAttribute;
17 import com.sun.facelets.tag.TagConfig;
18 import com.sun.facelets.tag.jsf.ConvertHandler;
19
20
21
22
23
24
25 public abstract class CameliaConverterHandler extends ConvertHandler {
26 private static final String REVISION = "$Revision: 1.3 $";
27
28 private final TagAttribute localeAttribute;
29
30 private final TagAttribute defaultNumberAttribute;
31
32 public CameliaConverterHandler(TagConfig config) {
33 super(config);
34
35 this.localeAttribute = this.getAttribute("locale");
36 this.defaultNumberAttribute = this.getAttribute("defaultNumber");
37 }
38
39 protected Converter createConverter(FaceletContext ctx) {
40 return ctx.getFacesContext().getApplication().createConverter(
41 getConverterId());
42 }
43
44 protected abstract String getConverterId();
45
46 protected void setAttributes(FaceletContext ctx, Object converter) {
47 super.setAttributes(ctx, converter);
48
49 if (localeAttribute == null && (converter instanceof NumberConverter)) {
50 Locale locale = null;
51 Object localeValue = localeAttribute.getObject(ctx);
52 if (localeValue instanceof Locale) {
53 locale = (Locale) localeValue;
54
55 } else if (localeValue instanceof String) {
56 locale = (Locale) LocaleConverter.SINGLETON.getAsObject(ctx
57 .getFacesContext(), null, (String) localeValue);
58 }
59
60 if (locale != null) {
61 ((NumberConverter) converter).setLocale(locale);
62 }
63 }
64
65 if (defaultNumberAttribute != null
66 && (converter instanceof AbstractNumberConverter)) {
67 Object defaultValue = defaultNumberAttribute.getObject(ctx);
68
69 if (defaultValue != null) {
70 Object defValue = defaultValue;
71
72 ((AbstractNumberConverter) converter).setDefaultValue(String
73 .valueOf(defValue));
74 }
75 }
76 }
77
78 protected MetaRuleset createMetaRuleset(Class type) {
79 return super.createMetaRuleset(type).ignore("locale").ignore(
80 "defaultNumber");
81 }
82 }