DefaultDriverInstaller.java revision 13978:1993af50385d
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.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23package org.netbeans.jemmy.drivers;
24
25import org.netbeans.jemmy.ClassReference;
26import org.netbeans.jemmy.JemmyException;
27import org.netbeans.jemmy.JemmyProperties;
28import org.netbeans.jemmy.drivers.buttons.ButtonMouseDriver;
29import org.netbeans.jemmy.drivers.focus.APIFocusDriver;
30import org.netbeans.jemmy.drivers.focus.MouseFocusDriver;
31import org.netbeans.jemmy.drivers.lists.ChoiceDriver;
32import org.netbeans.jemmy.drivers.lists.JComboMouseDriver;
33import org.netbeans.jemmy.drivers.lists.JListMouseDriver;
34import org.netbeans.jemmy.drivers.lists.JTabMouseDriver;
35import org.netbeans.jemmy.drivers.lists.JTableHeaderDriver;
36import org.netbeans.jemmy.drivers.lists.ListKeyboardDriver;
37import org.netbeans.jemmy.drivers.menus.DefaultJMenuDriver;
38import org.netbeans.jemmy.drivers.menus.QueueJMenuDriver;
39import org.netbeans.jemmy.drivers.scrolling.JScrollBarDriver;
40import org.netbeans.jemmy.drivers.scrolling.JSliderDriver;
41import org.netbeans.jemmy.drivers.scrolling.JSplitPaneDriver;
42import org.netbeans.jemmy.drivers.scrolling.ScrollPaneDriver;
43import org.netbeans.jemmy.drivers.scrolling.ScrollbarDriver;
44import org.netbeans.jemmy.drivers.tables.JTableMouseDriver;
45import org.netbeans.jemmy.drivers.text.AWTTextKeyboardDriver;
46import org.netbeans.jemmy.drivers.text.SwingTextKeyboardDriver;
47import org.netbeans.jemmy.drivers.trees.JTreeMouseDriver;
48import org.netbeans.jemmy.drivers.windows.DefaultFrameDriver;
49import org.netbeans.jemmy.drivers.windows.DefaultInternalFrameDriver;
50import org.netbeans.jemmy.drivers.windows.DefaultWindowDriver;
51
52/**
53 * Installs all necessary drivers for Jemmy operators except low-level drivers
54 * which are installed by
55 * <a href="InputDriverInstaller.java">InputDriverInstaller</a>.
56 *
57 * @author Alexandre Iline(alexandre.iline@oracle.com)
58 */
59public class DefaultDriverInstaller extends ArrayDriverInstaller {
60
61    /**
62     * Constructs a DefaultDriverInstaller object.
63     *
64     * @param shortcutEvents Signals whether shortcut mode is used.
65     */
66    public DefaultDriverInstaller(boolean shortcutEvents) {
67        super(new String[]{
68            DriverManager.LIST_DRIVER_ID,
69            DriverManager.MULTISELLIST_DRIVER_ID,
70            DriverManager.TREE_DRIVER_ID,
71            DriverManager.TEXT_DRIVER_ID,
72            DriverManager.TEXT_DRIVER_ID,
73            DriverManager.SCROLL_DRIVER_ID,
74            DriverManager.SCROLL_DRIVER_ID,
75            DriverManager.SCROLL_DRIVER_ID,
76            DriverManager.SCROLL_DRIVER_ID,
77            DriverManager.SCROLL_DRIVER_ID,
78            DriverManager.SCROLL_DRIVER_ID,
79            DriverManager.BUTTON_DRIVER_ID,
80            DriverManager.LIST_DRIVER_ID,
81            DriverManager.LIST_DRIVER_ID,
82            DriverManager.MULTISELLIST_DRIVER_ID,
83            DriverManager.LIST_DRIVER_ID,
84            DriverManager.LIST_DRIVER_ID,
85            DriverManager.MULTISELLIST_DRIVER_ID,
86            DriverManager.TABLE_DRIVER_ID,
87            DriverManager.LIST_DRIVER_ID,
88            DriverManager.FRAME_DRIVER_ID,
89            DriverManager.WINDOW_DRIVER_ID,
90            DriverManager.FRAME_DRIVER_ID,
91            DriverManager.INTERNAL_FRAME_DRIVER_ID,
92            DriverManager.WINDOW_DRIVER_ID,
93            DriverManager.FOCUS_DRIVER_ID,
94            DriverManager.FOCUS_DRIVER_ID,
95            DriverManager.MENU_DRIVER_ID,
96            DriverManager.ORDEREDLIST_DRIVER_ID},
97                new Object[]{
98                    new JTreeMouseDriver(),
99                    new JTreeMouseDriver(),
100                    new JTreeMouseDriver(),
101                    new AWTTextKeyboardDriver(),
102                    new SwingTextKeyboardDriver(),
103                    new ScrollbarDriver(),
104                    new ScrollPaneDriver(),
105                    new JScrollBarDriver(),
106                    new JSplitPaneDriver(),
107                    new JSliderDriver(),
108                    createSpinnerDriver(),
109                    new ButtonMouseDriver(),
110                    new JTabMouseDriver(),
111                    new ListKeyboardDriver(),
112                    new ListKeyboardDriver(),
113                    new JComboMouseDriver(),
114                    new JListMouseDriver(),
115                    new JListMouseDriver(),
116                    new JTableMouseDriver(),
117                    new ChoiceDriver(),
118                    new DefaultFrameDriver(),
119                    new DefaultWindowDriver(),
120                    new DefaultInternalFrameDriver(),
121                    new DefaultInternalFrameDriver(),
122                    new DefaultInternalFrameDriver(),
123                    new APIFocusDriver(),
124                    new MouseFocusDriver(),
125                    (shortcutEvents ? new QueueJMenuDriver() : new DefaultJMenuDriver()),
126                    new JTableHeaderDriver()});
127    }
128
129    /**
130     * Constructs a DefaultDriverInstaller object with shortcut mode flag taken
131     * from {@code JemmyProperties}.
132     */
133    public DefaultDriverInstaller() {
134        this((JemmyProperties.getCurrentDispatchingModel()
135                & JemmyProperties.SHORTCUT_MODEL_MASK) != 0);
136    }
137
138    private static LightDriver createSpinnerDriver() {
139        if (System.getProperty("java.specification.version").compareTo("1.3") > 0) {
140            try {
141                return ((LightDriver) new ClassReference("org.netbeans.jemmy.drivers.scrolling.JSpinnerDriver").
142                        newInstance(null, null));
143            } catch (ClassNotFoundException e) {
144                JemmyProperties.getCurrentOutput().
145                        printErrLine("ATTENTION! you are using Jemmy built by Java earlier then 1.4, under "
146                                + "Java 1.4. \nImpossible to create JSpinnerDriver");
147                return createEmptyDriver();
148            } catch (Exception e) {
149                throw (new JemmyException("Impossible to create JSpinnerDriver although java version is "
150                        + System.getProperty("java.version"),
151                        e));
152            }
153        } else {
154            return createEmptyDriver();
155        }
156    }
157
158    private static LightDriver createEmptyDriver() {
159        return (new LightDriver() {
160            @Override
161            public String[] getSupported() {
162                return new String[]{Object.class.getName()};
163            }
164        });
165    }
166}
167