mirror of
https://github.com/nasa/openmct.git
synced 2025-06-19 07:38:15 +00:00
79 lines
2.7 KiB
JavaScript
79 lines
2.7 KiB
JavaScript
define(
|
|
function () {
|
|
"use strict";
|
|
|
|
var PREFIX = "example_tlm:",
|
|
FORMAT_MAPPINGS = {
|
|
float: "number",
|
|
integer: "number",
|
|
string: "string"
|
|
};
|
|
|
|
function ExampleTelemetryModelProvider(adapter, $q) {
|
|
var modelPromise, empty = $q.when({});
|
|
|
|
// Check if this model is in our dictionary (by prefix)
|
|
function isRelevant(id) {
|
|
return id.indexOf(PREFIX) === 0;
|
|
}
|
|
|
|
// Build a domain object identifier by adding a prefix
|
|
function makeId(element) {
|
|
return PREFIX + element.identifier;
|
|
}
|
|
|
|
// Create domain object models from this dictionary
|
|
function buildTaxonomy(dictionary) {
|
|
var models = {};
|
|
|
|
// Create & store a domain object model for a measurement
|
|
function addMeasurement(measurement) {
|
|
var format = FORMAT_MAPPINGS[measurement.type];
|
|
models[makeId(measurement)] = {
|
|
type: "example.measurement",
|
|
name: measurement.name,
|
|
telemetry: {
|
|
key: measurement.identifier,
|
|
ranges: [{
|
|
key: "value",
|
|
name: "Value",
|
|
units: measurement.units,
|
|
format: format
|
|
}]
|
|
}
|
|
};
|
|
}
|
|
|
|
// Create & store a domain object model for a subsystem
|
|
function addSubsystem(subsystem) {
|
|
var measurements =
|
|
(subsystem.measurements || []);
|
|
models[makeId(subsystem)] = {
|
|
type: "example.subsystem",
|
|
name: subsystem.name,
|
|
composition: measurements.map(makeId)
|
|
};
|
|
measurements.forEach(addMeasurement);
|
|
}
|
|
|
|
(dictionary.subsystems || []).forEach(addSubsystem);
|
|
|
|
return models;
|
|
}
|
|
|
|
// Begin generating models once the dictionary is available
|
|
modelPromise = adapter.dictionary().then(buildTaxonomy);
|
|
|
|
return {
|
|
getModels: function (ids) {
|
|
// Return models for the dictionary only when they
|
|
// are relevant to the request.
|
|
return ids.some(isRelevant) ? modelPromise : empty;
|
|
}
|
|
};
|
|
}
|
|
|
|
return ExampleTelemetryModelProvider;
|
|
}
|
|
);
|