View Javadoc

1   /*
2    * $Id: LocaleConverter.java,v 1.18 2011/06/16 09:29:40 jbmeslin Exp $
3    * 
4    */
5   package org.rcfaces.core.internal.converter;
6   
7   import java.util.HashMap;
8   import java.util.Locale;
9   import java.util.Map;
10  
11  import javax.faces.component.UIComponent;
12  import javax.faces.context.FacesContext;
13  import javax.faces.convert.Converter;
14  
15  import org.rcfaces.core.internal.lang.StringAppender;
16  import org.rcfaces.core.model.AbstractConverter;
17  
18  /**
19   * 
20   * @author Olivier Oeuillot (latest modification by $Author: jbmeslin $)
21   * @version $Revision: 1.18 $ $Date: 2011/06/16 09:29:40 $
22   */
23  public class LocaleConverter extends AbstractConverter {
24      private static final String REVISION = "$Revision: 1.18 $";
25  
26      public static final Converter SINGLETON = new LocaleConverter();
27  
28      private static final Map localesByName;
29      static {
30          Locale ls[] = Locale.getAvailableLocales();
31  
32          localesByName = new HashMap(ls.length);
33  
34          for (int i = 0; i < ls.length; i++) {
35              Locale l = ls[i];
36  
37              String key = getKey(l);
38              if (key == null) {
39                  continue;
40              }
41  
42              localesByName.put(key, l);
43          }
44  
45          Locale defaultLocale = Locale.getDefault();
46          localesByName.put("default", defaultLocale);
47      }
48  
49      public Object getAsObject(FacesContext context, UIComponent component,
50              String value) {
51          if (value == null || value.length() < 1) {
52              return null;
53          }
54  
55          return localesByName.get(value.toLowerCase());
56      }
57  
58      public String getAsString(FacesContext context, UIComponent component,
59              Object value) {
60          if (value == null) {
61              return null;
62          }
63  
64          Locale locale = (Locale) value;
65  
66          return getKey(locale);
67      }
68  
69      private static String getKey(Locale locale) {
70          String lg = locale.getLanguage();
71          if (lg == null || lg.length() < 1) {
72              return null;
73          }
74  
75          StringAppender sb = new StringAppender(24);
76          sb.append(lg.toLowerCase());
77  
78          String cnt = locale.getCountry();
79          if (cnt != null && cnt.length() > 0) {
80              sb.append('_');
81              sb.append(cnt.toLowerCase());
82  
83              String var = locale.getVariant();
84              if (var != null && var.length() > 0) {
85                  sb.append('_');
86                  sb.append(var.toLowerCase());
87              }
88          }
89  
90          return sb.toString();
91      }
92  
93  }