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.model.AbstractConverter;
16
17
18
19
20
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 }