View Javadoc

1   /*
2    * $Id: CameliaConverterHandler.java,v 1.3 2007/09/13 08:38:13 oeuillot Exp $
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   * @author Olivier Oeuillot (latest modification by $Author: oeuillot $)
23   * @version $Revision: 1.3 $ $Date: 2007/09/13 08:38:13 $
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  }