diff --git a/API.md b/API.md index fff93ef2d7..8bef3c3889 100644 --- a/API.md +++ b/API.md @@ -71,9 +71,10 @@ Custom types may be registered via [`openmct.types`]{@link module:openmct.MCT#types}: ``` -openmct.types.addType('my-type', new openmct.Type({ +openmct.types.addType('my-type', { label: "My Type", - description: "This is a type that I added!" + description: "This is a type that I added!", + creatable: true }); ``` diff --git a/src/MCT.js b/src/MCT.js index c1b328b736..31cf0dbf47 100644 --- a/src/MCT.js +++ b/src/MCT.js @@ -248,6 +248,13 @@ define([ }.bind(this) }); + this.types.listKeys().forEach(function (typeKey) { + var type = this.types.get(typeKey); + var legacyDefinition = type.toLegacyDefinition(); + legacyDefinition.key = typeKey; + this.legacyExtension('types', legacyDefinition); + }.bind(this)); + legacyRegistry.register('adapter', this.legacyBundle); legacyRegistry.enable('adapter'); /** diff --git a/src/api/api.js b/src/api/api.js index f68460578b..c118e84ef7 100644 --- a/src/api/api.js +++ b/src/api/api.js @@ -21,7 +21,6 @@ *****************************************************************************/ define([ - './Type', './TimeConductor', './objects/ObjectAPI', './composition/CompositionAPI', @@ -30,7 +29,6 @@ define([ './ui/GestureAPI', './telemetry/TelemetryAPI' ], function ( - Type, TimeConductor, ObjectAPI, CompositionAPI, @@ -40,7 +38,6 @@ define([ TelemetryAPI ) { return { - Type: Type, TimeConductor: TimeConductor, ObjectAPI: ObjectAPI, CompositionAPI: CompositionAPI, diff --git a/src/api/Type.js b/src/api/types/Type.js similarity index 72% rename from src/api/Type.js rename to src/api/types/Type.js index 717e417b21..c135972b31 100644 --- a/src/api/Type.js +++ b/src/api/types/Type.js @@ -21,21 +21,12 @@ *****************************************************************************/ define(function () { - /** - * @typedef TypeDefinition - * @memberof module:openmct.Type~ - * @property {Metadata} metadata displayable metadata about this type - * @property {function (object)} [initialize] a function which initializes - * the model for new domain objects of this type - * @property {boolean} [creatable] true if users should be allowed to - * create this type (default: false) - */ /** * A Type describes a kind of domain object that may appear or be * created within Open MCT. * - * @param {module:opemct.Type~TypeDefinition} definition + * @param {module:opemct.TypeRegistry~TypeDefinition} definition * @class Type * @memberof module:openmct */ @@ -55,5 +46,29 @@ define(function () { return domainObject.type === this.key; }; + /** + * Get a definition for this type that can be registered using the + * legacy bundle format. + * @private + */ + Type.prototype.toLegacyDefinition = function () { + var def = {}; + def.name = this.definition.label; + def.cssclass = this.definition.cssclass; + def.description = this.definition.description; + def.properties = this.definition.form; + + if (this.definition.initialize) { + def.model = {}; + this.definition.initialize(def.model); + } + + if (this.definition.creatable) { + def.features = ['creation']; + } + + return def; + }; + return Type; }); diff --git a/src/api/types/TypeRegistry.js b/src/api/types/TypeRegistry.js index e01bea4a9d..6a887850a2 100644 --- a/src/api/types/TypeRegistry.js +++ b/src/api/types/TypeRegistry.js @@ -20,7 +20,18 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ -define([], function () { +define(['./Type'], function (Type) { + /** + * @typedef TypeDefinition + * @memberof module:openmct.TypeRegistry~ + * @property {string} label the name for this type of object + * @property {string} description a longer-form description of this type + * @property {function (object)} [initialize] a function which initializes + * the model for new domain objects of this type + * @property {boolean} [creatable] true if users should be allowed to + * create this type (default: false) + * @property {string} [cssclass] the CSS class to apply for icons + */ /** * A TypeRegistry maintains the definitions for different types @@ -37,13 +48,33 @@ define([], function () { * * @param {string} typeKey a string identifier for this type * @param {module:openmct.Type} type the type to add - * @method addProvider + * @method addType * @memberof module:openmct.TypeRegistry# */ - TypeRegistry.prototype.addType = function (typeKey, type) { - this.types[typeKey] = type; + TypeRegistry.prototype.addType = function (typeKey, typeDef) { + this.types[typeKey] = new Type(typeDef); }; + /** + * List keys for all registered types. + * @method listKeys + * @memberof module:openmct.TypeRegistry# + * @returns {string[]} all registered type keys + */ + TypeRegistry.prototype.listKeys = function () { + return Object.keys(this.types); + }; + + /** + * Retrieve a registered type by its key. + * @method get + * @param {string} typeKey the key for htis type + * @memberof module:openmct.TypeRegistry# + * @returns {module:openmct.Type} the registered type + */ + TypeRegistry.prototype.get = function (typeKey) { + return this.types[typeKey]; + }; return TypeRegistry; });