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:
27: package org.cougaar.core.qos.rss;
28:
29: import org.cougaar.core.component.ServiceBroker;
30: import org.cougaar.core.service.ThreadService;
31: import org.cougaar.core.thread.Schedulable;
32: import org.cougaar.qos.qrs.DataValue;
33: import org.cougaar.qos.qrs.SimpleQueueingDataFeed;
34:
35: /**
36: * This entity implements a simple RSS DataFeed and is used by the
37: * {@link RSSMetricsUpdateServiceImpl} to push data into the RSS.
38: */
39: public class TrivialDataFeed extends SimpleQueueingDataFeed {
40: private static final long HOLD_TIME = 500;
41: private final Schedulable thread;
42:
43: private class Notifier implements Runnable {
44: public void run() {
45: long endTime = System.currentTimeMillis() + HOLD_TIME;
46: // String key = nextKey();
47: // DataValue value = null;
48: do {
49: String key = nextKey();
50: if (key == null) {
51: break;
52: }
53: DataValue value = lookup(key);
54: if (value == null) {
55: continue;
56: }
57: notifyListeners(key, value);
58: } while (System.currentTimeMillis() <= endTime);
59: // if (key != null) {
60: // value = lookup(key);
61: // if (value != null) notifyListeners(key, value);
62: // }
63: if (!isEmpty()) {
64: thread.start();
65: }
66: }
67: }
68:
69: protected Runnable makeNotifier() {
70: return new Notifier();
71: }
72:
73: TrivialDataFeed(ServiceBroker sb) {
74: super ();
75: ThreadService threadService = sb.getService(this ,
76: ThreadService.class, null);
77: Runnable notifier = getNotifier();
78: thread = threadService.getThread(this , notifier,
79: "TrivialDataFeed", ThreadService.WELL_BEHAVED_LANE);
80: sb.releaseService(this , ThreadService.class, threadService);
81: }
82:
83: protected void dispatch() {
84: thread.start();
85: }
86:
87: }
|