View Javadoc

1   /*
2    * $Id: VirtualKeyConverter.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.model.AbstractConverter;
16  
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 VirtualKeyConverter extends AbstractConverter {
23      private static final String REVISION = "$Revision: 1.18 $";
24  
25      public static final Converter SINGLETON = new VirtualKeyConverter();
26  
27      private final static Map KEYS = new HashMap(255);
28  
29      private final static Map NAMES = new HashMap(255);
30      static {
31          KEYS.put("CANCEL", new Integer(0x03));
32          KEYS.put("HELP", new Integer(0x06));
33          KEYS.put("BACK_SPACE", new Integer(0x08));
34          KEYS.put("BACKSPACE", new Integer(0x08));
35          KEYS.put("TAB", new Integer(0x09));
36          KEYS.put("CLEAR", new Integer(0x0C));
37  
38          KEYS.put("RETURN", new Integer(0x0D));
39  
40          KEYS.put("ENTER", new Integer(0x0E));
41  
42          KEYS.put("SHIFT", new Integer(0x10));
43  
44          KEYS.put("CONTROL", new Integer(0x11));
45          KEYS.put("ALT", new Integer(0x12));
46          KEYS.put("PAUSE", new Integer(0x13));
47          KEYS.put("CAPS_LOCK", new Integer(0x14));
48          KEYS.put("CAPSLOCK", new Integer(0x14));
49          KEYS.put("ESCAPE", new Integer(0x1B));
50          KEYS.put("SPACE", new Integer(0x20));
51          KEYS.put("PAGE_UP", new Integer(0x21));
52          KEYS.put("PAGEUP", new Integer(0x21));
53          KEYS.put("PAGE_DOWN", new Integer(0x22));
54          KEYS.put("PAGEDOWN", new Integer(0x22));
55          KEYS.put("END", new Integer(0x23));
56          KEYS.put("HOME", new Integer(0x24));
57          KEYS.put("LEFT", new Integer(0x25));
58          KEYS.put("UP", new Integer(0x26));
59          KEYS.put("RIGHT", new Integer(0x27));
60          KEYS.put("DOWN", new Integer(0x28));
61  
62          KEYS.put("PRINT_SCREEN", new Integer(0x2C));
63          KEYS.put("PRINTSCREEN", new Integer(0x2C));
64  
65          KEYS.put("INSERT", new Integer(0x2D));
66          KEYS.put("DELETE", new Integer(0x2E));
67  
68          KEYS.put("SEMICOLON", new Integer(0x3B));
69          KEYS.put("EQUALS", new Integer(0x3D));
70          KEYS.put("NUMPAD0", new Integer(0x60));
71          KEYS.put("NUMPAD1", new Integer(0x61));
72          KEYS.put("NUMPAD2", new Integer(0x62));
73          KEYS.put("NUMPAD3", new Integer(0x63));
74          KEYS.put("NUMPAD4", new Integer(0x64));
75          KEYS.put("NUMPAD5", new Integer(0x65));
76          KEYS.put("NUMPAD6", new Integer(0x66));
77          KEYS.put("NUMPAD7", new Integer(0x67));
78          KEYS.put("NUMPAD8", new Integer(0x68));
79          KEYS.put("NUMPAD9", new Integer(0x69));
80          KEYS.put("MULTIPLY", new Integer(0x6A));
81          KEYS.put("ADD", new Integer(0x6B));
82          KEYS.put("SEPARATOR", new Integer(0x6C));
83          KEYS.put("SUBTRACT", new Integer(0x6D));
84          KEYS.put("DECIMAL", new Integer(0x6E));
85          KEYS.put("DIVIDE", new Integer(0x6F));
86          KEYS.put("F1", new Integer(0x70));
87          KEYS.put("F2", new Integer(0x71));
88          KEYS.put("F3", new Integer(0x72));
89          KEYS.put("F4", new Integer(0x73));
90          KEYS.put("F5", new Integer(0x74));
91          KEYS.put("F6", new Integer(0x75));
92          KEYS.put("F7", new Integer(0x76));
93          KEYS.put("F8", new Integer(0x77));
94          KEYS.put("F9", new Integer(0x78));
95          KEYS.put("F10", new Integer(0x79));
96          KEYS.put("F11", new Integer(0x7A));
97          KEYS.put("F12", new Integer(0x7B));
98          KEYS.put("F13", new Integer(0x7C));
99          KEYS.put("F14", new Integer(0x7D));
100         KEYS.put("F15", new Integer(0x7E));
101         KEYS.put("F16", new Integer(0x7F));
102         KEYS.put("F17", new Integer(0x80));
103         KEYS.put("F18", new Integer(0x81));
104         KEYS.put("F19", new Integer(0x82));
105         KEYS.put("F20", new Integer(0x83));
106         KEYS.put("F21", new Integer(0x84));
107         KEYS.put("F22", new Integer(0x85));
108         KEYS.put("F23", new Integer(0x86));
109         KEYS.put("F24", new Integer(0x87));
110 
111         KEYS.put("NUM_LOCK", new Integer(0x90));
112         KEYS.put("NUMLOCK", new Integer(0x90));
113         KEYS.put("SCROLL_LOCK", new Integer(0x91));
114         KEYS.put("SCROLLLOCK", new Integer(0x91));
115 
116         KEYS.put("COMMA", new Integer(0xBC));
117         KEYS.put("PERIOD", new Integer(0xBE));
118         KEYS.put("SLASH", new Integer(0xBF));
119 
120         KEYS.put("BACK_QUOTE", new Integer(0xC0));
121         KEYS.put("BACKQUOTE", new Integer(0xC0));
122 
123         KEYS.put("OPEN_BRACKET", new Integer(0xDB));
124         KEYS.put("OPENBRACKET", new Integer(0xDB));
125 
126         KEYS.put("BACK_SLASH", new Integer(0xDC));
127         KEYS.put("BACKSLASH", new Integer(0xDC));
128 
129         KEYS.put("CLOSE_BRACKET", new Integer(0xDD));
130         KEYS.put("CLOSEBRACKET", new Integer(0xDD));
131 
132         KEYS.put("QUOTE", new Integer(0xDE));
133 
134         KEYS.put("META", new Integer(0xE0));
135 
136         for (Iterator it = KEYS.entrySet().iterator(); it.hasNext();) {
137             Map.Entry entry = (Map.Entry) it.next();
138 
139             String key = (String) entry.getKey();
140             Integer vkey = (Integer) entry.getValue();
141 
142             key = Character.toUpperCase(key.charAt(0))
143                     + key.substring(1).toLowerCase();
144 
145             NAMES.put(vkey, key);
146         }
147     }
148 
149     public Object getAsObject(FacesContext context, UIComponent component,
150             String value) {
151 
152         if (value == null || value.length() < 1) {
153             return null;
154         }
155 
156         value = value.toUpperCase();
157 
158         return KEYS.get(value);
159     }
160 
161     public String getAsString(FacesContext context, UIComponent component,
162             Object value) {
163         return (String) NAMES.get(value);
164     }
165 
166     public static Integer convertUpperCase(String value) {
167         return (Integer) KEYS.get(value);
168     }
169 
170     public static String convertInt(int virtualKey) {
171         return (String) NAMES.get(new Integer(virtualKey));
172     }
173 }