View Javadoc

1   /*
2    * $Id: InputTypeConverter.java,v 1.2 2007/02/02 17:33:31 oeuillot 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.IInputTypeCapability;
16  import org.rcfaces.core.model.AbstractConverter;
17  
18  /**
19   * @author Olivier Oeuillot (latest modification by $Author: oeuillot $)
20   * @version $Revision: 1.2 $ $Date: 2007/02/02 17:33:31 $
21   */
22  public class InputTypeConverter extends AbstractConverter {
23      private static final String REVISION = "$Revision: 1.2 $";
24  
25      private static final String CHECK_BOX_INPUT_TYPE_NAME = "check";
26  
27      private static final String PUSH_BUTTON_INPUT_TYPE_NAME = "push";
28  
29      private static final String RADIO_BUTTON_INPUT_TYPE_NAME = "radio";
30  
31      private static final String DROP_DOWN_INPUT_TYPE_NAME = "dropdown";
32  
33      private static final String RESET_INPUT_TYPE_NAME = "reset";
34  
35      private static final String SUBMIT_INPUT_TYPE_NAME = "submit";
36  
37      private static final String DEFAULT_INPUT_TYPE_NAME = "default";
38  
39      public static final Converter SINGLETON = new InputTypeConverter();
40  
41      private static Map INPUT_TYPES = new HashMap(5);
42      static {
43          INPUT_TYPES.put(CHECK_BOX_INPUT_TYPE_NAME, new Integer(
44                  IInputTypeCapability.AS_CHECK_BUTTON));
45          INPUT_TYPES.put(PUSH_BUTTON_INPUT_TYPE_NAME, new Integer(
46                  IInputTypeCapability.AS_PUSH_BUTTON));
47          INPUT_TYPES.put(RADIO_BUTTON_INPUT_TYPE_NAME, new Integer(
48                  IInputTypeCapability.AS_RADIO_BUTTON));
49          INPUT_TYPES.put(DROP_DOWN_INPUT_TYPE_NAME, new Integer(
50                  IInputTypeCapability.AS_DROP_DOWN_MENU));
51          INPUT_TYPES.put(RESET_INPUT_TYPE_NAME, new Integer(
52                  IInputTypeCapability.AS_RESET_BUTTON));
53          INPUT_TYPES.put(SUBMIT_INPUT_TYPE_NAME, new Integer(
54                  IInputTypeCapability.AS_SUBMIT_BUTTON));
55          INPUT_TYPES.put(DEFAULT_INPUT_TYPE_NAME, new Integer(
56                  IInputTypeCapability.AS_PUSH_BUTTON));
57      }
58  
59      public Object getAsObject(FacesContext context, UIComponent component,
60              String value) {
61  
62          if (value == null || value.length() < 1) {
63              value = DEFAULT_INPUT_TYPE_NAME;
64  
65          } else {
66              value = value.toLowerCase();
67          }
68  
69          Integer i = (Integer) INPUT_TYPES.get(value);
70          if (i != null) {
71              return i;
72          }
73  
74          throw new IllegalArgumentException("Keyword '" + value
75                  + "' is not supported for a input-type type !");
76      }
77  
78      public String getAsString(FacesContext context, UIComponent component,
79              Object value) {
80  
81          if (value == null) {
82              return DEFAULT_INPUT_TYPE_NAME;
83          }
84  
85          if ((value instanceof Integer) == false) {
86              throw new IllegalArgumentException("Value must be an Integer !");
87          }
88  
89          for (Iterator it = INPUT_TYPES.entrySet().iterator(); it.hasNext();) {
90              Map.Entry entry = (Map.Entry) it.next();
91  
92              if (value.equals(entry.getValue()) == false) {
93                  continue;
94              }
95  
96              return (String) entry.getKey();
97          }
98  
99          throw new IllegalArgumentException("Value '" + value
100                 + "' is not supported for a input-type type !");
101     }
102 
103     public static final String getName(int inputType) {
104         switch (inputType) {
105         case IInputTypeCapability.AS_PUSH_BUTTON:
106             return PUSH_BUTTON_INPUT_TYPE_NAME;
107 
108         case IInputTypeCapability.AS_CHECK_BUTTON:
109             return CHECK_BOX_INPUT_TYPE_NAME;
110 
111         case IInputTypeCapability.AS_RADIO_BUTTON:
112             return RADIO_BUTTON_INPUT_TYPE_NAME;
113 
114         case IInputTypeCapability.AS_DROP_DOWN_MENU:
115             return DROP_DOWN_INPUT_TYPE_NAME;
116         }
117 
118         return null;
119     }
120 }