1 /* 2 * Copyright (c) 2007, 2017, 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.jemmy.input.awt; 26 27 import org.jemmy.JemmyException; 28 import org.jemmy.control.Wrap; 29 import org.jemmy.env.Environment; 30 import org.jemmy.interfaces.ControlInterface; 31 import org.jemmy.interfaces.ControlInterfaceFactory; 32 import org.jemmy.interfaces.Drag; 33 import org.jemmy.interfaces.Keyboard; 34 import org.jemmy.interfaces.Mouse; 35 import org.jemmy.interfaces.TypeControlInterface; 36 import org.jemmy.operators.awt.AWTScreen; 37 import org.jemmy.operators.Screen; 38 39 /** 40 * 41 * @author shura 42 */ 43 public class AWTRobotInputFactory implements ControlInterfaceFactory { 44 45 /** 46 * Set this Environment property to true or false to run java.awt.Robot in 47 * other or the same JVM 48 */ 49 public static final String OTHER_VM_PROPERTY = "awt.robot.othervm"; 50 51 /** 52 * Set this Environment property to the name of the host where other JVM runs. 53 * 'localhost' by default 54 */ 55 public static final String OTHER_VM_HOST_PROPERTY = "awt.robot.othervm.host"; 56 57 /** 58 * Set this Environment property to override the port which is used to 59 * connect to other JVM 60 */ 61 public static final String OTHER_VM_PORT_PROPERTY = "awt.robot.othervm.port"; 62 63 /** 64 * Set this Environment property to to the maximum time of waiting for the 65 * client to connect to the JVM where Robot is running. It also waits the same 66 * amount of ms for the next connection after the previous terminates. 67 * Default is 15 min. 68 */ 69 public static final String OTHER_VM_CONNECTION_TIMEOUT_PROPERTY 70 = "awt.robot.othervm.connection.timeout"; 71 72 /** 73 * The name of the timeout that is used by default as the delay time for 74 * java.awt.Robot 75 * @see java.awt.Robot#setAutoDelay(int) 76 */ 77 public static final String ROBOT_DELAY_TIMEOUT_NAME = "RobotDriver.DelayTimeout"; 78 79 /** 80 * Set this Environment property to the maximum number of pixels between 81 * mouse positions during movement 82 */ 83 public static final String ROBOT_MOUSE_SMOOTHNESS_PROPERTY = "awt.robot.mouse.smoothness"; 84 85 /** 86 * Specifies whether to run java.awt.Robot in other JVM 87 * @param runInOtherJVM if true then java.awt.Robot will run in other JVM 88 */ 89 public static void runInOtherJVM(boolean runInOtherJVM) { 90 RobotExecutor.get().setRunInOtherJVM(runInOtherJVM); 91 } 92 93 /** 94 * Returns runInOtherJVM setting 95 * @return if true then java.awt.Robot is running in other JVM 96 */ 97 public static boolean isRunInOtherJVM() { 98 return RobotExecutor.get().isRunInOtherJVM(); 99 } 100 101 /** 102 * Specifies mouse movements smoothness 103 * @param mouseSmoothness the maximum number of pixels between 104 * mouse positions during movement 105 * @see #ROBOT_MOUSE_SMOOTHNESS_PROPERTY 106 */ 107 public static void setMouseSmoothness(int mouseSmoothness) { 108 if(mouseSmoothness <= 0) { 109 throw new IllegalArgumentException("Mouse smoothness should be greater than zero."); 110 } 111 RobotDriver.setMouseSmoothness(mouseSmoothness); 112 } 113 114 /** 115 * Gets the mouse movements smoothness 116 * @return the maximum number of pixels between 117 * mouse positions during movement 118 * @see #ROBOT_MOUSE_SMOOTHNESS_PROPERTY 119 */ 120 public static int getMouseSmoothness() { 121 return RobotDriver.getMouseSmoothness(); 122 } 123 124 static { 125 if(Screen.SCREEN == null) { 126 Screen.setSCREEN(new AWTScreen(Environment.getEnvironment())); 127 } 128 } 129 130 public AWTMap getAwtMap() { 131 return RobotExecutor.get().getAWTMap(); 132 } 133 134 public void setAwtMap(AWTMap awtMap) { 135 RobotExecutor.get().setAWTMap(awtMap); 136 } 137 138 public <INTERFACE extends ControlInterface> INTERFACE create(Wrap<?> control, Class<INTERFACE> interfaceClass) { 139 if(Mouse.class.isAssignableFrom(interfaceClass)) { 140 return (INTERFACE) new MouseImpl(control); 141 } else if(Keyboard.class.isAssignableFrom(interfaceClass)) { 142 return (INTERFACE) new KeyboardImpl(control); 143 } else if(Drag.class.isAssignableFrom(interfaceClass)) { 144 return (INTERFACE) new DragImpl(control); 145 } 146 throw new JemmyException(AWTRobotInputFactory.class.getName() + " does not support " + interfaceClass.getName()); 147 } 148 149 public <TYPE, INTERFACE extends TypeControlInterface<TYPE>> INTERFACE create(Wrap<?> control, Class<INTERFACE> interfaceClass, Class<TYPE> type) { 150 throw new JemmyException(AWTRobotInputFactory.class.getName() + " does not support " + interfaceClass.getName()); 151 } 152 153 @Override 154 public String toString() { 155 return getClass().getName() + "[otherVM=" + isRunInOtherJVM() + ", mouseSmoothness=" + getMouseSmoothness() + "]"; 156 } 157 }