View Javadoc

1   /*
2    * $Id: CardinalityConverter.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  
14  import org.rcfaces.core.component.capability.ICardinality;
15  import org.rcfaces.core.model.AbstractConverter;
16  
17  /**
18   * @author Olivier Oeuillot (latest modification by $Author: jbmeslin $)
19   * @version $Revision: 1.18 $ $Date: 2011/06/16 09:29:40 $
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       * (non-Javadoc)
64       * 
65       * @see javax.faces.convert.Converter#getAsObject(javax.faces.context.FacesContext,
66       *      javax.faces.component.UIComponent, java.lang.String)
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       * (non-Javadoc)
94       * 
95       * @see javax.faces.convert.Converter#getAsString(javax.faces.context.FacesContext,
96       *      javax.faces.component.UIComponent, java.lang.Object)
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 }