[Time Conductor] Subset to display bounds

WTD-1515
This commit is contained in:
Victor Woeltjen 2015-09-14 11:25:42 -07:00
parent 890aafc203
commit f42c5ca1e5
2 changed files with 58 additions and 12 deletions

View File

@ -22,8 +22,8 @@
/*global define*/
define(
[],
function () {
['./ConductorTelemetrySeries'],
function (ConductorTelemetrySeries) {
'use strict';
/**
@ -44,20 +44,18 @@ define(
// Strip out any realtime data series that is outside of the conductor's
// bounds.
ConductorTelemetryDecorator.prototype.stripRealtime = function (packaged) {
ConductorTelemetryDecorator.prototype.pruneNonDisplayable = function (packaged) {
var conductor = this.conductorService.getConductor(),
start = conductor.displayStart(),
end = conductor.displayEnd(),
repackaged = {};
function filterSource(packagedBySource) {
var repackagedBySource = {};
Object.keys(packagedBySource).filter(function (k) {
return packagedBySource[k].getPointCount() > 0 &&
packagedBySource[k].getDomainValue(0) <= end;
}).forEach(function (k) {
repackagedBySource[k] = packagedBySource[k];
Object.keys(packagedBySource).forEach(function (k) {
repackagedBySource[k] = new ConductorTelemetrySeries(
packagedBySource[k],
conductor
);
});
return repackagedBySource;
@ -86,15 +84,19 @@ define(
};
ConductorTelemetryDecorator.prototype.requestTelemetry = function (requests) {
var self = this;
return this.telemetryService
.requestTelemetry(this.amendRequests(requests));
.requestTelemetry(this.amendRequests(requests))
.then(function (packaged) {
return self.pruneNonDisplayable(packaged);
});
};
ConductorTelemetryDecorator.prototype.subscribe = function (callback, requests) {
var self = this;
function internalCallback(packagedSeries) {
return callback(self.stripRealtime(packagedSeries));
return callback(self.pruneNonDisplayable(packagedSeries));
}
return this.telemetryService

View File

@ -0,0 +1,44 @@
/*global define*/
define(
function () {
'use strict';
function ConductorTelemetrySeries(series, conductor) {
var max = series.getPointCount() - 1;
function binSearch(min, max, value) {
var mid = Math.floor((min + max) / 2),
domainValue = series.getDomainValue(mid);
if (min >= max) {
return min;
}
if (domainValue < value) {
return binSearch(mid + 1, max);
} else {
return binSearch(min, mid - 1);
}
}
this.startIndex = binSearch(0, max, conductor.displayStart());
this.endIndex = binSearch(0, max, conductor.displayEnd());
this.series = series;
}
ConductorTelemetrySeries.prototype.getPointCount = function () {
return Math.max(0, this.endIndex - this.startIndex);
};
ConductorTelemetrySeries.prototype.getDomainValue = function (i, d) {
return this.series.getDomainValue(i + this.startIndex, d);
};
ConductorTelemetrySeries.prototype.getRangeValue = function (i, r) {
return this.series.getDomainValue(i + this.startIndex, r);
};
return ConductorTelemetrySeries;
}
);