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.metrics;
28:
29: /**
30: * Instances of this class can be used to restrict callbacks from
31: * MetricsService subscriptions unless the new value differs from the
32: * previous value by a given delta. These qualifiers are stateful and
33: * therefore cannot be shared across multiple subscriptions.
34: *
35: * @see CredibilityQualifier
36: */
37: public class DeltaValueQualifier implements
38: MetricNotificationQualifier, Constants {
39: private double min_delta;
40: private Metric last_qualified;
41:
42: public DeltaValueQualifier(double min_delta) {
43: this .min_delta = min_delta;
44: }
45:
46: public boolean shouldNotify(Metric metric) {
47: if (metric.getCredibility() <= SYS_DEFAULT_CREDIBILITY)
48: return false;
49:
50: if (last_qualified == null) {
51: last_qualified = metric;
52: return true;
53: }
54:
55: double old_value = last_qualified.doubleValue();
56: double new_value = metric.doubleValue();
57: if (Math.abs(new_value - old_value) > min_delta) {
58: last_qualified = metric;
59: return true;
60: } else {
61: return false;
62: }
63:
64: }
65:
66: }
|