01: /*
02: * <copyright>
03: *
04: * Copyright 1997-2004 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: package org.cougaar.glm.execution.eg;
27:
28: import javax.swing.*;
29:
30: public class TimeGUI2 extends JLabel implements Runnable {
31: String rateString; // The current rate as a string
32: double theRate; // The current rate
33: long lastNow; // The start of this timing segment
34: long theOffset; // The offset
35: Thread thread;
36:
37: public synchronized void setTime(long newTime, double newRate) {
38: lastNow = System.currentTimeMillis();
39: theRate = newRate;
40: theOffset = newTime;
41: if (newRate == 0.0) {
42: rateString = " (Paused)";
43: } else if (newRate != 1.0) {
44: rateString = " (Rate " + newRate + ")";
45: } else {
46: rateString = " (Running)";
47: }
48: if (thread == null) {
49: thread = new Thread(this , "TimeGUI");
50: thread.start();
51: }
52: notify();
53: }
54:
55: public synchronized void run() {
56: while (true) {
57: long now = System.currentTimeMillis();
58: long executionTime = (long) ((now - lastNow) * theRate + theOffset);
59: setText(new EGDate(executionTime).toString() + rateString);
60: long nextExecutionTime = executionTime + 60000; // One minute later
61: long nextNow = (long) (lastNow + (nextExecutionTime - theOffset)
62: / theRate);
63: long delay = nextNow - now;
64: if (delay < 200)
65: delay = 200;
66: if (delay > 10000)
67: delay = 10000;
68: try {
69: wait(delay);
70: } catch (InterruptedException ie) {
71: }
72: }
73: }
74: }
|