View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
6    */
7   package org.mule.util.timer;
8   
9   import java.util.ArrayList;
10  import java.util.List;
11  import java.util.TimerTask;
12  
13  /**
14   * <code>EventTimerTask</code> is a task that causes TimeEvent to be fired to
15   * listening objects when a specific number of milliseconds have passed. This
16   * implementation is based on the java.util.TimerTask.
17   */
18  public class EventTimerTask extends TimerTask
19  {
20      /**
21       * A list of listeners on this task
22       */
23      private List listeners = null;
24  
25      /**
26       * The name of the task
27       */
28      private String name = null;
29  
30      /**
31       * Determines if the task has been started
32       */
33      private boolean started = true;
34  
35      /**
36       * Constructs a EventTimeTask and registers a listener with it
37       * 
38       * @param listener the listener to register
39       */
40      public EventTimerTask(TimeEventListener listener)
41      {
42          super();
43          addListener(listener);
44          this.name = "EventTimerTask." + hashCode();
45      }
46  
47      /**
48       * Constructs a EventTimeTask and registers a listener with it
49       * 
50       * @param listener the listener to register
51       * @param name the name for the task
52       */
53      public EventTimerTask(TimeEventListener listener, String name)
54      {
55          super();
56          addListener(listener);
57          this.name = name;
58      }
59  
60      /**
61       * The action to be performed by this timer task. The fireTime event method is
62       * called.
63       */
64      public void run()
65      {
66  
67          TimeEvent event = new TimeEvent(this, getName(), scheduledExecutionTime());
68          fireTimerEvent(event);
69      }
70  
71      /**
72       * Gets the task name (this is also the timer thread name)
73       * 
74       * @return the task name
75       */
76      public String getName()
77      {
78          return name;
79      }
80  
81      public void removeListener(TimeEventListener listener)
82      {
83          if (listeners != null && listeners.contains(listener))
84          {
85              listeners.remove(listener);
86          }
87      }
88  
89      public void removeAllListeners()
90      {
91          listeners = new ArrayList();
92      }
93  
94      public void addListener(TimeEventListener listener)
95      {
96          if (listeners == null)
97          {
98              listeners = new ArrayList();
99              listeners.add(listener);
100         }
101         else if (!listeners.contains(listener))
102         {
103             listeners.add(listener);
104         }
105     }
106 
107     protected void fireTimerEvent(TimeEvent event)
108     {
109         if (listeners != null && started)
110         {
111             int count = listeners.size();
112             for (int i = 0; i < count; i++)
113             {
114                 ((TimeEventListener) listeners.get(i)).timeExpired(event);
115             }
116         }
117     }
118 
119     public void stop()
120     {
121         started = false;
122     }
123 
124     public void start()
125     {
126         started = true;
127     }
128 
129     public boolean isStarted()
130     {
131         return started;
132     }
133 }