TrialListenerManager.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.explorer;
24
25import java.awt.AWTEvent;
26import java.awt.Component;
27import java.awt.event.KeyEvent;
28import java.awt.event.KeyListener;
29import java.awt.event.MouseEvent;
30import java.awt.event.MouseListener;
31import java.awt.event.MouseMotionListener;
32
33import org.netbeans.jemmy.JemmyProperties;
34import org.netbeans.jemmy.Outputable;
35import org.netbeans.jemmy.QueueTool;
36import org.netbeans.jemmy.TestOut;
37
38/**
39 * Auxiliary class to find an event sequence which should be posted to reproduce
40 * user actions.
41 *
42 * @author Alexandre Iline (alexandre.iline@oracle.com)
43 *
44 */
45public class TrialListenerManager implements Outputable {
46
47    Component comp;
48    TrialMouseListener mListener;
49    TrialMouseMotionListener mmListener;
50    TrialKeyListener kListener;
51    TestOut output;
52
53    /**
54     * Contructor.
55     *
56     * @param comp Component to display event sequence for.
57     */
58    public TrialListenerManager(Component comp) {
59        this.comp = comp;
60        mListener = new TrialMouseListener();
61        mmListener = new TrialMouseMotionListener();
62        kListener = new TrialKeyListener();
63        output = JemmyProperties.getCurrentOutput();
64    }
65
66    @Override
67    public void setOutput(TestOut output) {
68        this.output = output;
69    }
70
71    @Override
72    public TestOut getOutput() {
73        return output;
74    }
75
76    /**
77     * Removes mouse listener.
78     *
79     * @see #addMouseListener
80     */
81    public void removeMouseListener() {
82        comp.removeMouseListener(mListener);
83    }
84
85    /**
86     * Adds mouse listener.
87     *
88     * @see #removeMouseListener
89     */
90    public void addMouseListener() {
91        removeMouseListener();
92        comp.addMouseListener(mListener);
93    }
94
95    /**
96     * Removes mouse motion listener.
97     *
98     * @see #addMouseMotionListener
99     */
100    public void removeMouseMotionListener() {
101        comp.removeMouseMotionListener(mmListener);
102    }
103
104    /**
105     * Adds mouse motion listener.
106     *
107     * @see #removeMouseMotionListener
108     */
109    public void addMouseMotionListener() {
110        removeMouseMotionListener();
111        comp.addMouseMotionListener(mmListener);
112    }
113
114    /**
115     * Removes key listener.
116     *
117     * @see #addKeyListener
118     */
119    public void removeKeyListener() {
120        comp.removeKeyListener(kListener);
121    }
122
123    /**
124     * Adds key listener.
125     *
126     * @see #removeKeyListener
127     */
128    public void addKeyListener() {
129        removeKeyListener();
130        comp.addKeyListener(kListener);
131    }
132
133    void printEvent(final AWTEvent event) {
134        // if event != null run toString in dispatch thread
135        String eventToString = new QueueTool().invokeSmoothly(
136                new QueueTool.QueueAction<String>("event.toString()") {
137            @Override
138            public String launch() {
139                return event.toString();
140            }
141        }
142        );
143        output.printLine(eventToString);
144    }
145
146    private class TrialMouseListener implements MouseListener {
147
148        @Override
149        public void mouseClicked(MouseEvent e) {
150            printEvent(e);
151        }
152
153        @Override
154        public void mouseEntered(MouseEvent e) {
155            printEvent(e);
156        }
157
158        @Override
159        public void mouseExited(MouseEvent e) {
160            printEvent(e);
161        }
162
163        @Override
164        public void mousePressed(MouseEvent e) {
165            printEvent(e);
166        }
167
168        @Override
169        public void mouseReleased(MouseEvent e) {
170            printEvent(e);
171        }
172    }
173
174    private class TrialMouseMotionListener implements MouseMotionListener {
175
176        @Override
177        public void mouseDragged(MouseEvent e) {
178            printEvent(e);
179        }
180
181        @Override
182        public void mouseMoved(MouseEvent e) {
183            printEvent(e);
184        }
185    }
186
187    private class TrialKeyListener implements KeyListener {
188
189        @Override
190        public void keyPressed(KeyEvent e) {
191            printEvent(e);
192        }
193
194        @Override
195        public void keyReleased(KeyEvent e) {
196            printEvent(e);
197        }
198
199        @Override
200        public void keyTyped(KeyEvent e) {
201            printEvent(e);
202        }
203    }
204}
205