From 8e13819e1e2f93b0c19ba31a4a2fc9a7b4856330 Mon Sep 17 00:00:00 2001 From: Pete Richards Date: Wed, 15 Feb 2017 12:15:34 -0800 Subject: [PATCH] [API] composition providers receive new-style objects Ensure that composition providers get new-style objects (with id included) so that they can properly check for applicability. --- .../capabilities/TransactionCapabilityDecorator.js | 5 +++-- .../core/src/capabilities/CoreCapabilityProvider.js | 8 ++++---- .../src/QueuingPersistenceCapabilityDecorator.js | 4 ++-- .../test/QueuingPersistenceCapabilityDecoratorSpec.js | 6 ++++-- src/adapter/capabilities/APICapabilityDecorator.js | 7 ++++--- src/adapter/runs/AlternateCompositionInitializer.js | 11 ++++++++--- src/adapter/services/Instantiate.js | 2 +- 7 files changed, 26 insertions(+), 17 deletions(-) diff --git a/platform/commonUI/edit/src/capabilities/TransactionCapabilityDecorator.js b/platform/commonUI/edit/src/capabilities/TransactionCapabilityDecorator.js index 344f56435b..d93ccfb128 100644 --- a/platform/commonUI/edit/src/capabilities/TransactionCapabilityDecorator.js +++ b/platform/commonUI/edit/src/capabilities/TransactionCapabilityDecorator.js @@ -48,9 +48,10 @@ define( * Decorate PersistenceCapability to queue persistence calls when a * transaction is in progress. */ - TransactionCapabilityDecorator.prototype.getCapabilities = function (model) { + TransactionCapabilityDecorator.prototype.getCapabilities = function () { var self = this, - capabilities = this.capabilityService.getCapabilities(model), + capabilities = this.capabilityService.getCapabilities + .apply(this.capabilityService, arguments), persistenceCapability = capabilities.persistence; capabilities.persistence = function (domainObject) { diff --git a/platform/core/src/capabilities/CoreCapabilityProvider.js b/platform/core/src/capabilities/CoreCapabilityProvider.js index 412b7a57a2..c2dd75233d 100644 --- a/platform/core/src/capabilities/CoreCapabilityProvider.js +++ b/platform/core/src/capabilities/CoreCapabilityProvider.js @@ -53,10 +53,10 @@ define( */ function CoreCapabilityProvider(capabilities, $log) { // Filter by invoking the capability's appliesTo method - function filterCapabilities(model) { + function filterCapabilities(model, id) { return capabilities.filter(function (capability) { return capability.appliesTo ? - capability.appliesTo(model) : + capability.appliesTo(model, id) : true; }); } @@ -75,8 +75,8 @@ define( return result; } - function getCapabilities(model) { - return packageCapabilities(filterCapabilities(model)); + function getCapabilities(model, id) { + return packageCapabilities(filterCapabilities(model, id)); } return { diff --git a/platform/persistence/queue/src/QueuingPersistenceCapabilityDecorator.js b/platform/persistence/queue/src/QueuingPersistenceCapabilityDecorator.js index 904ed66f47..66213e59ce 100644 --- a/platform/persistence/queue/src/QueuingPersistenceCapabilityDecorator.js +++ b/platform/persistence/queue/src/QueuingPersistenceCapabilityDecorator.js @@ -50,7 +50,7 @@ define( this.capabilityService = capabilityService; } - QueuingPersistenceCapabilityDecorator.prototype.getCapabilities = function (model) { + QueuingPersistenceCapabilityDecorator.prototype.getCapabilities = function (model, id) { var capabilityService = this.capabilityService, persistenceQueue = this.persistenceQueue; @@ -76,7 +76,7 @@ define( } return decoratePersistence( - capabilityService.getCapabilities(model) + capabilityService.getCapabilities(model, id) ); }; diff --git a/platform/persistence/queue/test/QueuingPersistenceCapabilityDecoratorSpec.js b/platform/persistence/queue/test/QueuingPersistenceCapabilityDecoratorSpec.js index 57edcc70c8..fbdaa69304 100644 --- a/platform/persistence/queue/test/QueuingPersistenceCapabilityDecoratorSpec.js +++ b/platform/persistence/queue/test/QueuingPersistenceCapabilityDecoratorSpec.js @@ -32,6 +32,7 @@ define( mockPersistence, mockDomainObject, testModel, + testId, decorator; beforeEach(function () { @@ -41,6 +42,7 @@ define( ['getCapabilities'] ); testModel = { someKey: "some value" }; + testId = 'someId'; mockPersistence = jasmine.createSpyObj( 'persistence', ['persist', 'refresh'] @@ -67,9 +69,9 @@ define( // QueuingPersistenceCapability itself, which has its own tests. it("delegates to its wrapped service", function () { - decorator.getCapabilities(testModel); + decorator.getCapabilities(testModel, testId); expect(mockCapabilityService.getCapabilities) - .toHaveBeenCalledWith(testModel); + .toHaveBeenCalledWith(testModel, testId); }); it("wraps its persistence capability's constructor", function () { diff --git a/src/adapter/capabilities/APICapabilityDecorator.js b/src/adapter/capabilities/APICapabilityDecorator.js index 01bd6a32ef..8b964f553f 100644 --- a/src/adapter/capabilities/APICapabilityDecorator.js +++ b/src/adapter/capabilities/APICapabilityDecorator.js @@ -38,14 +38,15 @@ define([ } APICapabilityDecorator.prototype.getCapabilities = function ( - model + model, + id ) { - var capabilities = this.capabilityService.getCapabilities(model); + var capabilities = this.capabilityService.getCapabilities(model, id); if (capabilities.mutation) { capabilities.mutation = synchronizeMutationCapability(capabilities.mutation); } - if (AlternateCompositionCapability.appliesTo(model)) { + if (AlternateCompositionCapability.appliesTo(model, id)) { capabilities.composition = function (domainObject) { return new AlternateCompositionCapability(this.$injector, domainObject); }.bind(this); diff --git a/src/adapter/runs/AlternateCompositionInitializer.js b/src/adapter/runs/AlternateCompositionInitializer.js index 2129086b8c..ac815e48aa 100644 --- a/src/adapter/runs/AlternateCompositionInitializer.js +++ b/src/adapter/runs/AlternateCompositionInitializer.js @@ -21,13 +21,18 @@ *****************************************************************************/ define([ - '../capabilities/AlternateCompositionCapability' -], function (AlternateCompositionCapability) { + '../capabilities/AlternateCompositionCapability', + '../../api/objects/object-utils' +], function ( + AlternateCompositionCapability, + objectUtils +) { // Present to work around the need for openmct to be used // from AlternateCompositionCapability.appliesTo, even though it // cannot be injected. function AlternateCompositionInitializer(openmct) { - AlternateCompositionCapability.appliesTo = function (model) { + AlternateCompositionCapability.appliesTo = function (model, id) { + model = objectUtils.toNewFormat(model, id || ''); return !!openmct.composition.get(model); }; } diff --git a/src/adapter/services/Instantiate.js b/src/adapter/services/Instantiate.js index 3b4c190705..21c6f9742a 100644 --- a/src/adapter/services/Instantiate.js +++ b/src/adapter/services/Instantiate.js @@ -37,7 +37,7 @@ define( id = id || identifierService.generate(); var old_id = model.id; model.id = id; - var capabilities = capabilityService.getCapabilities(model); + var capabilities = capabilityService.getCapabilities(model, id); model.id = old_id; cacheService.put(id, model); return new DomainObjectImpl(id, model, capabilities);