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
14 import org.rcfaces.core.component.capability.ICardinality;
15 import org.rcfaces.core.model.AbstractConverter;
16
17
18
19
20
21 public abstract class CardinalityConverter extends AbstractConverter {
22 private static final String REVISION = "$Revision: 1.18 $";
23
24 private static final String OPTIONAL_CARDINALITY_NAME = "optional";
25
26 private static final String OPTIONAL_CARDINALITY_ABBREV = "?";
27
28 private static final String ZEROMANY_CARDINALITY_NAME = "zeromany";
29
30 private static final String ZEROMANY_CARDINALITY_ABBREV = "*";
31
32 private static final String ONE_CARDINALITY_NAME = "one";
33
34 private static final String ONE_CARDINALITY_ABBREV = "1";
35
36 private static final String ONEMANY_CARDINALITY_NAME = "onemany";
37
38 private static final String ONEMANY_CARDINALITY_ABBREV = "+";
39
40 private static Map CARDINALITIES = new HashMap(5);
41
42 private static Map CARDINALITIES_ABBREV = new HashMap(5);
43
44 static {
45 Integer i = new Integer(ICardinality.ONE_CARDINALITY);
46 CARDINALITIES.put(ONE_CARDINALITY_NAME, i);
47 CARDINALITIES_ABBREV.put(ONE_CARDINALITY_ABBREV, i);
48
49 i = new Integer(ICardinality.ONEMANY_CARDINALITY);
50 CARDINALITIES.put(ONEMANY_CARDINALITY_NAME, i);
51 CARDINALITIES_ABBREV.put(ONEMANY_CARDINALITY_ABBREV, i);
52
53 i = new Integer(ICardinality.OPTIONAL_CARDINALITY);
54 CARDINALITIES.put(OPTIONAL_CARDINALITY_NAME, i);
55 CARDINALITIES_ABBREV.put(OPTIONAL_CARDINALITY_ABBREV, i);
56
57 i = new Integer(ICardinality.ZEROMANY_CARDINALITY);
58 CARDINALITIES.put(ZEROMANY_CARDINALITY_NAME, i);
59 CARDINALITIES_ABBREV.put(ZEROMANY_CARDINALITY_ABBREV, i);
60 }
61
62
63
64
65
66
67
68 public Object getAsObject(FacesContext context, UIComponent component,
69 String value) {
70
71 if (value == null || value.length() < 1
72 || "default".equalsIgnoreCase(value)) {
73 return getDefaultCardinality();
74 }
75
76 value = value.toLowerCase();
77
78 Integer i = (Integer) CARDINALITIES.get(value);
79 if (i != null) {
80 return i;
81 }
82
83 i = (Integer) CARDINALITIES_ABBREV.get(value);
84 if (i != null) {
85 return i;
86 }
87
88 throw new IllegalArgumentException("Keyword '" + value
89 + "' is not supported for a cardinality type !");
90 }
91
92
93
94
95
96
97
98 public String getAsString(FacesContext context, UIComponent component,
99 Object value) {
100
101 if (value == null) {
102 return (String) CARDINALITIES.get(getDefaultCardinality());
103 }
104
105 if ((value instanceof Integer) == false) {
106 throw new IllegalArgumentException("Value must be an Integer !");
107 }
108
109 for (Iterator it = CARDINALITIES.entrySet().iterator(); it.hasNext();) {
110 Map.Entry entry = (Map.Entry) it.next();
111
112 if (value.equals(entry.getValue())) {
113 return (String) entry.getKey();
114 }
115 }
116
117 throw new IllegalArgumentException("Value '" + value
118 + "' is not supported for a cardinality type !");
119 }
120
121 protected abstract Object getDefaultCardinality();
122 }