1 /* 2 * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 package org.netbeans.jemmy.drivers.input; 26 27 import java.awt.Component; 28 import java.awt.event.KeyEvent; 29 30 import org.netbeans.jemmy.Timeout; 31 import org.netbeans.jemmy.drivers.KeyDriver; 32 import org.netbeans.jemmy.operators.ComponentOperator; 33 34 /** 35 * KeyDriver using event dispatching. 36 * 37 * @author Alexandre Iline(alexandre.iline@oracle.com) 38 */ 39 public class KeyEventDriver extends EventDriver implements KeyDriver { 40 41 /** 42 * Constructs a KeyEventDriver object. 43 * 44 * @param supported an array of supported class names 45 */ KeyEventDriver(String[] supported)46 public KeyEventDriver(String[] supported) { 47 super(supported); 48 } 49 50 /** 51 * Constructs an KeyEventDriver object suporting ComponentOperator. 52 */ KeyEventDriver()53 public KeyEventDriver() { 54 super(); 55 } 56 57 @Override pressKey(ComponentOperator oper, int keyCode, int modifiers)58 public void pressKey(ComponentOperator oper, int keyCode, int modifiers) { 59 pressKey(findNativeParent(oper.getSource()), keyCode, modifiers); 60 } 61 62 @Override typedKey(ComponentOperator oper, int keyCode, char keyChar, int modifiers)63 public void typedKey(ComponentOperator oper, int keyCode, char keyChar, int modifiers) { 64 typedKey(findNativeParent(oper.getSource()), keyChar, modifiers); 65 } 66 67 @Override releaseKey(ComponentOperator oper, int keyCode, int modifiers)68 public void releaseKey(ComponentOperator oper, int keyCode, int modifiers) { 69 releaseKey(findNativeParent(oper.getSource()), keyCode, modifiers); 70 } 71 72 @Override pushKey(ComponentOperator oper, int keyCode, int modifiers, Timeout pushTime)73 public void pushKey(ComponentOperator oper, int keyCode, int modifiers, Timeout pushTime) { 74 Component nativeContainer = findNativeParent(oper.getSource()); 75 pressKey(nativeContainer, keyCode, modifiers); 76 pushTime.sleep(); 77 releaseKey(nativeContainer, keyCode, modifiers); 78 } 79 80 @Override typeKey(ComponentOperator oper, int keyCode, char keyChar, int modifiers, Timeout pushTime)81 public void typeKey(ComponentOperator oper, int keyCode, char keyChar, int modifiers, Timeout pushTime) { 82 Component nativeContainer = findNativeParent(oper.getSource()); 83 pressKey(nativeContainer, keyCode, modifiers); 84 pushTime.sleep(); 85 typedKey(nativeContainer, keyChar, modifiers); 86 releaseKey(nativeContainer, keyCode, modifiers); 87 } 88 89 @Deprecated pressKey(Component nativeContainer, int keyCode, int modifiers)90 private void pressKey(Component nativeContainer, int keyCode, int modifiers) { 91 dispatchEvent(nativeContainer, 92 new KeyEvent(nativeContainer, 93 KeyEvent.KEY_PRESSED, 94 System.currentTimeMillis(), 95 modifiers, keyCode)); 96 } 97 typedKey(Component nativeContainer, char keyChar, int modifiers)98 private void typedKey(Component nativeContainer, char keyChar, int modifiers) { 99 dispatchEvent(nativeContainer, 100 new KeyEvent(nativeContainer, 101 KeyEvent.KEY_TYPED, 102 System.currentTimeMillis(), 103 modifiers, KeyEvent.VK_UNDEFINED, keyChar)); 104 } 105 106 @Deprecated releaseKey(Component nativeContainer, int keyCode, int modifiers)107 private void releaseKey(Component nativeContainer, int keyCode, int modifiers) { 108 dispatchEvent(nativeContainer, 109 new KeyEvent(nativeContainer, 110 KeyEvent.KEY_RELEASED, 111 System.currentTimeMillis(), 112 modifiers, keyCode)); 113 } 114 findNativeParent(Component source)115 private Component findNativeParent(Component source) { 116 Component nativeOne = source; 117 while (nativeOne != null) { 118 if (!nativeOne.isLightweight()) { 119 return nativeOne; 120 } 121 nativeOne = nativeOne.getParent(); 122 } 123 return source; 124 } 125 } 126