blob: 20c27f120ebf99a75d5f100e402dff7bfde23420 [file] [log] [blame]
/*
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package org.netbeans.jemmy.drivers;
import org.netbeans.jemmy.JemmyException;
import org.netbeans.jemmy.JemmyProperties;
import org.netbeans.jemmy.operators.ComponentOperator;
/**
* Manages driver set.
*/
public class DriverManager {
/**
* Symbolic constant - prefix for drivers names.
*/
public static final String DRIVER_ID = "drivers.";
/**
* Symbolic constant for tree drivers.
*/
public static final String TREE_DRIVER_ID = DRIVER_ID + "tree";
/**
* Symbolic constant for text drivers.
*/
public static final String TEXT_DRIVER_ID = DRIVER_ID + "text";
/**
* Symbolic constant for key drivers.
*/
public static final String KEY_DRIVER_ID = DRIVER_ID + "key";
/**
* Symbolic constant for mouse drivers.
*/
public static final String MOUSE_DRIVER_ID = DRIVER_ID + "mouse";
/**
* Symbolic constant for scroll drivers.
*/
public static final String SCROLL_DRIVER_ID = DRIVER_ID + "scroll";
/**
* Symbolic constant for button drivers.
*/
public static final String BUTTON_DRIVER_ID = DRIVER_ID + "button";
/**
* Symbolic constant for list drivers.
*/
public static final String LIST_DRIVER_ID = DRIVER_ID + "list";
/**
* Symbolic constant for multiselection list drivers.
*/
public static final String MULTISELLIST_DRIVER_ID = DRIVER_ID + "multisellist";
/**
* Symbolic constant for reorderable list drivers.
*/
public static final String ORDEREDLIST_DRIVER_ID = DRIVER_ID + "orderedlist";
/**
* Symbolic constant for table drivers.
*/
public static final String TABLE_DRIVER_ID = DRIVER_ID + "table";
/**
* Symbolic constant for window drivers.
*/
public static final String WINDOW_DRIVER_ID = DRIVER_ID + "window";
/**
* Symbolic constant for window drivers.
*/
public static final String FRAME_DRIVER_ID = DRIVER_ID + "frame";
/**
* Symbolic constant for window drivers.
*/
public static final String INTERNAL_FRAME_DRIVER_ID = DRIVER_ID + "internal_frame";
/**
* Symbolic constant for frame drivers.
*/
public static final String FOCUS_DRIVER_ID = DRIVER_ID + "focus";
/**
* Symbolic constant for menu drivers.
*/
public static final String MENU_DRIVER_ID = DRIVER_ID + "menu";
//cannot be instantiated!
private DriverManager() {
}
/**
* Searches a driver.
*
* @param id Driver type id.
* @param operatorClass Class to get an driver for.
* @param props Instance to get driver from.
* @return a driver.
* @see #setDriver
*/
public static Object getDriver(String id, Class<?> operatorClass, JemmyProperties props) {
Object result = getADriver(id, operatorClass, props);
if (result == null) {
return getDriver(id, operatorClass);
} else {
return result;
}
}
/**
* Searches a driver. Uses {@code operator.getProperties()} to receive
* JemmyProperties instance.
*
* @param id Driver type id.
* @param operator Operator to get an driver for.
* @return a driver.
* @see #setDriver
*/
public static Object getDriver(String id, ComponentOperator operator) {
return getDriver(id, operator.getClass(), operator.getProperties());
}
/**
* Searches a driver. Uses current JemmyProperties.
*
* @param id Driver type id.
* @param operatorClass Class to get an driver for.
* @return a driver.
* @see #setDriver
*/
public static Object getDriver(String id, Class<?> operatorClass) {
Object result = getADriver(id, operatorClass, JemmyProperties.getProperties());
if (result == null) {
throw (new JemmyException("No \"" + id + "\" driver registered for "
+ operatorClass.getName() + " class!"));
} else {
return result;
}
}
/**
* Sets driver for an operator class.
*
* @param id Driver type id.
* @param driver A driver to be installed.
* @param operatorClass Class to set driver for.
* @see #getDriver
*/
public static void setDriver(String id, Object driver, Class<?> operatorClass) {
JemmyProperties.
setCurrentProperty(makeID(id, operatorClass), driver);
if (Boolean.getBoolean(DRIVER_ID + "trace_output")) {
JemmyProperties.getCurrentOutput().printLine("Installing "
+ driver.getClass().getName()
+ " drifer for "
+ operatorClass.getName()
+ " operators.");
}
}
/**
* Sets driver for an operator class name.
*
* @param id Driver type id.
* @param driver A driver to be installed.
* @param operatorClassName A name of operator class.
* @see #getDriver
*/
public static void setDriver(String id, Object driver, String operatorClassName) {
JemmyProperties.
setCurrentProperty(makeID(id, operatorClassName), driver);
if (Boolean.getBoolean(DRIVER_ID + "trace_output")) {
JemmyProperties.getCurrentOutput().printLine("Installing "
+ driver.getClass().getName()
+ " drifer for "
+ operatorClassName
+ " operators.");
}
}
/**
* Sets driver for all classes supported by driver.
*
* @param id Driver type id.
* @param driver A driver to be installed.
* @see #getDriver
*/
public static void setDriver(String id, Driver driver) {
Class<?>[] supported = driver.getSupported();
for (Class<?> aSupported : supported) {
setDriver(id, driver, aSupported);
}
}
/**
* Sets driver for all classes supported by driver.
*
* @param id Driver type id.
* @param driver A driver to be installed.
* @see #getDriver
*/
public static void setDriver(String id, LightDriver driver) {
String[] supported = driver.getSupported();
for (String aSupported : supported) {
setDriver(id, driver, aSupported);
}
}
/**
* Removes driver for operator class.
*
* @param id Driver type to remove.
* @param operatorClass Class to remove driver for.
*/
public static void removeDriver(String id, Class<?> operatorClass) {
JemmyProperties.
removeCurrentProperty(makeID(id, operatorClass));
if (Boolean.getBoolean(DRIVER_ID + "trace_output")) {
JemmyProperties.getCurrentOutput().printLine("Uninstalling a drifer for "
+ operatorClass.getName()
+ " operators.");
}
}
/**
* Removes driver for operator class.
*
* @param id Driver type to remove.
* @param operatorClassName A name of operator class.
*/
public static void removeDriver(String id, String operatorClassName) {
JemmyProperties.
removeCurrentProperty(makeID(id, operatorClassName));
if (Boolean.getBoolean(DRIVER_ID + "trace_output")) {
JemmyProperties.getCurrentOutput().printLine("Uninstalling a drifer for "
+ operatorClassName
+ " operators.");
}
}
/**
* Removes driver for operator classes.
*
* @param id Driver type to remove.
* @param operatorClasses Classes to remove driver for.
*/
public static void removeDriver(String id, Class<?>[] operatorClasses) {
for (Class<?> operatorClass : operatorClasses) {
removeDriver(id, operatorClass);
}
}
/**
* Removes driver for operator classes.
*
* @param id Driver type to remove.
* @param operatorClassNames Names of operator classes.
*/
public static void removeDriver(String id, String[] operatorClassNames) {
for (String operatorClassName : operatorClassNames) {
removeDriver(id, operatorClassName);
}
}
/**
* Removes driver for all supported classes.
*
* @param id Driver type to remove.
*/
public static void removeDrivers(String id) {
String[] keys = JemmyProperties.getCurrentKeys();
for (String key : keys) {
if (key.startsWith(id)) {
JemmyProperties.
removeCurrentProperty(key);
}
}
}
/**
* Returns {@code TREE_DRIVER_ID} driver.
*
* @param operatorClass Class to find driver for.
* @return a driver
* @see #setTreeDriver
*/
public static TreeDriver getTreeDriver(Class<?> operatorClass) {
return (TreeDriver) getDriver(TREE_DRIVER_ID, operatorClass);
}
/**
* Returns {@code TREE_DRIVER_ID} driver.
*
* @param operator Operator to find driver for.
* @return a driver
* @see #setTreeDriver
*/
public static TreeDriver getTreeDriver(ComponentOperator operator) {
return (TreeDriver) getDriver(TREE_DRIVER_ID, operator.getClass());
}
/**
* Defines {@code TREE_DRIVER_ID} driver.
*
* @param driver a driver
* @see #getTreeDriver
*/
public static void setTreeDriver(TreeDriver driver) {
setDriver(TREE_DRIVER_ID, driver);
}
/**
* Returns {@code TEXT_DRIVER_ID} driver.
*
* @param operatorClass Class to find driver for.
* @return a driver
* @see #setTextDriver
*/
public static TextDriver getTextDriver(Class<?> operatorClass) {
return (TextDriver) getDriver(TEXT_DRIVER_ID, operatorClass);
}
/**
* Returns {@code TEXT_DRIVER_ID} driver.
*
* @param operator Operator to find driver for.
* @return a driver
* @see #setTextDriver
*/
public static TextDriver getTextDriver(ComponentOperator operator) {
return (TextDriver) getDriver(TEXT_DRIVER_ID, operator.getClass());
}
/**
* Defines {@code TEXT_DRIVER_ID} driver.
*
* @param driver a driver
* @see #getTextDriver
*/
public static void setTextDriver(TextDriver driver) {
setDriver(TEXT_DRIVER_ID, driver);
}
/**
* Returns {@code KEY_DRIVER_ID} driver.
*
* @param operatorClass Class to find driver for.
* @return a driver
* @see #setKeyDriver
*/
public static KeyDriver getKeyDriver(Class<?> operatorClass) {
return (KeyDriver) getDriver(KEY_DRIVER_ID, operatorClass);
}
/**
* Returns {@code KEY_DRIVER_ID} driver.
*
* @param operator Operator to find driver for.
* @return a driver
* @see #setKeyDriver
*/
public static KeyDriver getKeyDriver(ComponentOperator operator) {
return (KeyDriver) getDriver(KEY_DRIVER_ID, operator.getClass());
}
/**
* Defines {@code KEY_DRIVER_ID} driver.
*
* @param driver a driver
* @see #getKeyDriver
*/
public static void setKeyDriver(KeyDriver driver) {
setDriver(KEY_DRIVER_ID, driver);
}
/**
* Returns {@code MOUSE_DRIVER_ID} driver.
*
* @param operatorClass Class to find driver for.
* @return a driver
* @see #setMouseDriver
*/
public static MouseDriver getMouseDriver(Class<?> operatorClass) {
return (MouseDriver) getDriver(MOUSE_DRIVER_ID, operatorClass);
}
/**
* Returns {@code MOUSE_DRIVER_ID} driver.
*
* @param operator Operator to find driver for.
* @return a driver
* @see #setMouseDriver
*/
public static MouseDriver getMouseDriver(ComponentOperator operator) {
return (MouseDriver) getDriver(MOUSE_DRIVER_ID, operator.getClass());
}
/**
* Defines {@code MOUSE_DRIVER_ID} driver.
*
* @param driver a driver
* @see #getMouseDriver
*/
public static void setMouseDriver(MouseDriver driver) {
setDriver(MOUSE_DRIVER_ID, driver);
}
/**
* Returns {@code SCROLL_DRIVER_ID} driver.
*
* @param operatorClass Class to find driver for.
* @return a driver
* @see #setScrollDriver
*/
public static ScrollDriver getScrollDriver(Class<?> operatorClass) {
return (ScrollDriver) getDriver(SCROLL_DRIVER_ID, operatorClass);
}
/**
* Returns {@code SCROLL_DRIVER_ID} driver.
*
* @param operator Operator to find driver for.
* @return a driver
* @see #setScrollDriver
*/
public static ScrollDriver getScrollDriver(ComponentOperator operator) {
return (ScrollDriver) getDriver(SCROLL_DRIVER_ID, operator.getClass());
}
/**
* Defines {@code SCROLL_DRIVER_ID} driver.
*
* @param driver a driver
* @see #getScrollDriver
*/
public static void setScrollDriver(ScrollDriver driver) {
setDriver(SCROLL_DRIVER_ID, driver);
}
/**
* Returns {@code BUTTON_DRIVER_ID} driver.
*
* @param operatorClass Class to find driver for.
* @return a driver
* @see #setButtonDriver
*/
public static ButtonDriver getButtonDriver(Class<?> operatorClass) {
return (ButtonDriver) getDriver(BUTTON_DRIVER_ID, operatorClass);
}
/**
* Returns {@code BUTTON_DRIVER_ID} driver.
*
* @param operator Operator to find driver for.
* @return a driver
* @see #setButtonDriver
*/
public static ButtonDriver getButtonDriver(ComponentOperator operator) {
return (ButtonDriver) getDriver(BUTTON_DRIVER_ID, operator.getClass());
}
/**
* Defines {@code BUTTON_DRIVER_ID} driver.
*
* @param driver a driver
* @see #getButtonDriver
*/
public static void setButtonDriver(ButtonDriver driver) {
setDriver(BUTTON_DRIVER_ID, driver);
}
/**
* Returns {@code LIST_DRIVER_ID} driver.
*
* @param operatorClass Class to find driver for.
* @return a driver
* @see #setListDriver
*/
public static ListDriver getListDriver(Class<?> operatorClass) {
return (ListDriver) getDriver(LIST_DRIVER_ID, operatorClass);
}
/**
* Returns {@code LIST_DRIVER_ID} driver.
*
* @param operator Operator to find driver for.
* @return a driver
* @see #setListDriver
*/
public static ListDriver getListDriver(ComponentOperator operator) {
return (ListDriver) getDriver(LIST_DRIVER_ID, operator.getClass());
}
/**
* Defines {@code LIST_DRIVER_ID} driver.
*
* @param driver a driver
* @see #getListDriver
*/
public static void setListDriver(ListDriver driver) {
setDriver(LIST_DRIVER_ID, driver);
}
/**
* Returns {@code MULTISELLIST_DRIVER_ID} driver.
*
* @param operatorClass Class to find driver for.
* @return a driver
* @see #setMultiSelListDriver
*/
public static MultiSelListDriver getMultiSelListDriver(Class<?> operatorClass) {
return (MultiSelListDriver) getDriver(MULTISELLIST_DRIVER_ID, operatorClass);
}
/**
* Returns {@code MULTISELLIST_DRIVER_ID} driver.
*
* @param operator Operator to find driver for.
* @return a driver
* @see #setMultiSelListDriver
*/
public static MultiSelListDriver getMultiSelListDriver(ComponentOperator operator) {
return (MultiSelListDriver) getDriver(MULTISELLIST_DRIVER_ID, operator.getClass());
}
/**
* Defines {@code MULTISELLIST_DRIVER_ID} driver.
*
* @param driver a driver
* @see #getMultiSelListDriver
*/
public static void setMultiSelListDriver(MultiSelListDriver driver) {
setDriver(MULTISELLIST_DRIVER_ID, driver);
}
/**
* Returns {@code ORDEREDLIST_DRIVER_ID} driver.
*
* @param operatorClass Class to find driver for.
* @return a driver
* @see #setOrderedListDriver
*/
public static OrderedListDriver getOrderedListDriver(Class<?> operatorClass) {
return (OrderedListDriver) getDriver(ORDEREDLIST_DRIVER_ID, operatorClass);
}
/**
* Returns {@code ORDEREDLIST_DRIVER_ID} driver.
*
* @param operator Operator to find driver for.
* @return a driver
* @see #setOrderedListDriver
*/
public static OrderedListDriver getOrderedListDriver(ComponentOperator operator) {
return (OrderedListDriver) getDriver(ORDEREDLIST_DRIVER_ID, operator.getClass());
}
/**
* Defines {@code ORDEREDLIST_DRIVER_ID} driver.
*
* @param driver a driver
* @see #getOrderedListDriver
*/
public static void setOrderedListDriver(OrderedListDriver driver) {
setDriver(ORDEREDLIST_DRIVER_ID, driver);
}
/**
* Returns {@code TABLE_DRIVER_ID} driver.
*
* @param operatorClass Class to find driver for.
* @return a driver
* @see #setTableDriver
*/
public static TableDriver getTableDriver(Class<?> operatorClass) {
return (TableDriver) getDriver(TABLE_DRIVER_ID, operatorClass);
}
/**
* Returns {@code TABLE_DRIVER_ID} driver.
*
* @param operator Operator to find driver for.
* @return a driver
* @see #setTableDriver
*/
public static TableDriver getTableDriver(ComponentOperator operator) {
return (TableDriver) getDriver(TABLE_DRIVER_ID, operator.getClass());
}
/**
* Defines {@code TABLE_DRIVER_ID} driver.
*
* @param driver a driver
* @see #getTableDriver
*/
public static void setTableDriver(TableDriver driver) {
setDriver(TABLE_DRIVER_ID, driver);
}
/**
* Returns {@code WINDOW_DRIVER_ID} driver.
*
* @param operatorClass Class to find driver for.
* @return a driver
* @see #setWindowDriver
*/
public static WindowDriver getWindowDriver(Class<?> operatorClass) {
return (WindowDriver) getDriver(WINDOW_DRIVER_ID, operatorClass);
}
/**
* Returns {@code WINDOW_DRIVER_ID} driver.
*
* @param operator Operator to find driver for.
* @return a driver
* @see #setWindowDriver
*/
public static WindowDriver getWindowDriver(ComponentOperator operator) {
return (WindowDriver) getDriver(WINDOW_DRIVER_ID, operator.getClass());
}
/**
* Defines {@code WINDOW_DRIVER_ID} driver.
*
* @param driver a driver
* @see #getWindowDriver
*/
public static void setWindowDriver(WindowDriver driver) {
setDriver(WINDOW_DRIVER_ID, driver);
}
/**
* Returns {@code FRAME_DRIVER_ID} driver.
*
* @param operatorClass Class to find driver for.
* @return a driver
* @see #setFrameDriver
*/
public static FrameDriver getFrameDriver(Class<?> operatorClass) {
return (FrameDriver) getDriver(FRAME_DRIVER_ID, operatorClass);
}
/**
* Returns {@code FRAME_DRIVER_ID} driver.
*
* @param operator Operator to find driver for.
* @return a driver
* @see #setFrameDriver
*/
public static FrameDriver getFrameDriver(ComponentOperator operator) {
return (FrameDriver) getDriver(FRAME_DRIVER_ID, operator.getClass());
}
/**
* Defines {@code FRAME_DRIVER_ID} driver.
*
* @param driver a driver
* @see #getFrameDriver
*/
public static void setFrameDriver(FrameDriver driver) {
setDriver(FRAME_DRIVER_ID, driver);
}
/**
* Returns {@code INTERNAL_FRAME_DRIVER_ID} driver.
*
* @param operatorClass Class to find driver for.
* @return a driver
* @see #setInternalFrameDriver
*/
public static InternalFrameDriver getInternalFrameDriver(Class<?> operatorClass) {
return (InternalFrameDriver) getDriver(INTERNAL_FRAME_DRIVER_ID, operatorClass);
}
/**
* Returns {@code INTERNAL_FRAME_DRIVER_ID} driver.
*
* @param operator Operator to find driver for.
* @return a driver
* @see #setInternalFrameDriver
*/
public static InternalFrameDriver getInternalFrameDriver(ComponentOperator operator) {
return (InternalFrameDriver) getDriver(INTERNAL_FRAME_DRIVER_ID, operator.getClass());
}
/**
* Defines {@code INTERNAL_FRAME_DRIVER_ID} driver.
*
* @param driver a driver
* @see #getInternalFrameDriver
*/
public static void setInternalFrameDriver(InternalFrameDriver driver) {
setDriver(INTERNAL_FRAME_DRIVER_ID, driver);
}
/**
* Returns {@code FOCUS_DRIVER_ID} driver.
*
* @param operatorClass Class to find driver for.
* @return a driver
* @see #setFocusDriver
*/
public static FocusDriver getFocusDriver(Class<?> operatorClass) {
return (FocusDriver) getDriver(FOCUS_DRIVER_ID, operatorClass);
}
/**
* Returns {@code FOCUS_DRIVER_ID} driver.
*
* @param operator Operator to find driver for.
* @return a driver
* @see #setFocusDriver
*/
public static FocusDriver getFocusDriver(ComponentOperator operator) {
return (FocusDriver) getDriver(FOCUS_DRIVER_ID, operator.getClass());
}
/**
* Defines {@code FOCUS_DRIVER_ID} driver.
*
* @param driver a driver
* @see #getFocusDriver
*/
public static void setFocusDriver(FocusDriver driver) {
setDriver(FOCUS_DRIVER_ID, driver);
}
/**
* Returns {@code MENU_DRIVER_ID} driver.
*
* @param operatorClass Class to find driver for.
* @return a driver
* @see #setMenuDriver
*/
public static MenuDriver getMenuDriver(Class<?> operatorClass) {
return (MenuDriver) getDriver(MENU_DRIVER_ID, operatorClass);
}
/**
* Returns {@code MENU_DRIVER_ID} driver.
*
* @param operator Operator to find driver for.
* @return a driver
* @see #setMenuDriver
*/
public static MenuDriver getMenuDriver(ComponentOperator operator) {
return (MenuDriver) getDriver(MENU_DRIVER_ID, operator.getClass());
}
/**
* Defines {@code MENU_DRIVER_ID} driver.
*
* @param driver a driver
* @see #getMenuDriver
*/
public static void setMenuDriver(MenuDriver driver) {
setDriver(MENU_DRIVER_ID, driver);
}
static void setDriver(String id, Object driver) {
if (driver instanceof Driver) {
setDriver(id, (Driver) driver);
} else if (driver instanceof LightDriver) {
setDriver(id, (LightDriver) driver);
} else {
throw (new JemmyException("Driver is neither Driver nor LightDriver "
+ driver.toString()));
}
}
//creates driver id
private static String makeID(String id, Class<?> operatorClass) {
return makeID(id, operatorClass.getName());
}
private static String makeID(String id, String operatorClassName) {
return id + "." + operatorClassName;
}
//returns a driver
private static Object getADriver(String id, Class<?> operatorClass, JemmyProperties props) {
Class<?> superClass = operatorClass;
Object drvr;
do {
drvr = props.
getProperty(makeID(id, superClass));
if (drvr != null) {
return drvr;
}
} while (ComponentOperator.class.
isAssignableFrom(superClass = superClass.getSuperclass()));
return null;
}
static {
new InputDriverInstaller().install();
new DefaultDriverInstaller().install();
}
}