01: package com.jamonapi;
02:
03: /** Base class for ranges.
04: * Range.java
05: *
06: * Created on November 6, 2005, 3:40 PM
07: */
08:
09: /**
10: *12/16/05 - Added the ability to copy ranges from the factory so each monitor will have a unique range
11:
12: */
13:
14: final class RangeBase extends RangeImp {
15:
16: private double[] rangeValues;
17:
18: /** The first range will catcth anything less than that value.
19: */
20:
21: RangeBase(RangeHolder rangeHolder) {
22: this .rangeHolder = rangeHolder;
23: this .isLessThan = rangeHolder.isLessThan();
24: this .rangeValues = rangeHolder.getEndPoints();
25:
26: int len = rangeValues.length;
27: // add one to cover values less than first range
28: frequencyDist = new FrequencyDistBase[len + 1];
29: for (int i = 0; i < len; i++) {
30: RangeHolder.RangeHolderItem item = rangeHolder.get(i);
31: frequencyDist[i] = new FrequencyDistBase(item
32: .getDisplayHeader(), item.getEndPoint(),
33: getFreqDistName(i));
34: }
35:
36: frequencyDist[len] = new FrequencyDistBase(getLastHeader(),
37: Double.MAX_VALUE, getFreqDistName(len));
38: }
39:
40: // return which Distribution the value belongs to.
41: public FrequencyDist getFrequencyDist(double value) {
42: int last = frequencyDist.length - 1;
43:
44: // If comparison is for < else <=. Defaults to <=
45: if (isLessThan) {
46: for (int i = 0; i < last; i++) {
47: if (value < rangeValues[i])
48: return frequencyDist[i];
49: }
50: } else { // <= i.e. not less than
51: for (int i = 0; i < last; i++) {
52: if (value <= rangeValues[i])
53: return frequencyDist[i];
54: }
55: }
56:
57: //if nothing has matched until this point then match on the last range.
58: return frequencyDist[last];
59: }
60:
61: public void add(double value) {
62: getFrequencyDist(value).add(value);
63:
64: }
65:
66: public void reset() {
67: for (int i = 0; i < frequencyDist.length; i++)
68: frequencyDist[i].reset();
69: }
70:
71: public RangeImp copy(ActivityStats activityStats) {
72: RangeBase rb = new RangeBase(rangeHolder);
73: rb.setActivityStats(activityStats);
74: return rb;
75: }
76:
77: private void setActivityStats(ActivityStats stats) {
78: for (int i = 0; i < frequencyDist.length; i++)
79: frequencyDist[i].setActivityStats(stats);
80: }
81:
82: /** Ranges are implemented as JAMonListeners */
83: public void processEvent(Monitor mon) {
84: double value = mon.getLastValue();
85: getFrequencyDist(value).add(value);
86:
87: }
88:
89: public String getName() {
90: return "Range";
91: }
92:
93: public void setName(String name) {
94: // noop
95:
96: }
97:
98: }
|