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. 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.focus;
26 
27 import org.netbeans.jemmy.QueueTool;
28 import org.netbeans.jemmy.drivers.DriverManager;
29 import org.netbeans.jemmy.drivers.FocusDriver;
30 import org.netbeans.jemmy.drivers.LightSupportiveDriver;
31 import org.netbeans.jemmy.operators.ComponentOperator;
32 import org.netbeans.jemmy.operators.Operator;
33 
34 public class MouseFocusDriver extends LightSupportiveDriver implements FocusDriver {
35 
36     private QueueTool queueTool;
37 
MouseFocusDriver()38     public MouseFocusDriver() {
39         super(new String[]{
40             "org.netbeans.jemmy.operators.JListOperator",
41             "org.netbeans.jemmy.operators.JScrollBarOperator",
42             "org.netbeans.jemmy.operators.JSliderOperator",
43             "org.netbeans.jemmy.operators.JTableOperator",
44             "org.netbeans.jemmy.operators.JTextComponentOperator",
45             "org.netbeans.jemmy.operators.JTreeOperator",
46             "org.netbeans.jemmy.operators.ListOperator",
47             "org.netbeans.jemmy.operators.ScrollbarOperator",
48             "org.netbeans.jemmy.operators.TextAreaOperator",
49             "org.netbeans.jemmy.operators.TextComponentOperator",
50             "org.netbeans.jemmy.operators.TextFieldOperator"});
51         queueTool = new QueueTool();
52     }
53 
54     @Override
giveFocus(final ComponentOperator oper)55     public void giveFocus(final ComponentOperator oper) {
56         if (!oper.hasFocus()) {
57             queueTool.invokeSmoothly(new QueueTool.QueueAction<Void>("Mouse click to get focus") {
58                 @Override
59                 public Void launch() {
60                     DriverManager.getMouseDriver(oper).
61                             clickMouse(oper, oper.getCenterXForClick(), oper.getCenterYForClick(),
62                                     1, Operator.getDefaultMouseButton(), 0,
63                                     oper.getTimeouts().create("ComponentOperator.MouseClickTimeout"));
64                     return null;
65                 }
66             });
67             oper.waitHasFocus();
68         }
69     }
70 }
71