mirror of
https://github.com/nasa/openmct.git
synced 2025-06-25 10:44:21 +00:00
Compare commits
1 Commits
adding-uni
...
open1425
Author | SHA1 | Date | |
---|---|---|---|
b5332c0df9 |
@ -191,12 +191,13 @@ has been finalized.
|
||||
[
|
||||
'example/imagery',
|
||||
'example/eventGenerator',
|
||||
'example/generator',
|
||||
'platform/features/my-items',
|
||||
'platform/persistence/local'
|
||||
'example/generator'
|
||||
].forEach(
|
||||
openmct.legacyRegistry.enable.bind(openmct.legacyRegistry)
|
||||
);
|
||||
openmct.install(openmct.plugins.myItems);
|
||||
openmct.install(openmct.plugins.localStorage);
|
||||
openmct.install(openmct.plugins.espresso);
|
||||
openmct.start();
|
||||
});
|
||||
</script>
|
||||
@ -214,6 +215,7 @@ has been finalized.
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
```
|
||||
__index.html__
|
||||
|
||||
@ -258,12 +260,13 @@ __index.html__
|
||||
'example/imagery',
|
||||
'example/eventGenerator',
|
||||
'example/generator',
|
||||
'platform/features/my-items',
|
||||
'platform/persistence/local',
|
||||
+ 'tutorials/todo'
|
||||
].forEach(
|
||||
openmct.legacyRegistry.enable.bind(openmct.legacyRegistry)
|
||||
);
|
||||
openmct.install(openmct.plugins.myItems);
|
||||
openmct.install(openmct.plugins.localStorage);
|
||||
openmct.install(openmct.plugins.espresso);
|
||||
openmct.start();
|
||||
});
|
||||
</script>
|
||||
@ -280,7 +283,6 @@ __index.html__
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
```
|
||||
__index.html__
|
||||
|
||||
@ -2392,12 +2394,13 @@ If we include this in our set of active bundles:
|
||||
'example/imagery',
|
||||
'example/eventGenerator',
|
||||
'example/generator',
|
||||
'platform/features/my-items',
|
||||
'platform/persistence/local',
|
||||
'tutorials/telemetry'
|
||||
].forEach(
|
||||
openmct.legacyRegistry.enable.bind(openmct.legacyRegistry)
|
||||
);
|
||||
openmct.install(openmct.plugins.myItems);
|
||||
openmct.install(openmct.plugins.localStorage);
|
||||
openmct.install(openmct.plugins.espresso);
|
||||
openmct.start();
|
||||
});
|
||||
</script>
|
||||
@ -2415,6 +2418,7 @@ If we include this in our set of active bundles:
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
```
|
||||
__index.html__
|
||||
|
||||
@ -2618,69 +2622,65 @@ again later in Steps 3 and 4.
|
||||
|
||||
This allows our telemetry dictionary to be expressed as domain object models
|
||||
(and, in turn, as domain objects), but these objects still aren't reachable. To
|
||||
fix this, we will need another script which will add these subsystems to the
|
||||
fix this, we will need another script which will expose these subsystems from the
|
||||
root-level object we added in Step 1.
|
||||
|
||||
```js
|
||||
/*global define*/
|
||||
|
||||
define(
|
||||
function () {
|
||||
"use strict";
|
||||
[
|
||||
'../../../src/api/composition/DefaultCompositionProvider',
|
||||
'../../../src/api/objects/object-utils'
|
||||
],
|
||||
function (
|
||||
DefaultCompositionProvider,
|
||||
objectUtils
|
||||
) {
|
||||
var TAXONOMY_SPACE = "example",
|
||||
TAXONOMY_KEY = "sc",
|
||||
SUBSYSTEM_SPACE = "example_tlm";
|
||||
|
||||
var TAXONOMY_ID = "example:sc",
|
||||
PREFIX = "example_tlm:";
|
||||
|
||||
function ExampleTelemetryInitializer(adapter, objectService) {
|
||||
// Generate a domain object identifier for a dictionary element
|
||||
function makeId(element) {
|
||||
return PREFIX + element.identifier;
|
||||
}
|
||||
|
||||
// When the dictionary is available, add all subsystems
|
||||
// to the composition of My Spacecraft
|
||||
function initializeTaxonomy(dictionary) {
|
||||
// Get the top-level container for dictionary objects
|
||||
// from a group of domain objects.
|
||||
function getTaxonomyObject(domainObjects) {
|
||||
return domainObjects[TAXONOMY_ID];
|
||||
}
|
||||
|
||||
// Populate
|
||||
function populateModel(taxonomyObject) {
|
||||
return taxonomyObject.useCapability(
|
||||
"mutation",
|
||||
function (model) {
|
||||
model.name =
|
||||
dictionary.name;
|
||||
model.composition =
|
||||
dictionary.subsystems.map(makeId);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
// Look up My Spacecraft, and populate it accordingly.
|
||||
objectService.getObjects([TAXONOMY_ID])
|
||||
.then(getTaxonomyObject)
|
||||
.then(populateModel);
|
||||
}
|
||||
|
||||
adapter.dictionary().then(initializeTaxonomy);
|
||||
function ExampleTelemetryCompositionProvider(openmct) {
|
||||
this.openmct = openmct;
|
||||
DefaultCompositionProvider.call(this, openmct);
|
||||
}
|
||||
|
||||
return ExampleTelemetryInitializer;
|
||||
ExampleTelemetryCompositionProvider.prototype = Object.create(DefaultCompositionProvider.prototype);
|
||||
|
||||
ExampleTelemetryCompositionProvider.prototype.appliesTo = function (domainObject) {
|
||||
return domainObject.identifier &&
|
||||
domainObject.identifier.namespace === TAXONOMY_SPACE &&
|
||||
domainObject.identifier.key === TAXONOMY_KEY;
|
||||
};
|
||||
|
||||
ExampleTelemetryCompositionProvider.prototype.load = function (domainObject) {
|
||||
var adapter = this.openmct.$injector.get('example.adapter');
|
||||
function makeId(subsystem) {
|
||||
return objectUtils.parseKeyString(SUBSYSTEM_SPACE + ":" + subsystem.identifier);
|
||||
}
|
||||
return adapter.dictionary().then(function (dictionary) {
|
||||
return dictionary.subsystems.map(makeId);
|
||||
});
|
||||
};
|
||||
|
||||
return ExampleTelemetryCompositionProvider;
|
||||
}
|
||||
);
|
||||
```
|
||||
__tutorials/telemetry/src/ExampleTelemetryInitializer.js__
|
||||
|
||||
At the conclusion of Step 1, the top-level My Spacecraft object was empty. This
|
||||
script will wait for the dictionary to be loaded, then load My Spacecraft (by
|
||||
its identifier), and "mutate" it. The `mutation` capability allows changes to be
|
||||
made to a domain object's model. Here, we take this top-level object, update its
|
||||
name to match what was in the dictionary, and set its `composition` to an array
|
||||
of domain object identifiers for all subsystems contained in the dictionary
|
||||
(using the same identifier prefix as before.)
|
||||
```
|
||||
__tutorials/telemetry/src/ExampleTelemetryCompositionProvider.js__
|
||||
|
||||
At the conclusion of Step 1, the top-level My Spacecraft object was empty. Here
|
||||
we define a composition provider that allows an object to provide a list of
|
||||
its children asynchronously. The children are represented with an array of their
|
||||
identifiers.
|
||||
|
||||
You may notice that the code snippet below, the method of registering a composition
|
||||
provider is a little different to the other components defined in these tutorials.
|
||||
The registration mechanism for Composition Providers reflects [changes to our API that are currently underway](https://github.com/nasa/openmct#new-api).
|
||||
More details will be available about Composition Providers and other aspects of
|
||||
our new API in the near future.
|
||||
|
||||
Finally, we wire in these changes by modifying our plugin's `bundle.js` to
|
||||
provide metadata about how these pieces interact (both with each other, and
|
||||
@ -2690,12 +2690,12 @@ with the platform):
|
||||
define([
|
||||
'openmct',
|
||||
+ './src/ExampleTelemetryServerAdapter',
|
||||
+ './src/ExampleTelemetryInitializer',
|
||||
+ './src/ExampleTelemetryCompositionProvider',
|
||||
+ './src/ExampleTelemetryModelProvider'
|
||||
], function (
|
||||
openmct,
|
||||
+ ExampleTelemetryServerAdapter,
|
||||
+ ExampleTelemetryInitializer,
|
||||
+ ExampleTelemetryCompositionProvider,
|
||||
+ ExampleTelemetryModelProvider
|
||||
) {
|
||||
openmct.legacyRegistry.register("tutorials/telemetry", {
|
||||
@ -2760,12 +2760,6 @@ define([
|
||||
+ "value": "ws://localhost:8081"
|
||||
+ }
|
||||
+ ],
|
||||
+ "runs": [
|
||||
+ {
|
||||
+ "implementation": ExampleTelemetryInitializer,
|
||||
+ "depends": [ "example.adapter", "objectService" ]
|
||||
+ }
|
||||
+ ],
|
||||
+ "components": [
|
||||
+ {
|
||||
+ "provides": "modelService",
|
||||
@ -2776,6 +2770,7 @@ define([
|
||||
+ ]
|
||||
}
|
||||
});
|
||||
+ openmct.composition.addProvider(new ExampleTelemetryCompositionProvider(openmct));
|
||||
});
|
||||
```
|
||||
__tutorials/telemetry/bundle.js__
|
||||
@ -2801,16 +2796,15 @@ plugin.
|
||||
`example.server`. Setting `priority` to `fallback` means this constant will be
|
||||
overridden if defined anywhere else, allowing configuration bundles to specify
|
||||
different URLs for the WebSocket connection.
|
||||
* The initializer script is registered using the `runs` category of extension,
|
||||
to ensure that this executes (and populates the contents of the top-level My
|
||||
Spacecraft object) once Open MCT is started.
|
||||
* A Composition Provider is defined, which will expose the spacecraft's
|
||||
subsystems and telemetry as objects in the tree.
|
||||
* This depends upon the `example.adapter` service we exposed above, as well
|
||||
as Angular's `$q`; these services will be made available in the constructor
|
||||
call.
|
||||
* Finally, the `modelService` provider which presents dictionary elements as
|
||||
domain object models is exposed. Since `modelService` is a composite service,
|
||||
this is registered under the extension category `components`.
|
||||
* As with the initializer, this depends upon the `example.adapter` service
|
||||
* As with the composition provider, this depends upon the `example.adapter` service
|
||||
we exposed above, as well as Angular's `$q`; these services will be made
|
||||
available in the constructor call.
|
||||
|
||||
@ -3015,12 +3009,12 @@ Finally, we expose this `telemetryService` provider declaratively:
|
||||
define([
|
||||
'openmct',
|
||||
'./src/ExampleTelemetryServerAdapter',
|
||||
'./src/ExampleTelemetryInitializer',
|
||||
'./src/ExampleTelemetryCompositionProvider',
|
||||
'./src/ExampleTelemetryModelProvider'
|
||||
], function (
|
||||
openmct,
|
||||
ExampleTelemetryServerAdapter,
|
||||
ExampleTelemetryInitializer,
|
||||
ExampleTelemetryCompositionProvider,
|
||||
ExampleTelemetryModelProvider
|
||||
) {
|
||||
openmct.legacyRegistry.register("tutorials/telemetry", {
|
||||
@ -3085,12 +3079,6 @@ define([
|
||||
"value": "ws://localhost:8081"
|
||||
}
|
||||
],
|
||||
"runs": [
|
||||
{
|
||||
"implementation": "ExampleTelemetryInitializer.js",
|
||||
"depends": [ "example.adapter", "objectService" ]
|
||||
}
|
||||
],
|
||||
"components": [
|
||||
{
|
||||
"provides": "modelService",
|
||||
@ -3107,6 +3095,7 @@ define([
|
||||
]
|
||||
}
|
||||
});
|
||||
openmct.composition.addProvider(new ExampleTelemetryCompositionProvider(openmct));
|
||||
});
|
||||
```
|
||||
__tutorials/telemetry/bundle.js__
|
||||
|
Reference in New Issue
Block a user