1 /***
2 * Redistribution and use in source and binary forms, with or without
3 * modification, are permitted provided that the following conditions are
4 * met :
5 *
6 * . Redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer.
8 *
9 * . Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * . The name of the author may not be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
20 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
24 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
25 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE.
27 *
28 * $Id$
29 */
30
31 package palmed.edit.scrollbar;
32
33 import java.util.Timer;
34 import java.util.TimerTask;
35
36 /***
37 * This class preventS a timer to be reinitialized when already running.
38 *
39 * @author Mathieu Champlon
40 * @version $Revision$ $Date$
41 */
42 public final class RepeatableTimer
43 {
44 /***
45 * The delay to start the timer when activated.
46 */
47 private static final int DELAY = 500;
48 /***
49 * The period to trigger the timer event.
50 */
51 private static final int PERIOD = 100;
52 /***
53 * The timer.
54 */
55 private final Timer timer_;
56 /***
57 * The scrollbar timer task.
58 */
59 private TimerTask task_;
60
61 /***
62 * Create a scrolling timer.
63 */
64 public RepeatableTimer()
65 {
66 timer_ = new Timer();
67 }
68
69 /***
70 * Start the timer.
71 * <p>
72 * Calling this method again without calling stop has no effect.
73 *
74 * @param task the task to execute
75 */
76 public void start( final TimerTask task )
77 {
78 if( task_ == null )
79 {
80 task_ = task;
81 timer_.scheduleAtFixedRate( task_, DELAY, PERIOD );
82 }
83 }
84
85 /***
86 * Stop the timer.
87 * <p>
88 * Calling this method twice has no effect.
89 */
90 public void stop()
91 {
92 if( task_ != null )
93 task_.cancel();
94 task_ = null;
95 }
96 }