From 01d02642e8574295eaa8a42b34d6f7f78b05f4da Mon Sep 17 00:00:00 2001 From: Andrew Henry Date: Wed, 15 Dec 2021 19:36:01 -0800 Subject: [PATCH] Remove legacy type service usage from modern Open MCT codebase (#4534) * Remove type service from the DefaultMetadataProvider * Added tests * Move unknown types to new type registry * Migrate legacy type telemetry information to new types to obviate need to use type service from new API * Remove default object, it's not needed any more * Remove injector from spec --- platform/core/bundle.js | 20 --- src/api/telemetry/DefaultMetadataProvider.js | 10 +- src/api/telemetry/TelemetryAPISpec.js | 16 +- src/api/types/Type.js | 26 +++ src/api/types/TypeRegistry.js | 11 +- .../folderView/components/GridItem.vue | 2 +- .../folderView/components/ListItem.vue | 2 +- src/plugins/folderView/plugin.js | 11 ++ src/plugins/folderView/pluginSpec.js | 153 ++++++++++++++++++ 9 files changed, 211 insertions(+), 40 deletions(-) create mode 100644 src/plugins/folderView/pluginSpec.js diff --git a/platform/core/bundle.js b/platform/core/bundle.js index 4859d84332..97013e8358 100644 --- a/platform/core/bundle.js +++ b/platform/core/bundle.js @@ -220,26 +220,6 @@ define([ "key": "root", "name": "Root", "cssClass": "icon-folder" - }, - { - "key": "folder", - "name": "Folder", - "cssClass": "icon-folder", - "features": "creation", - "description": "Create folders to organize other objects or links to objects.", - "priority": 1000, - "model": { - "composition": [] - } - }, - { - "key": "unknown", - "name": "Unknown Type", - "cssClass": "icon-object-unknown" - }, - { - "name": "Unknown Type", - "cssClass": "icon-object-unknown" } ], "capabilities": [ diff --git a/src/api/telemetry/DefaultMetadataProvider.js b/src/api/telemetry/DefaultMetadataProvider.js index ed1168a69a..3d95c317cb 100644 --- a/src/api/telemetry/DefaultMetadataProvider.js +++ b/src/api/telemetry/DefaultMetadataProvider.js @@ -102,8 +102,10 @@ define([ DefaultMetadataProvider.prototype.getMetadata = function (domainObject) { const metadata = domainObject.telemetry || {}; if (this.typeHasTelemetry(domainObject)) { - const typeMetadata = this.typeService.getType(domainObject.type).typeDef.telemetry; + const typeMetadata = this.openmct.types.get(domainObject.type).definition.telemetry; + Object.assign(metadata, typeMetadata); + if (!metadata.values) { metadata.values = valueMetadatasFromOldFormat(metadata); } @@ -116,11 +118,9 @@ define([ * @private */ DefaultMetadataProvider.prototype.typeHasTelemetry = function (domainObject) { - if (!this.typeService) { - this.typeService = this.openmct.$injector.get('typeService'); - } + const type = this.openmct.types.get(domainObject.type); - return Boolean(this.typeService.getType(domainObject.type).typeDef.telemetry); + return Boolean(type.definition.telemetry); }; return DefaultMetadataProvider; diff --git a/src/api/telemetry/TelemetryAPISpec.js b/src/api/telemetry/TelemetryAPISpec.js index a3188c0f0d..1be6907822 100644 --- a/src/api/telemetry/TelemetryAPISpec.js +++ b/src/api/telemetry/TelemetryAPISpec.js @@ -27,7 +27,6 @@ describe('Telemetry API', function () { const NO_PROVIDER = 'No provider found'; let openmct; let telemetryAPI; - let mockTypeService; beforeEach(function () { openmct = { @@ -35,14 +34,11 @@ describe('Telemetry API', function () { 'timeSystem', 'bounds' ]), - $injector: jasmine.createSpyObj('injector', [ + types: jasmine.createSpyObj('typeRegistry', [ 'get' ]) }; - mockTypeService = jasmine.createSpyObj('typeService', [ - 'getType' - ]); - openmct.$injector.get.and.returnValue(mockTypeService); + openmct.time.timeSystem.and.returnValue({key: 'system'}); openmct.time.bounds.and.returnValue({ start: 0, @@ -356,7 +352,7 @@ describe('Telemetry API', function () { describe('metadata', function () { let mockMetadata = {}; let mockObjectType = { - typeDef: {} + definition: {} }; beforeEach(function () { telemetryAPI.addProvider({ @@ -368,7 +364,7 @@ describe('Telemetry API', function () { return mockMetadata; } }); - mockTypeService.getType.and.returnValue(mockObjectType); + openmct.types.get.and.returnValue(mockObjectType); }); it('respects explicit priority', function () { @@ -587,7 +583,7 @@ describe('Telemetry API', function () { let domainObject; let mockMetadata = {}; let mockObjectType = { - typeDef: {} + definition: {} }; beforeEach(function () { @@ -601,7 +597,7 @@ describe('Telemetry API', function () { return mockMetadata; } }); - mockTypeService.getType.and.returnValue(mockObjectType); + openmct.types.get.and.returnValue(mockObjectType); domainObject = { identifier: { key: 'a', diff --git a/src/api/types/Type.js b/src/api/types/Type.js index 55d4e7b12c..7753f20fd3 100644 --- a/src/api/types/Type.js +++ b/src/api/types/Type.js @@ -82,6 +82,32 @@ define(function () { definition.cssClass = legacyDefinition.cssClass; definition.description = legacyDefinition.description; definition.form = legacyDefinition.properties; + if (legacyDefinition.telemetry !== undefined) { + let telemetry = { + values: [] + }; + + if (legacyDefinition.telemetry.domains !== undefined) { + legacyDefinition.telemetry.domains.forEach((domain, index) => { + domain.hints = { + domain: index + }; + telemetry.values.push(domain); + }); + } + + if (legacyDefinition.telemetry.ranges !== undefined) { + legacyDefinition.telemetry.ranges.forEach((range, index) => { + range.hints = { + range: index + }; + telemetry.values.push(range); + }); + } + + definition.telemetry = telemetry; + } + if (legacyDefinition.model) { definition.initialize = function (model) { for (let [k, v] of Object.entries(legacyDefinition.model)) { diff --git a/src/api/types/TypeRegistry.js b/src/api/types/TypeRegistry.js index ecc4039939..9ab6a916e3 100644 --- a/src/api/types/TypeRegistry.js +++ b/src/api/types/TypeRegistry.js @@ -19,8 +19,13 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ - define(['./Type'], function (Type) { + const UNKNOWN_TYPE = new Type({ + key: "unknown", + name: "Unknown Type", + cssClass: "icon-object-unknown" + }); + /** * @typedef TypeDefinition * @memberof module:openmct.TypeRegistry~ @@ -89,11 +94,11 @@ define(['./Type'], function (Type) { * @returns {module:openmct.Type} the registered type */ TypeRegistry.prototype.get = function (typeKey) { - return this.types[typeKey]; + return this.types[typeKey] || UNKNOWN_TYPE; }; TypeRegistry.prototype.importLegacyTypes = function (types) { - types.filter((t) => !this.get(t.key)) + types.filter((t) => this.get(t.key) === UNKNOWN_TYPE) .forEach((type) => { let def = Type.definitionFromLegacyDefinition(type); this.addType(type.key, def); diff --git a/src/plugins/folderView/components/GridItem.vue b/src/plugins/folderView/components/GridItem.vue index ef8101df6c..47649d9420 100644 --- a/src/plugins/folderView/components/GridItem.vue +++ b/src/plugins/folderView/components/GridItem.vue @@ -1,6 +1,6 @@