01: /*
02: * <copyright>
03: *
04: * Copyright 1997-2007 BBNT Solutions, LLC
05: * under sponsorship of the Defense Advanced Research Projects
06: * Agency (DARPA).
07: *
08: * You can redistribute this software and/or modify it under the
09: * terms of the Cougaar Open Source License as published on the
10: * Cougaar Open Source Website (www.cougaar.org).
11: *
12: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
13: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
14: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
15: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
16: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
17: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
18: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
22: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23: *
24: * </copyright>
25: */
26:
27: package org.cougaar.core.agent.service.alarm;
28:
29: /**
30: * A standard {@link Alarm} base class.
31: *
32: * @see #onExpire See the "onExpire()" method.
33: */
34: public abstract class AlarmBase implements Alarm {
35: private final long expirationTime;
36: private boolean expired = false;
37:
38: /** Construct an alarm to expire */
39: public AlarmBase(long time) {
40: expirationTime = time;
41: }
42:
43: public final long getExpirationTime() {
44: return expirationTime;
45: }
46:
47: /**
48: * This callback method is invoked when the alarm expires.
49: *
50: * @see org.cougaar.core.blackboard.TodoSubscription blackboard-based plugins
51: * should use a TodoSubscription to queue the expired alarm for processing
52: * in the "execute()" thread, as opposed to the AlarmService callback thread.
53: */
54: public abstract void onExpire();
55:
56: public final void expire() {
57: synchronized (this ) {
58: if (expired)
59: return;
60: expired = true;
61: }
62: onExpire();
63: }
64:
65: public final synchronized boolean hasExpired() {
66: return expired;
67: }
68:
69: public final synchronized boolean cancel() {
70: boolean was = expired;
71: expired = true;
72: return was;
73: }
74:
75: public String toString() {
76: return "(alarm expired=" + hasExpired() + " expireTime="
77: + expirationTime + ")";
78: }
79: }
|