1
2
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
20
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
52
53
54
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
80
81
82
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 }