1 /* 2 * Copyright (c) 1997, 2018, 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; 26 27 import javax.swing.UIManager; 28 29 import org.netbeans.jemmy.ClassReference; 30 import org.netbeans.jemmy.JemmyException; 31 import org.netbeans.jemmy.JemmyProperties; 32 import org.netbeans.jemmy.drivers.buttons.ButtonMouseDriver; 33 import org.netbeans.jemmy.drivers.focus.APIFocusDriver; 34 import org.netbeans.jemmy.drivers.focus.MouseFocusDriver; 35 import org.netbeans.jemmy.drivers.lists.ChoiceDriver; 36 import org.netbeans.jemmy.drivers.lists.JComboMouseDriver; 37 import org.netbeans.jemmy.drivers.lists.JListMouseDriver; 38 import org.netbeans.jemmy.drivers.lists.JTabMouseDriver; 39 import org.netbeans.jemmy.drivers.lists.JTableHeaderDriver; 40 import org.netbeans.jemmy.drivers.lists.ListKeyboardDriver; 41 import org.netbeans.jemmy.drivers.menus.DefaultJMenuDriver; 42 import org.netbeans.jemmy.drivers.menus.QueueJMenuDriver; 43 import org.netbeans.jemmy.drivers.scrolling.JScrollBarDriver; 44 import org.netbeans.jemmy.drivers.scrolling.JSliderDriver; 45 import org.netbeans.jemmy.drivers.scrolling.JSplitPaneDriver; 46 import org.netbeans.jemmy.drivers.scrolling.ScrollPaneDriver; 47 import org.netbeans.jemmy.drivers.scrolling.ScrollbarDriver; 48 import org.netbeans.jemmy.drivers.tables.JTableMouseDriver; 49 import org.netbeans.jemmy.drivers.text.AWTTextKeyboardDriver; 50 import org.netbeans.jemmy.drivers.text.SwingTextKeyboardDriver; 51 import org.netbeans.jemmy.drivers.trees.JTreeMouseDriver; 52 import org.netbeans.jemmy.drivers.windows.DefaultFrameDriver; 53 import org.netbeans.jemmy.drivers.windows.DefaultInternalFrameDriver; 54 import org.netbeans.jemmy.drivers.windows.DefaultWindowDriver; 55 import org.netbeans.jemmy.drivers.windows.InternalFramePopupMenuDriver; 56 57 /** 58 * Installs all necessary drivers for Jemmy operators except low-level drivers 59 * which are installed by 60 * <a href="InputDriverInstaller.java">InputDriverInstaller</a>. 61 * 62 * @author Alexandre Iline(alexandre.iline@oracle.com) 63 */ 64 public class DefaultDriverInstaller extends ArrayDriverInstaller { 65 66 /** 67 * Constructs a DefaultDriverInstaller object. 68 * 69 * @param shortcutEvents Signals whether shortcut mode is used. 70 */ DefaultDriverInstaller(boolean shortcutEvents)71 public DefaultDriverInstaller(boolean shortcutEvents) { 72 super(new String[]{ 73 DriverManager.LIST_DRIVER_ID, 74 DriverManager.MULTISELLIST_DRIVER_ID, 75 DriverManager.TREE_DRIVER_ID, 76 DriverManager.TEXT_DRIVER_ID, 77 DriverManager.TEXT_DRIVER_ID, 78 DriverManager.SCROLL_DRIVER_ID, 79 DriverManager.SCROLL_DRIVER_ID, 80 DriverManager.SCROLL_DRIVER_ID, 81 DriverManager.SCROLL_DRIVER_ID, 82 DriverManager.SCROLL_DRIVER_ID, 83 DriverManager.SCROLL_DRIVER_ID, 84 DriverManager.BUTTON_DRIVER_ID, 85 DriverManager.LIST_DRIVER_ID, 86 DriverManager.LIST_DRIVER_ID, 87 DriverManager.MULTISELLIST_DRIVER_ID, 88 DriverManager.LIST_DRIVER_ID, 89 DriverManager.LIST_DRIVER_ID, 90 DriverManager.MULTISELLIST_DRIVER_ID, 91 DriverManager.TABLE_DRIVER_ID, 92 DriverManager.LIST_DRIVER_ID, 93 DriverManager.FRAME_DRIVER_ID, 94 DriverManager.WINDOW_DRIVER_ID, 95 DriverManager.FRAME_DRIVER_ID, 96 DriverManager.INTERNAL_FRAME_DRIVER_ID, 97 DriverManager.WINDOW_DRIVER_ID, 98 DriverManager.FOCUS_DRIVER_ID, 99 DriverManager.FOCUS_DRIVER_ID, 100 DriverManager.MENU_DRIVER_ID, 101 DriverManager.ORDEREDLIST_DRIVER_ID}, 102 new Object[]{ 103 new JTreeMouseDriver(), 104 new JTreeMouseDriver(), 105 new JTreeMouseDriver(), 106 new AWTTextKeyboardDriver(), 107 new SwingTextKeyboardDriver(), 108 new ScrollbarDriver(), 109 new ScrollPaneDriver(), 110 new JScrollBarDriver(), 111 new JSplitPaneDriver(), 112 new JSliderDriver(), 113 createSpinnerDriver(), 114 new ButtonMouseDriver(), 115 new JTabMouseDriver(), 116 new ListKeyboardDriver(), 117 new ListKeyboardDriver(), 118 new JComboMouseDriver(), 119 new JListMouseDriver(), 120 new JListMouseDriver(), 121 new JTableMouseDriver(), 122 new ChoiceDriver(), 123 new DefaultFrameDriver(), 124 new DefaultWindowDriver(), 125 "Motif".equals(UIManager.getLookAndFeel().getID())? new InternalFramePopupMenuDriver(): new DefaultInternalFrameDriver(), 126 "Motif".equals(UIManager.getLookAndFeel().getID())? new InternalFramePopupMenuDriver(): new DefaultInternalFrameDriver(), 127 "Motif".equals(UIManager.getLookAndFeel().getID())? new InternalFramePopupMenuDriver(): new DefaultInternalFrameDriver(), 128 new APIFocusDriver(), 129 new MouseFocusDriver(), 130 (shortcutEvents ? new QueueJMenuDriver() : new DefaultJMenuDriver()), 131 new JTableHeaderDriver()}); 132 } 133 134 /** 135 * Constructs a DefaultDriverInstaller object with shortcut mode flag taken 136 * from {@code JemmyProperties}. 137 */ DefaultDriverInstaller()138 public DefaultDriverInstaller() { 139 this((JemmyProperties.getCurrentDispatchingModel() 140 & JemmyProperties.SHORTCUT_MODEL_MASK) != 0); 141 } 142 createSpinnerDriver()143 private static LightDriver createSpinnerDriver() { 144 if (System.getProperty("java.specification.version").compareTo("1.3") > 0) { 145 try { 146 return ((LightDriver) new ClassReference("org.netbeans.jemmy.drivers.scrolling.JSpinnerDriver"). 147 newInstance(null, null)); 148 } catch (ClassNotFoundException e) { 149 JemmyProperties.getCurrentOutput(). 150 printErrLine("ATTENTION! you are using Jemmy built by Java earlier then 1.4, under " 151 + "Java 1.4. \nImpossible to create JSpinnerDriver"); 152 return createEmptyDriver(); 153 } catch (Exception e) { 154 throw (new JemmyException("Impossible to create JSpinnerDriver although java version is " 155 + System.getProperty("java.version"), 156 e)); 157 } 158 } else { 159 return createEmptyDriver(); 160 } 161 } 162 createEmptyDriver()163 private static LightDriver createEmptyDriver() { 164 return (new LightDriver() { 165 @Override 166 public String[] getSupported() { 167 return new String[]{Object.class.getName()}; 168 } 169 }); 170 } 171 } 172