Compare commits

...

1 Commits

View File

@ -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__