mirror of
https://github.com/nasa/openmct.git
synced 2025-05-02 16:53:24 +00:00
165 lines
6.4 KiB
JavaScript
165 lines
6.4 KiB
JavaScript
/*****************************************************************************
|
|
* Open MCT Web, Copyright (c) 2014-2015, United States Government
|
|
* as represented by the Administrator of the National Aeronautics and Space
|
|
* Administration. All rights reserved.
|
|
*
|
|
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
* http://www.apache.org/licenses/LICENSE-2.0.
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
* License for the specific language governing permissions and limitations
|
|
* under the License.
|
|
*
|
|
* Open MCT Web includes source code licensed under additional open source
|
|
* licenses. See the Open Source Licenses file (LICENSES.md) included with
|
|
* this source code distribution or the Licensing information page available
|
|
* at runtime from the About dialog for additional information.
|
|
*****************************************************************************/
|
|
/*global define*/
|
|
|
|
/*
|
|
* Module defining EventListController.
|
|
* Created by chacskaylo on 06/18/2015.
|
|
* Modified by shale on 06/23/2015.
|
|
*/
|
|
|
|
/**
|
|
* This bundle implements the "Events" view of string telemetry.
|
|
* @namespace platform/features/events
|
|
*/
|
|
define(
|
|
["./DomainColumn", "./RangeColumn", "./EventListPopulator"],
|
|
function (DomainColumn, RangeColumn, EventListPopulator) {
|
|
"use strict";
|
|
|
|
var ROW_COUNT = 100;
|
|
|
|
/**
|
|
* The EventListController is responsible for populating
|
|
* the contents of the event list view.
|
|
* @memberof platform/features/events
|
|
* @constructor
|
|
*/
|
|
function EventListController($scope, formatter) {
|
|
var populator;
|
|
|
|
// Get a set of populated, ready-to-display rows for the
|
|
// latest data values.
|
|
function getRows(telemetry) {
|
|
var datas = telemetry.getResponse(),
|
|
objects = telemetry.getTelemetryObjects();
|
|
|
|
return populator.getRows(datas, objects, ROW_COUNT);
|
|
}
|
|
|
|
// Update the contents
|
|
function updateRows() {
|
|
var telemetry = $scope.telemetry;
|
|
$scope.rows = telemetry ? getRows(telemetry) : [];
|
|
}
|
|
|
|
// Set up columns based on telemetry metadata. This will
|
|
// include one column for each domain and range type, as
|
|
// well as a column for the domain object name.
|
|
function setupColumns(telemetry) {
|
|
var domainKeys = {},
|
|
rangeKeys = {},
|
|
columns = [],
|
|
metadata;
|
|
|
|
// Add a domain to the set of columns, if a domain
|
|
// with the same key has not yet been inclued.
|
|
function addDomain(domain) {
|
|
var key = domain.key;
|
|
if (key && !domainKeys[key]) {
|
|
domainKeys[key] = true;
|
|
columns.push(new DomainColumn(domain, formatter));
|
|
}
|
|
}
|
|
|
|
// Add a range col to the set of columns, if a range
|
|
// with the same key has not yet been included.
|
|
function addRange(range) {
|
|
var key = range.key;
|
|
if (key && !rangeKeys[key]) {
|
|
rangeKeys[key] = true;
|
|
columns.push(new RangeColumn(range, formatter));
|
|
}
|
|
}
|
|
|
|
// We cannot proceed if the telemetry controller
|
|
// is not available; clear all rows/columns.
|
|
if (!telemetry) {
|
|
columns = [];
|
|
$scope.rows = [];
|
|
$scope.headers = [];
|
|
return;
|
|
}
|
|
|
|
// Add domain, range, event msg columns
|
|
metadata = telemetry.getMetadata();
|
|
(metadata || []).forEach(function (metadata) {
|
|
(metadata.domains || []).forEach(addDomain);
|
|
});
|
|
(metadata || []).forEach(function (metadata) {
|
|
(metadata.ranges || []).forEach(addRange);
|
|
});
|
|
|
|
// Add default domain and range columns if none
|
|
// were described in metadata.
|
|
if (Object.keys(domainKeys).length < 1) {
|
|
columns.push(new DomainColumn({name: "Time"}, formatter));
|
|
}
|
|
if (Object.keys(rangeKeys).length < 1) {
|
|
columns.push(new RangeColumn({name: "Message"}, formatter));
|
|
}
|
|
|
|
// We have all columns now; use them to initializer
|
|
// the populator, which will use them to generate
|
|
// actual rows and headers.
|
|
populator = new EventListPopulator(columns);
|
|
|
|
// Initialize headers
|
|
$scope.headers = populator.getHeaders();
|
|
|
|
// Fill in the contents of the rows.
|
|
updateRows();
|
|
}
|
|
|
|
$scope.$on("telemetryUpdate", updateRows);
|
|
$scope.$watch("telemetry", setupColumns);
|
|
}
|
|
|
|
return EventListController;
|
|
|
|
/**
|
|
* A description of how to display a certain column of data in an
|
|
* Events view.
|
|
* @interface platform/features/events.EventColumn
|
|
* @private
|
|
*/
|
|
/**
|
|
* Get the title to display in this column's header.
|
|
* @returns {string} the title to display
|
|
* @method platform/features/events.EventColumn#getTitle
|
|
*/
|
|
/**
|
|
* Get the text to display inside a row under this
|
|
* column.
|
|
* @param {DomainObject} domainObject the domain object associated
|
|
* with this row
|
|
* @param {TelemetrySeries} series the telemetry data associated
|
|
* with this row
|
|
* @param {number} index the index of the telemetry datum associated
|
|
* with this row
|
|
* @returns {string} the text to display
|
|
* @method platform/features/events.EventColumn#getValue
|
|
*/
|
|
}
|
|
);
|
|
|