View Javadoc

1   /*
2    * $Id: ClientDatesStrategyConverter.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.Iterator;
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.component.capability.IClientDatesStrategyCapability;
16  import org.rcfaces.core.model.AbstractConverter;
17  
18  /**
19   * @author Olivier Oeuillot (latest modification by $Author: jbmeslin $)
20   * @version $Revision: 1.18 $ $Date: 2011/06/16 09:29:40 $
21   */
22  public class ClientDatesStrategyConverter extends AbstractConverter {
23      private static final String REVISION = "$Revision: 1.18 $";
24  
25      public static final Converter SINGLETON = new ClientDatesStrategyConverter();
26  
27      private static final String ALL_DATES_STRATEGY = "all";
28  
29      private static final String YEAR_DATES_STRATEGY = "year";
30  
31      private static final String MONTH_DATES_STRATEGY = "month";
32  
33      private static final String DEFAULT_DATES_STRATEGY = "default";
34  
35      private static final Object DEFAULT_DATES_STRATEGY_INTEGER = new Integer(
36              IClientDatesStrategyCapability.DEFAULT_DATES_STRATEGY);
37  
38      private static Map CLIENT_DATES_STRATEGIES = new HashMap(5);
39      static {
40          CLIENT_DATES_STRATEGIES.put(ALL_DATES_STRATEGY, new Integer(
41                  IClientDatesStrategyCapability.ALL_DATES_STRATEGY));
42          CLIENT_DATES_STRATEGIES.put(YEAR_DATES_STRATEGY, new Integer(
43                  IClientDatesStrategyCapability.YEAR_DATES_STRATEGY));
44          CLIENT_DATES_STRATEGIES.put(MONTH_DATES_STRATEGY, new Integer(
45                  IClientDatesStrategyCapability.MONTH_DATES_STRATEGY));
46          CLIENT_DATES_STRATEGIES.put(DEFAULT_DATES_STRATEGY,
47                  DEFAULT_DATES_STRATEGY_INTEGER);
48      }
49  
50      /*
51       * (non-Javadoc)
52       * 
53       * @see javax.faces.convert.Converter#getAsObject(javax.faces.context.FacesContext,
54       *      javax.faces.component.UIComponent, java.lang.String)
55       */
56      public Object getAsObject(FacesContext context, UIComponent component,
57              String value) {
58  
59          if (value == null || value.length() < 1) {
60              return DEFAULT_DATES_STRATEGY_INTEGER;
61          }
62  
63          value = value.toLowerCase();
64  
65          Integer i = (Integer) CLIENT_DATES_STRATEGIES.get(value);
66          if (i != null) {
67              return i;
68          }
69  
70          if ("default".equalsIgnoreCase(value)) {
71              return DEFAULT_DATES_STRATEGY_INTEGER;
72          }
73  
74          throw new IllegalArgumentException("Keyword '" + value
75                  + "' is not supported as a client dates strategy !");
76      }
77  
78      /*
79       * (non-Javadoc)
80       * 
81       * @see javax.faces.convert.Converter#getAsString(javax.faces.context.FacesContext,
82       *      javax.faces.component.UIComponent, java.lang.Object)
83       */
84      public String getAsString(FacesContext context, UIComponent component,
85              Object value) {
86  
87          if (value == null) {
88              return DEFAULT_DATES_STRATEGY;
89          }
90  
91          if ((value instanceof Integer) == false) {
92              throw new IllegalArgumentException("Value must be an Integer !");
93          }
94  
95          for (Iterator it = CLIENT_DATES_STRATEGIES.entrySet().iterator(); it
96                  .hasNext();) {
97              Map.Entry entry = (Map.Entry) it.next();
98  
99              if (value.equals(entry.getValue()) == false) {
100                 continue;
101             }
102 
103             return (String) entry.getKey();
104         }
105 
106         throw new IllegalArgumentException("Value '" + value
107                 + "' is not supported as a client dates strategy !");
108     }
109 }