001 /* 002 * Created on Sep 21, 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.core; 017 018 019 import static org.fest.swing.core.MouseButton.*; 020 import static org.fest.util.Strings.concat; 021 022 /** 023 * Understands information about clicking a mouse button. 024 * <p> 025 * Examples: 026 * </p> 027 * <p> 028 * Specify that the right button should be clicked once: 029 * <pre> 030 * // import static org.fest.swing.fixture.MouseClickInfo.*; 031 * MouseClickInfo i = rightButton(); 032 * </pre> 033 * </p> 034 * <p> 035 * Specify that the left button should be clicked two times (similar to double-click): 036 * <pre> 037 * // import static org.fest.swing.fixture.MouseClickInfo.*; 038 * MouseClickInfo i = leftButton().times(2); 039 * </pre> 040 * </p> 041 * 042 * @author Alex Ruiz 043 */ 044 public final class MouseClickInfo { 045 046 private final MouseButton button; 047 private int times; 048 049 /** 050 * Specifies that the left button should be clicked once. 051 * @return the created click info. 052 */ 053 public static MouseClickInfo leftButton() { 054 return button(LEFT_BUTTON); 055 } 056 057 /** 058 * Specifies that the middle button should be clicked once. 059 * @return the created click info. 060 */ 061 public static MouseClickInfo middleButton() { 062 return button(MIDDLE_BUTTON); 063 } 064 065 /** 066 * Specifies that the right button should be clicked once. 067 * @return the created click info. 068 */ 069 public static MouseClickInfo rightButton() { 070 return button(RIGHT_BUTTON); 071 } 072 073 /** 074 * Specifies that the given button should be clicked once. 075 * @param button the mouse button to click. 076 * @return the created click info. 077 * @throws NullPointerException if <code>button</code> is <code>null</code>. 078 */ 079 public static MouseClickInfo button(MouseButton button) { 080 return new MouseClickInfo(button, 1); 081 } 082 083 private MouseClickInfo(MouseButton button, int times) { 084 if (button == null) throw new NullPointerException("The MouseButton should not be null"); 085 this.button = button; 086 this.times = times; 087 } 088 089 /** 090 * Returns the button to click. 091 * @return the button to click. 092 */ 093 public MouseButton button() { return button; } 094 095 /** 096 * Returns how many times the <code>{@link #button() mouse button}</code> should be clicked. 097 * @return how many times the <code>{@link #button() mouse button}</code> should be clicked. 098 */ 099 public int times() { return times; } 100 101 /** 102 * Specifies how many times the mouse button should be clicked. 103 * @param newTimes the specified number of times to click the mouse button. 104 * @return this object. 105 */ 106 public MouseClickInfo times(int newTimes) { 107 times = newTimes; 108 return this; 109 } 110 111 /** @see java.lang.Object#toString() */ 112 @Override public String toString() { 113 return concat( 114 getClass().getSimpleName(), "[", 115 "button=", button, ",", 116 "times=", String.valueOf(times), "]"); 117 } 118 }