APIDriverInstaller.java revision 13978:1993af50385d
1181834Sroberto/*
2181834Sroberto * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
3181834Sroberto * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4181834Sroberto *
5181834Sroberto * This code is free software; you can redistribute it and/or modify it
6290001Sglebius * under the terms of the GNU General Public License version 2 only, as
7290001Sglebius * published by the Free Software Foundation.
8290001Sglebius *
9290001Sglebius * This code is distributed in the hope that it will be useful, but WITHOUT
10181834Sroberto * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11290001Sglebius * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12290001Sglebius * version 2 for more details (a copy is included in the LICENSE file that
13290001Sglebius * accompanied this code).
14290001Sglebius *
15290001Sglebius * You should have received a copy of the GNU General Public License version
16181834Sroberto * 2 along with this work; if not, write to the Free Software Foundation,
17181834Sroberto * 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.JTabAPIDriver;
35import org.netbeans.jemmy.drivers.lists.JTableHeaderDriver;
36import org.netbeans.jemmy.drivers.lists.ListKeyboardDriver;
37import org.netbeans.jemmy.drivers.menus.AppleMenuDriver;
38import org.netbeans.jemmy.drivers.menus.DefaultJMenuDriver;
39import org.netbeans.jemmy.drivers.menus.QueueJMenuDriver;
40import org.netbeans.jemmy.drivers.scrolling.JScrollBarAPIDriver;
41import org.netbeans.jemmy.drivers.scrolling.JSliderAPIDriver;
42import org.netbeans.jemmy.drivers.scrolling.JSplitPaneDriver;
43import org.netbeans.jemmy.drivers.scrolling.ScrollPaneDriver;
44import org.netbeans.jemmy.drivers.scrolling.ScrollbarDriver;
45import org.netbeans.jemmy.drivers.tables.JTableMouseDriver;
46import org.netbeans.jemmy.drivers.text.AWTTextKeyboardDriver;
47import org.netbeans.jemmy.drivers.text.SwingTextKeyboardDriver;
48import org.netbeans.jemmy.drivers.trees.JTreeAPIDriver;
49import org.netbeans.jemmy.drivers.windows.DefaultFrameDriver;
50import org.netbeans.jemmy.drivers.windows.DefaultInternalFrameDriver;
51import org.netbeans.jemmy.drivers.windows.DefaultWindowDriver;
52
53/**
54 * Installs all necessary drivers for Jemmy operators except low-level drivers
55 * which are installed by
56 * <a href="InputDriverInstaller.java">InputDriverInstaller</a>.
57 *
58 * @author Alexandre Iline(alexandre.iline@oracle.com)
59 */
60public class APIDriverInstaller extends ArrayDriverInstaller {
61
62    /**
63     * Constructs a DefaultDriverInstaller object.
64     *
65     * @param shortcutEvents Signals whether shortcut mode is used.
66     */
67    public APIDriverInstaller(boolean shortcutEvents) {
68        super(new String[]{
69            DriverManager.LIST_DRIVER_ID,
70            DriverManager.MULTISELLIST_DRIVER_ID,
71            DriverManager.TREE_DRIVER_ID,
72            DriverManager.TEXT_DRIVER_ID,
73            DriverManager.TEXT_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.SCROLL_DRIVER_ID,
80            DriverManager.BUTTON_DRIVER_ID,
81            DriverManager.LIST_DRIVER_ID,
82            DriverManager.LIST_DRIVER_ID,
83            DriverManager.MULTISELLIST_DRIVER_ID,
84            DriverManager.LIST_DRIVER_ID,
85            DriverManager.LIST_DRIVER_ID,
86            DriverManager.MULTISELLIST_DRIVER_ID,
87            DriverManager.TABLE_DRIVER_ID,
88            DriverManager.LIST_DRIVER_ID,
89            DriverManager.FRAME_DRIVER_ID,
90            DriverManager.WINDOW_DRIVER_ID,
91            DriverManager.FRAME_DRIVER_ID,
92            DriverManager.INTERNAL_FRAME_DRIVER_ID,
93            DriverManager.WINDOW_DRIVER_ID,
94            DriverManager.FOCUS_DRIVER_ID,
95            DriverManager.FOCUS_DRIVER_ID,
96            DriverManager.MENU_DRIVER_ID,
97            DriverManager.MENU_DRIVER_ID,
98            DriverManager.ORDEREDLIST_DRIVER_ID},
99                new Object[]{
100                    new JTreeAPIDriver(),
101                    new JTreeAPIDriver(),
102                    new JTreeAPIDriver(),
103                    new AWTTextKeyboardDriver(),
104                    new SwingTextKeyboardDriver(),
105                    new ScrollbarDriver(),
106                    new ScrollPaneDriver(),
107                    new JScrollBarAPIDriver(),
108                    new JSplitPaneDriver(),
109                    new JSliderAPIDriver(),
110                    createSpinnerDriver(),
111                    new ButtonMouseDriver(),
112                    new JTabAPIDriver(),
113                    new ListKeyboardDriver(),
114                    new ListKeyboardDriver(),
115                    new JComboMouseDriver(),
116                    new JListMouseDriver(),
117                    new JListMouseDriver(),
118                    new JTableMouseDriver(),
119                    new ChoiceDriver(),
120                    new DefaultFrameDriver(),
121                    new DefaultWindowDriver(),
122                    new DefaultInternalFrameDriver(),
123                    new DefaultInternalFrameDriver(),
124                    new DefaultInternalFrameDriver(),
125                    new APIFocusDriver(),
126                    new MouseFocusDriver(),
127                    (shortcutEvents ? new QueueJMenuDriver() : new DefaultJMenuDriver()),
128                    ((System.getProperty("apple.laf.useScreenMenuBar") != null
129                    && System.getProperty("apple.laf.useScreenMenuBar").equals("true")) ? new AppleMenuDriver()
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     */
138    public APIDriverInstaller() {
139        this((JemmyProperties.getCurrentDispatchingModel()
140                & JemmyProperties.SHORTCUT_MODEL_MASK) != 0);
141    }
142
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
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