/** * Copyright 2008-2016 Qualogy Solutions B.V. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.qualogy.qafe.mgwt.client.util; import java.util.HashSet; import java.util.Set; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.event.dom.client.KeyCodes; public class KeyBoardHelper { public static final int KEY_F1 = 112; public static final int KEY_F2 = 113; public static final int KEY_F3 = 114; public static final int KEY_F4 = 115; public static final int KEY_F5 = 116; public static final int KEY_F6 = 117; public static final int KEY_F7 = 118; public static final int KEY_F8 = 119; public static final int KEY_F9 = 120; public static final int KEY_F10 = 121; public static final int KEY_F11 = 122; public static final int KEY_F12 = 123; public static final int KEY_SPACE = 32; public static final int KEY_INSERT = 45; public static final int KEY_NUMPAD_0 = 96; public static final int KEY_NUMPAD_1 = 97; public static final int KEY_NUMPAD_2 = 98; public static final int KEY_NUMPAD_3 = 99; public static final int KEY_NUMPAD_4 = 100; public static final int KEY_NUMPAD_5 = 101; public static final int KEY_NUMPAD_6 = 102; public static final int KEY_NUMPAD_7 = 103; public static final int KEY_NUMPAD_8 = 104; public static final int KEY_NUMPAD_9 = 105; public static final int KEY_NUMPAD_MULTIPLY = 106; public static final int KEY_NUMPAD_ADD = 107; public static final int KEY_NUMPAD_SUBTRACT = 109; public static final int KEY_NUMPAD_DECIMAL = 110; public static final int KEY_NUMPAD_DIVIDE = 111; public static final int KEY_NUM_LOCK = 144; public static final int KEY_SEMICOLON = 186; public static final int KEY_EQUALS = 187; public static final int KEY_COMMA = 188; public static final int KEY_HYPHEN = 189; public static final int KEY_DOT = 190; public static final int KEY_SLASH = 191; public static final int KEY_BACKSLASH = 220; public static final int KEY_BACKTICK = 192; public static final int KEY_SQUAREBRACKET_OPEN = 219; public static final int KEY_SQUAREBRACKET_CLOSE = 221; public static final int KEY_SINGLEQUOTE = 222; public static final String KEY_NAME_F1 = "F1"; public static final String KEY_NAME_F2 = "F2"; public static final String KEY_NAME_F3 = "F3"; public static final String KEY_NAME_F4 = "F4"; public static final String KEY_NAME_F5 = "F5"; public static final String KEY_NAME_F6 = "F6"; public static final String KEY_NAME_F7 = "F7"; public static final String KEY_NAME_F8 = "F8"; public static final String KEY_NAME_F9 = "F9"; public static final String KEY_NAME_F10 = "F10"; public static final String KEY_NAME_F11 = "F11"; public static final String KEY_NAME_F12 = "F12"; public static final String KEY_NAME_SPACE = "KEY_SPACE"; public static final String KEY_NAME_INSERT = "KEY_INSERT"; public static final String KEY_NAME_DELETE = "KEY_DELETE"; public static final String KEY_NAME_HOME = "KEY_HOME"; public static final String KEY_NAME_END = "KEY_END"; public static final String KEY_NAME_PAGEUP = "KEY_PAGEUP"; public static final String KEY_NAME_PAGEDOWN = "KEY_PAGEDOWN"; public static final String KEY_NAME_UP = "KEY_UP"; public static final String KEY_NAME_DOWN = "KEY_DOWN"; public static final String KEY_NAME_LEFT = "KEY_LEFT"; public static final String KEY_NAME_RIGHT = "KEY_RIGHT"; public static final String KEY_NAME_ALT = "KEY_ALT"; public static final String KEY_NAME_BACKSPACE = "KEY_BACKSPACE"; public static final String KEY_NAME_CTRL = "KEY_CTRL"; public static final String KEY_NAME_ENTER = "KEY_ENTER"; public static final String KEY_NAME_ESCAPE = "KEY_ESCAPE"; public static final String KEY_NAME_SHIFT = "KEY_SHIFT"; public static final String KEY_NAME_TAB = "KEY_TAB"; public static final String KEY_NAME_NUM_LOCK = "KEY_NUMLOCK"; public static final String PARAM_KEY = "key"; public static final String PARAM_KEY_DELIMITER = "\\+"; private KeyBoardHelper() { } public static boolean isKeyInput(final String param, final String value, final String keyInput) { if (PARAM_KEY.equals(param) && (value != null)) { return value.equals(keyInput); } return false; } public static boolean isKeyInput(final String param, final String value, final NativeEvent keyEvent) { if (PARAM_KEY.equals(param) && (value != null)) { Set<String> keyInputs = getKeyInputs(keyEvent); String[] keyValues = value.toUpperCase().split(PARAM_KEY_DELIMITER); if ((keyInputs.size() > 0) && (keyInputs.size() == keyValues.length)) { for (int i=0; i<keyValues.length; i++) { String keyValue = keyValues[i]; if (!keyInputs.contains(keyValue.trim())) { return false; } } return true; } } return false; } // CHECKSTYLE.OFF: CyclomaticComplexity private static Set<String> getKeyInputs(final NativeEvent keyEvent) { Set<String> keyInputs = new HashSet<String>(); if (keyEvent != null) { int keyCode = keyEvent.getKeyCode(); if (keyEvent.getAltKey()) { keyInputs.add(KEY_NAME_ALT); } if (keyEvent.getCtrlKey()) { keyInputs.add(KEY_NAME_CTRL); } if (keyEvent.getShiftKey()) { keyInputs.add(KEY_NAME_SHIFT); } switch (keyCode) { case KeyCodes.KEY_ALT : { keyInputs.add(KEY_NAME_ALT); } break; case KeyCodes.KEY_CTRL : { keyInputs.add(KEY_NAME_CTRL); } break; case KeyCodes.KEY_SHIFT : { keyInputs.add(KEY_NAME_SHIFT); } break; case KeyCodes.KEY_UP : { keyInputs.add(KEY_NAME_UP); } break; case KeyCodes.KEY_DOWN : { keyInputs.add(KEY_NAME_DOWN); } break; case KeyCodes.KEY_LEFT : { keyInputs.add(KEY_NAME_LEFT); } break; case KeyCodes.KEY_RIGHT : { keyInputs.add(KEY_NAME_RIGHT); } break; case KeyCodes.KEY_TAB : { keyInputs.add(KEY_NAME_TAB); } break; case KeyCodes.KEY_ENTER : { keyInputs.add(KEY_NAME_ENTER); } break; case KeyCodes.KEY_ESCAPE : { keyInputs.add(KEY_NAME_ESCAPE); } break; case KeyCodes.KEY_BACKSPACE : { keyInputs.add(KEY_NAME_BACKSPACE); } break; case KEY_INSERT : { keyInputs.add(KEY_NAME_INSERT); } break; case KeyCodes.KEY_DELETE : { keyInputs.add(KEY_NAME_DELETE); } break; case KeyCodes.KEY_HOME : { keyInputs.add(KEY_NAME_HOME); } break; case KeyCodes.KEY_END : { keyInputs.add(KEY_NAME_END); } break; case KeyCodes.KEY_PAGEUP : { keyInputs.add(KEY_NAME_PAGEUP); } break; case KeyCodes.KEY_PAGEDOWN : { keyInputs.add(KEY_NAME_PAGEDOWN); } break; case KEY_SPACE : { keyInputs.add(KEY_NAME_SPACE); } break; case KEY_F1 : { keyInputs.add(KEY_NAME_F1); } break; case KEY_F2 : { keyInputs.add(KEY_NAME_F2); } break; case KEY_F3 : { keyInputs.add(KEY_NAME_F3); } break; case KEY_F4 : { keyInputs.add(KEY_NAME_F4); } break; case KEY_F5 : { keyInputs.add(KEY_NAME_F5); } break; case KEY_F6 : { keyInputs.add(KEY_NAME_F6); } break; case KEY_F7 : { keyInputs.add(KEY_NAME_F7); } break; case KEY_F8 : { keyInputs.add(KEY_NAME_F8); } break; case KEY_F9 : { keyInputs.add(KEY_NAME_F9); } break; case KEY_F10 : { keyInputs.add(KEY_NAME_F10); } break; case KEY_F11 : { keyInputs.add(KEY_NAME_F11); } break; case KEY_F12 : { keyInputs.add(KEY_NAME_F12); } break; case KEY_NUM_LOCK : { keyInputs.add(KEY_NAME_NUM_LOCK); } break; case KEY_NUMPAD_DIVIDE : { keyInputs.add("/"); } break; case KEY_NUMPAD_MULTIPLY : { keyInputs.add("*"); } break; case KEY_NUMPAD_SUBTRACT : { keyInputs.add("-"); } break; case KEY_NUMPAD_ADD : { keyInputs.add("+"); } break; case KEY_NUMPAD_DECIMAL : { keyInputs.add("."); } break; case KEY_NUMPAD_0 : { keyInputs.add("0"); } break; case KEY_NUMPAD_1 : { keyInputs.add("1"); } break; case KEY_NUMPAD_2 : { keyInputs.add("2"); } break; case KEY_NUMPAD_3 : { keyInputs.add("3"); } break; case KEY_NUMPAD_4 : { keyInputs.add("4"); } break; case KEY_NUMPAD_5 : { keyInputs.add("5"); } break; case KEY_NUMPAD_6 : { keyInputs.add("6"); } break; case KEY_NUMPAD_7 : { keyInputs.add("7"); } break; case KEY_NUMPAD_8 : { keyInputs.add("8"); } break; case KEY_NUMPAD_9 : { keyInputs.add("9"); } break; case KEY_SEMICOLON : { keyInputs.add(";"); } break; case KEY_EQUALS : { keyInputs.add("="); } break; case KEY_COMMA : { keyInputs.add(","); } break; case KEY_HYPHEN : { keyInputs.add("-"); } break; case KEY_DOT : { keyInputs.add("."); } break; case KEY_SLASH : { keyInputs.add("/"); } break; case KEY_BACKSLASH : { keyInputs.add("\\"); } break; case KEY_BACKTICK : { keyInputs.add("`"); } break; case KEY_SQUAREBRACKET_OPEN : { keyInputs.add("["); } break; case KEY_SQUAREBRACKET_CLOSE : { keyInputs.add("]"); } break; case KEY_SINGLEQUOTE : { keyInputs.add("'"); } break; default : { if (isLetter(keyCode) || isDigit(keyCode)) { keyInputs.add(Character.toString((char)keyCode)); } } break; } } return keyInputs; } // CHECKSTYLE.ON: CyclomaticComplexity private static boolean isLetter(int keyCode) { return (keyCode >= 65) && (keyCode <= 90); } private static boolean isDigit(int keyCode) { return (keyCode >= 48) && (keyCode <= 57); } }