001 /* 002 * Created on Jul 30, 2007 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 005 * in compliance with the License. You may obtain a copy of the License at 006 * 007 * http://www.apache.org/licenses/LICENSE-2.0 008 * 009 * Unless required by applicable law or agreed to in writing, software distributed under the License 010 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 011 * or implied. See the License for the specific language governing permissions and limitations under 012 * the License. 013 * 014 * Copyright @2007-2010 the original author or authors. 015 */ 016 package org.fest.swing.finder; 017 018 import java.awt.Dialog; 019 import java.awt.Frame; 020 021 import org.fest.swing.core.GenericTypeMatcher; 022 023 /** 024 * <p> 025 * Understands lookup of <code>{@link Frame}</code>s and <code>{@link Dialog}</code>s. Lookups are performed till 026 * the window of interest is found, or until the given time to perform the lookup is over. The default lookup time is 5 027 * seconds. 028 * </p> 029 * <p> 030 * <code>{@link WindowFinder}</code> is the "entry point" of a fluent interface to look up frames and 031 * dialogs. This example illustrates finding a <code>{@link Frame}</code> by name, using the default lookup time (5 032 * seconds): 033 * 034 * <pre> 035 * FrameFixture frame = WindowFinder.findFrame("someFrame").using(robot); 036 * </pre> 037 * 038 * </p> 039 * <p> 040 * Where <code>robot</code> is an instance of <code>{@link org.fest.swing.core.Robot}</code>. 041 * </p> 042 * <p> 043 * This example shows how to find a <code>{@link Dialog}</code> by type using a lookup time of 10 seconds: 044 * 045 * <pre> 046 * DialogFixture dialog = WindowFinder.findDialog(MyDialog.class).withTimeout(10000).using(robot); 047 * </pre> 048 * 049 * We can also specify the time unit: 050 * 051 * <pre> 052 * DialogFixture dialog = WindowFinder.findDialog(MyDialog.class).withTimeout(10, {@link java.util.concurrent.TimeUnit#SECONDS SECONDS}).using(robot); 053 * </pre> 054 * 055 * </p> 056 * <p> 057 * This example shows how to use a <code>{@link GenericTypeMatcher}</code> to find a <code>{@link Frame}</code> with 058 * title "Hello": 059 * 060 * <pre> 061 * GenericTypeMatcher<JFrame> matcher = new GenericTypeMatcher<JFrame>() { 062 * protected boolean isMatching(JFrame frame) { 063 * return "hello".equals(frame.getTitle()); 064 * } 065 * }; 066 * FrameFixture frame = WindowFinder.findFrame(matcher).using(robot); 067 * </pre> 068 * 069 * </p> 070 * 071 * @author Alex Ruiz 072 * @author Yvonne Wang 073 */ 074 public final class WindowFinder { 075 076 private WindowFinder() {} 077 078 /** 079 * Creates a new <code>{@link FrameFinder}</code> capable of looking up a <code>{@link Frame}</code> by name. 080 * @param frameName the name of the frame to find. 081 * @return the created finder. 082 */ 083 public static FrameFinder findFrame(String frameName) { 084 return new FrameFinder(frameName); 085 } 086 087 /** 088 * Creates a new <code>{@link FrameFinder}</code> capable of looking up a <code>{@link Frame}</code> by type. 089 * @param frameType the type of the frame to find. 090 * @return the created finder. 091 */ 092 public static FrameFinder findFrame(Class<? extends Frame> frameType) { 093 return new FrameFinder(frameType); 094 } 095 096 /** 097 * Creates a new <code>{@link FrameFinder}</code> capable of looking up a <code>{@link Frame}</code> using the 098 * provided matcher. 099 * @param matcher the matcher to use to find a frame. 100 * @return the created finder. 101 */ 102 public static FrameFinder findFrame(GenericTypeMatcher<? extends Frame> matcher) { 103 return new FrameFinder(matcher); 104 } 105 106 /** 107 * Creates a new <code>{@link DialogFinder}</code> capable of looking up a <code>{@link Dialog}</code> by name. 108 * @param dialogName the name of the dialog to find. 109 * @return the created finder. 110 */ 111 public static DialogFinder findDialog(String dialogName) { 112 return new DialogFinder(dialogName); 113 } 114 115 /** 116 * Creates a new <code>{@link DialogFinder}</code> capable of looking up a <code>{@link Dialog}</code> by type. 117 * @param dialogType the type of the dialog to find. 118 * @return the created finder. 119 */ 120 public static DialogFinder findDialog(Class<? extends Dialog> dialogType) { 121 return new DialogFinder(dialogType); 122 } 123 124 /** 125 * Creates a new <code>{@link DialogFinder}</code> capable of looking up a <code>{@link Dialog}</code> using the 126 * provided matcher. 127 * @param matcher the matcher to use to find a dialog. 128 * @return the created finder. 129 */ 130 public static DialogFinder findDialog(GenericTypeMatcher<? extends Dialog> matcher) { 131 return new DialogFinder(matcher); 132 } 133 }