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 */ 23 package org.netbeans.jemmy.operators; 24 25 import java.awt.Component; 26 import java.awt.Container; 27 28 import javax.accessibility.AccessibleContext; 29 import javax.swing.JFrame; 30 import javax.swing.JLayeredPane; 31 import javax.swing.JMenuBar; 32 import javax.swing.JRootPane; 33 34 import org.netbeans.jemmy.ComponentChooser; 35 import org.netbeans.jemmy.FrameWaiter; 36 import org.netbeans.jemmy.JemmyProperties; 37 38 /** 39 * <BR><BR>Timeouts used: <BR> 40 * FrameWaiter.WaitFrameTimeout - time to wait frame displayed <BR> 41 * FrameWaiter.AfterFrameTimeout - time to sleep after frame has been dispayed 42 * <BR>. 43 * 44 * @see org.netbeans.jemmy.Timeouts 45 * 46 * @author Alexandre Iline (alexandre.iline@oracle.com) 47 * 48 */ 49 public class JFrameOperator extends FrameOperator { 50 51 /** 52 * Constructor. 53 * 54 * @param w window 55 */ 56 public JFrameOperator(JFrame w) { 57 super(w); 58 } 59 60 /** 61 * Constructs a JFrameOperator object. 62 * 63 * @param chooser a component chooser specifying searching criteria. 64 * @param index an index between appropriate ones. 65 * @param env an operator to copy environment from. 66 */ 67 public JFrameOperator(ComponentChooser chooser, int index, Operator env) { 68 this((JFrame) waitFrame(new JFrameFinder(chooser), 69 index, 70 env.getTimeouts(), 71 env.getOutput())); 72 copyEnvironment(env); 73 } 74 75 /** 76 * Constructs a JFrameOperator object. 77 * 78 * @param chooser a component chooser specifying searching criteria. 79 * @param index an index between appropriate ones. 80 */ 81 public JFrameOperator(ComponentChooser chooser, int index) { 82 this(chooser, index, Operator.getEnvironmentOperator()); 83 } 84 85 /** 86 * Constructs a JFrameOperator object. 87 * 88 * @param chooser a component chooser specifying searching criteria. 89 */ 90 public JFrameOperator(ComponentChooser chooser) { 91 this(chooser, 0); 92 } 93 94 /** 95 * Constructor. Waits for the frame with "title" subtitle. Constructor can 96 * be used in complicated cases when output or timeouts should differ from 97 * default. 98 * 99 * @param title a window title 100 * @param index Ordinal component index. 101 * @param env an operator to copy environment from. 102 * @see ComponentOperator#isCaptionEqual(String, String, boolean, boolean) 103 * 104 */ 105 public JFrameOperator(String title, int index, Operator env) { 106 this(new JFrameFinder(new FrameByTitleFinder(title, 107 env.getComparator())), 108 index, env); 109 } 110 111 /** 112 * Constructor. Waits for the frame with "title" subtitle. Uses current 113 * timeouts and output values. 114 * 115 * @param title a window title 116 * @param index Ordinal component index. 117 * @see ComponentOperator#isCaptionEqual(String, String, boolean, boolean) 118 * @see JemmyProperties#getCurrentTimeouts() 119 * @see JemmyProperties#getCurrentOutput() 120 * 121 */ 122 public JFrameOperator(String title, int index) { 123 this(title, index, 124 ComponentOperator.getEnvironmentOperator()); 125 } 126 127 /** 128 * Constructor. Waits for the frame with "title" subtitle. Uses current 129 * timeouts and output values. 130 * 131 * @param title a window title 132 * @see ComponentOperator#isCaptionEqual(String, String, boolean, boolean) 133 * @see JemmyProperties#getCurrentTimeouts() 134 * @see JemmyProperties#getCurrentOutput() 135 * 136 */ 137 public JFrameOperator(String title) { 138 this(title, 0); 139 } 140 141 /** 142 * Constructor. Waits for the index'th frame. Uses current timeout and 143 * output for waiting and to init operator. 144 * 145 * @param index Ordinal component index. 146 * 147 */ 148 public JFrameOperator(int index) { 149 this((JFrame) waitFrame(new JFrameFinder(), 150 index, 151 ComponentOperator.getEnvironmentOperator().getTimeouts(), 152 ComponentOperator.getEnvironmentOperator().getOutput())); 153 copyEnvironment(ComponentOperator.getEnvironmentOperator()); 154 } 155 156 /** 157 * Constructor. Waits for the first frame. Uses current timeout and output 158 * for waiting and to init operator. 159 * 160 */ 161 public JFrameOperator() { 162 this(0); 163 } 164 165 /** 166 * Searches an index'th frame. 167 * 168 * @param chooser a component chooser specifying searching criteria. 169 * @param index an index between appropriate ones. 170 * @return JFrame instance or null if component was not found. 171 */ 172 public static JFrame findJFrame(ComponentChooser chooser, int index) { 173 return (JFrame) FrameWaiter.getFrame(new JFrameFinder(chooser), index); 174 } 175 176 /** 177 * Searches a frame. 178 * 179 * @param chooser a component chooser specifying searching criteria. 180 * @return JFrame instance or null if component was not found. 181 */ 182 public static JFrame findJFrame(ComponentChooser chooser) { 183 return findJFrame(chooser, 0); 184 } 185 186 /** 187 * Searches an index'th frame by title. 188 * 189 * @param title Frame title 190 * @param ce Compare exactly. If true, text can be a substring of caption. 191 * @param cc Compare case sensitively. If true, both text and caption are 192 * @param index an index between appropriate ones. 193 * @return JFrame instance or null if component was not found. 194 */ 195 public static JFrame findJFrame(String title, boolean ce, boolean cc, int index) { 196 return ((JFrame) FrameWaiter. 197 getFrame(new JFrameFinder(new FrameByTitleFinder(title, 198 new DefaultStringComparator(ce, cc))), 199 index)); 200 } 201 202 /** 203 * Searches a frame by title. 204 * 205 * @param title Frame title 206 * @param ce Compare exactly. If true, text can be a substring of caption. 207 * @param cc Compare case sensitively. If true, both text and caption are 208 * @return JFrame instance or null if component was not found. 209 */ 210 public static JFrame findJFrame(String title, boolean ce, boolean cc) { 211 return findJFrame(title, ce, cc, 0); 212 } 213 214 /** 215 * Waits an index'th frame. 216 * 217 * @param chooser a component chooser specifying searching criteria. 218 * @param index an index between appropriate ones. 219 * @return JFrame instance or null if component was not found. 220 * 221 */ 222 public static JFrame waitJFrame(ComponentChooser chooser, int index) { 223 return ((JFrame) waitFrame(new JFrameFinder(chooser), index, 224 JemmyProperties.getCurrentTimeouts(), 225 JemmyProperties.getCurrentOutput())); 226 } 227 228 /** 229 * Waits a frame. 230 * 231 * @param chooser a component chooser specifying searching criteria. 232 * @return JFrame instance or null if component was not found. 233 * 234 */ 235 public static JFrame waitJFrame(ComponentChooser chooser) { 236 return waitJFrame(chooser, 0); 237 } 238 239 /** 240 * Waits an index'th frame by title. 241 * 242 * @param title Frame title 243 * @param ce Compare exactly. If true, text can be a substring of caption. 244 * @param cc Compare case sensitively. If true, both text and caption are 245 * @param index an index between appropriate ones. 246 * @return JFrame instance or null if component was not found. 247 * 248 */ 249 public static JFrame waitJFrame(String title, boolean ce, boolean cc, int index) { 250 try { 251 return ((JFrame) (new FrameWaiter()). 252 waitFrame(new JFrameFinder(new FrameByTitleFinder(title, 253 new DefaultStringComparator(ce, cc))), 254 index)); 255 } catch (InterruptedException e) { 256 JemmyProperties.getCurrentOutput().printStackTrace(e); 257 return null; 258 } 259 } 260 261 /** 262 * Waits a frame by title. 263 * 264 * @param title Frame title 265 * @param ce Compare exactly. If true, text can be a substring of caption. 266 * @param cc Compare case sensitively. If true, both text and caption are 267 * @return JFrame instance or null if component was not found. 268 * 269 */ 270 public static JFrame waitJFrame(String title, boolean ce, boolean cc) { 271 return waitJFrame(title, ce, cc, 0); 272 } 273 274 //////////////////////////////////////////////////////// 275 //Mapping // 276 /** 277 * Maps {@code JFrame.getAccessibleContext()} through queue 278 */ 279 public AccessibleContext getAccessibleContext() { 280 return (runMapping(new MapAction<AccessibleContext>("getAccessibleContext") { 281 @Override 282 public AccessibleContext map() { 283 return getSource().getAccessibleContext(); 284 } 285 })); 286 } 287 288 /** 289 * Maps {@code JFrame.getContentPane()} through queue 290 */ 291 public Container getContentPane() { 292 return (runMapping(new MapAction<Container>("getContentPane") { 293 @Override 294 public Container map() { 295 return ((JFrame) getSource()).getContentPane(); 296 } 297 })); 298 } 299 300 /** 301 * Maps {@code JFrame.getDefaultCloseOperation()} through queue 302 */ 303 public int getDefaultCloseOperation() { 304 return (runMapping(new MapIntegerAction("getDefaultCloseOperation") { 305 @Override 306 public int map() { 307 return ((JFrame) getSource()).getDefaultCloseOperation(); 308 } 309 })); 310 } 311 312 /** 313 * Maps {@code JFrame.getGlassPane()} through queue 314 */ 315 public Component getGlassPane() { 316 return (runMapping(new MapAction<Component>("getGlassPane") { 317 @Override 318 public Component map() { 319 return ((JFrame) getSource()).getGlassPane(); 320 } 321 })); 322 } 323 324 /** 325 * Maps {@code JFrame.getJMenuBar()} through queue 326 */ 327 public JMenuBar getJMenuBar() { 328 return (runMapping(new MapAction<JMenuBar>("getJMenuBar") { 329 @Override 330 public JMenuBar map() { 331 return ((JFrame) getSource()).getJMenuBar(); 332 } 333 })); 334 } 335 336 /** 337 * Maps {@code JFrame.getLayeredPane()} through queue 338 */ 339 public JLayeredPane getLayeredPane() { 340 return (runMapping(new MapAction<JLayeredPane>("getLayeredPane") { 341 @Override 342 public JLayeredPane map() { 343 return ((JFrame) getSource()).getLayeredPane(); 344 } 345 })); 346 } 347 348 /** 349 * Maps {@code JFrame.getRootPane()} through queue 350 */ 351 public JRootPane getRootPane() { 352 return (runMapping(new MapAction<JRootPane>("getRootPane") { 353 @Override 354 public JRootPane map() { 355 return ((JFrame) getSource()).getRootPane(); 356 } 357 })); 358 } 359 360 /** 361 * Maps {@code JFrame.setContentPane(Container)} through queue 362 */ 363 public void setContentPane(final Container container) { 364 runMapping(new MapVoidAction("setContentPane") { 365 @Override 366 public void map() { 367 ((JFrame) getSource()).setContentPane(container); 368 } 369 }); 370 } 371 372 /** 373 * Maps {@code JFrame.setDefaultCloseOperation(int)} through queue 374 */ 375 public void setDefaultCloseOperation(final int i) { 376 runMapping(new MapVoidAction("setDefaultCloseOperation") { 377 @Override 378 public void map() { 379 ((JFrame) getSource()).setDefaultCloseOperation(i); 380 } 381 }); 382 } 383 384 /** 385 * Maps {@code JFrame.setGlassPane(Component)} through queue 386 */ 387 public void setGlassPane(final Component component) { 388 runMapping(new MapVoidAction("setGlassPane") { 389 @Override 390 public void map() { 391 ((JFrame) getSource()).setGlassPane(component); 392 } 393 }); 394 } 395 396 /** 397 * Maps {@code JFrame.setJMenuBar(JMenuBar)} through queue 398 */ 399 public void setJMenuBar(final JMenuBar jMenuBar) { 400 runMapping(new MapVoidAction("setJMenuBar") { 401 @Override 402 public void map() { 403 ((JFrame) getSource()).setJMenuBar(jMenuBar); 404 } 405 }); 406 } 407 408 /** 409 * Maps {@code JFrame.setLayeredPane(JLayeredPane)} through queue 410 */ 411 public void setLayeredPane(final JLayeredPane jLayeredPane) { 412 runMapping(new MapVoidAction("setLayeredPane") { 413 @Override 414 public void map() { 415 ((JFrame) getSource()).setLayeredPane(jLayeredPane); 416 } 417 }); 418 } 419 420 //End of mapping // 421 //////////////////////////////////////////////////////// 422 /** 423 * Checks component type. 424 */ 425 public static class JFrameFinder extends Finder { 426 427 /** 428 * Constructs JFrameFinder. 429 * 430 * @param sf other searching criteria. 431 */ 432 public JFrameFinder(ComponentChooser sf) { 433 super(JFrame.class, sf); 434 } 435 436 /** 437 * Constructs JFrameFinder. 438 */ 439 public JFrameFinder() { 440 super(JFrame.class); 441 } 442 } 443 }