1 /*
2 * Copyright (c) 1998-2002 The Jgroup Team.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU Lesser General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
16 *
17 */
18
19 package jgroup.relacs.mss;
20
21 import java.util.concurrent.Future;
22
23
24 /**
25 * The <code>ScheduledEvent</code> class
26 *
27 * @author Alberto Montresor
28 * @author Hein Meling
29 * @since Jgroup 0.1
30 */
31 final class ScheduledEvent
32 implements Comparable, MssTag
33 {
34
35 ////////////////////////////////////////////////////////////////////////////////////////////
36 // Fields
37 ////////////////////////////////////////////////////////////////////////////////////////////
38
39 /** Timeout value */
40 private long timeout;
41
42 /** Tag associated to this event */
43 private byte tag;
44
45 /** Object associated to this event */
46 private Object obj;
47
48 private Future<?> handle;
49
50
51 ////////////////////////////////////////////////////////////////////////////////////////////
52 // Constructors
53 ////////////////////////////////////////////////////////////////////////////////////////////
54
55 /**
56 *
57 */
58 ScheduledEvent(byte tag)
59 {
60 this(tag, null);
61 }
62
63 /**
64 *
65 */
66 ScheduledEvent(byte tag, Object obj)
67 {
68 this.tag = tag;
69 this.obj = obj;
70 }
71
72
73 ////////////////////////////////////////////////////////////////////////////////////////////
74 // Methods
75 ////////////////////////////////////////////////////////////////////////////////////////////
76
77 /**
78 * Set the timeout of this event.
79 */
80 void setTimeout(long timeout)
81 {
82 this.timeout = timeout;
83 }
84
85 /**
86 * Set the timeout of this event and schedule the timer task.
87 */
88 public void setTimeout(long timeout, Future<?> handle)
89 {
90 this.timeout = timeout;
91 this.handle = handle;
92 }
93
94 public void abortTimeout()
95 {
96 handle.cancel(false);
97 }
98
99 /**
100 * Returns the actual timeout associated to this event.
101 */
102 long getTimeout()
103 {
104 return timeout;
105 }
106
107 /**
108 * Returns the event object associated to this event.
109 */
110 Object getData()
111 {
112 return obj;
113 }
114
115 /**
116 * Returns the tag associated to this event
117 */
118 byte getTag()
119 {
120 return tag;
121 }
122
123 ////////////////////////////////////////////////////////////////////////////////////////////
124 // Methods from Object and Comparable
125 ////////////////////////////////////////////////////////////////////////////////////////////
126
127 /**
128 * Compares this object with the specified object for order.
129 */
130 public int compareTo(Object obj)
131 {
132 if (this == obj) {
133 return 0;
134 } else {
135 ScheduledEvent event = (ScheduledEvent) obj;
136 if (timeout < event.timeout) {
137 return -1;
138 } else if (timeout == event.timeout) {
139 return 0;
140 } else {
141 return 1;
142 }
143 }
144 }
145
146 /**
147 *
148 */
149 public int hashCode()
150 {
151 return (int) timeout;
152 }
153
154 /**
155 * Compares two objects for content equality.
156 *
157 * @param obj the object to compare with
158 * @return true if these objects are equal; false otherwise.
159 */
160 public boolean equals(Object obj)
161 {
162 if (this == obj) {
163 return true;
164 } else {
165 if ( (obj != null) && (obj instanceof ScheduledEvent) ) {
166 ScheduledEvent event = (ScheduledEvent) obj;
167 return (event.timeout == timeout);
168 } else {
169 return false;
170 }
171 }
172 }
173
174 /**
175 * Returns a string representation of this object
176 */
177 public String toString()
178 {
179 StringBuilder buffer = new StringBuilder();
180 buffer.append("[");
181 if (tag >= TAGTYPE.length || tag < 0) {
182 buffer.append("INVALID TAG");
183 } else {
184 buffer.append(TAGTYPE[tag]);
185 }
186 buffer.append(", timeout=");
187 buffer.append(timeout);
188 // buffer.append(timeout - System.currentTimeMillis());
189 if (obj != null) {
190 buffer.append(", obj=");
191 buffer.append(obj);
192 }
193 buffer.append("]");
194 return buffer.toString();
195 }
196
197 } // END ScheduledEvent