Merge pull request #1302 from nasa/types-nonfunctional-1294

[API] Fix type registration
This commit is contained in:
Pete Richards 2016-10-27 16:01:16 -07:00 committed by GitHub
commit eca9968a9f
5 changed files with 70 additions and 19 deletions

5
API.md
View File

@ -71,9 +71,10 @@ Custom types may be registered via
[`openmct.types`]{@link module:openmct.MCT#types}: [`openmct.types`]{@link module:openmct.MCT#types}:
``` ```
openmct.types.addType('my-type', new openmct.Type({ openmct.types.addType('my-type', {
label: "My Type", label: "My Type",
description: "This is a type that I added!" description: "This is a type that I added!",
creatable: true
}); });
``` ```

View File

@ -248,6 +248,13 @@ define([
}.bind(this) }.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.register('adapter', this.legacyBundle);
legacyRegistry.enable('adapter'); legacyRegistry.enable('adapter');
/** /**

View File

@ -21,7 +21,6 @@
*****************************************************************************/ *****************************************************************************/
define([ define([
'./Type',
'./TimeConductor', './TimeConductor',
'./objects/ObjectAPI', './objects/ObjectAPI',
'./composition/CompositionAPI', './composition/CompositionAPI',
@ -30,7 +29,6 @@ define([
'./ui/GestureAPI', './ui/GestureAPI',
'./telemetry/TelemetryAPI' './telemetry/TelemetryAPI'
], function ( ], function (
Type,
TimeConductor, TimeConductor,
ObjectAPI, ObjectAPI,
CompositionAPI, CompositionAPI,
@ -40,7 +38,6 @@ define([
TelemetryAPI TelemetryAPI
) { ) {
return { return {
Type: Type,
TimeConductor: TimeConductor, TimeConductor: TimeConductor,
ObjectAPI: ObjectAPI, ObjectAPI: ObjectAPI,
CompositionAPI: CompositionAPI, CompositionAPI: CompositionAPI,

View File

@ -21,21 +21,12 @@
*****************************************************************************/ *****************************************************************************/
define(function () { 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 * A Type describes a kind of domain object that may appear or be
* created within Open MCT. * created within Open MCT.
* *
* @param {module:opemct.Type~TypeDefinition} definition * @param {module:opemct.TypeRegistry~TypeDefinition} definition
* @class Type * @class Type
* @memberof module:openmct * @memberof module:openmct
*/ */
@ -55,5 +46,29 @@ define(function () {
return domainObject.type === this.key; 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; return Type;
}); });

View File

@ -20,7 +20,18 @@
* at runtime from the About dialog for additional information. * 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 * A TypeRegistry maintains the definitions for different types
@ -37,13 +48,33 @@ define([], function () {
* *
* @param {string} typeKey a string identifier for this type * @param {string} typeKey a string identifier for this type
* @param {module:openmct.Type} type the type to add * @param {module:openmct.Type} type the type to add
* @method addProvider * @method addType
* @memberof module:openmct.TypeRegistry# * @memberof module:openmct.TypeRegistry#
*/ */
TypeRegistry.prototype.addType = function (typeKey, type) { TypeRegistry.prototype.addType = function (typeKey, typeDef) {
this.types[typeKey] = type; 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; return TypeRegistry;
}); });