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