mirror of
https://github.com/nasa/openmct.git
synced 2025-02-01 00:45:41 +00:00
[Creation] Use instantiate from objectService
Use instantiate from DomainObjectProvider, to remove redundant code around DomainObject instantiation.
This commit is contained in:
parent
81b136eab1
commit
cca1928b82
@ -38,7 +38,7 @@
|
|||||||
"provides": "objectService",
|
"provides": "objectService",
|
||||||
"type": "provider",
|
"type": "provider",
|
||||||
"implementation": "objects/DomainObjectProvider.js",
|
"implementation": "objects/DomainObjectProvider.js",
|
||||||
"depends": [ "modelService", "capabilityService", "$q" ]
|
"depends": [ "modelService", "instantiate" ]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"provides": "capabilityService",
|
"provides": "capabilityService",
|
||||||
|
@ -27,8 +27,8 @@
|
|||||||
* @namespace platform/core
|
* @namespace platform/core
|
||||||
*/
|
*/
|
||||||
define(
|
define(
|
||||||
["./DomainObjectImpl"],
|
[],
|
||||||
function (DomainObjectImpl) {
|
function () {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -57,62 +57,36 @@ define(
|
|||||||
*
|
*
|
||||||
* @param {ModelService} modelService the service which shall
|
* @param {ModelService} modelService the service which shall
|
||||||
* provide models (persistent state) for domain objects
|
* provide models (persistent state) for domain objects
|
||||||
* @param {CapabilityService} capabilityService the service
|
* @param {Function} instantiate a service to instantiate new
|
||||||
* which provides capabilities (dynamic behavior)
|
* domain object instances
|
||||||
* for domain objects.
|
|
||||||
* @param $q Angular's $q, for promise consolidation
|
* @param $q Angular's $q, for promise consolidation
|
||||||
* @memberof platform/core
|
* @memberof platform/core
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
function DomainObjectProvider(modelService, capabilityService, $q) {
|
function DomainObjectProvider(modelService, instantiate, $q) {
|
||||||
this.modelService = modelService;
|
this.modelService = modelService;
|
||||||
this.capabilityService = capabilityService;
|
this.instantiate = instantiate;
|
||||||
this.$q = $q;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DomainObjectProvider.prototype.getObjects = function getObjects(ids) {
|
DomainObjectProvider.prototype.getObjects = function getObjects(ids) {
|
||||||
var modelService = this.modelService,
|
var modelService = this.modelService,
|
||||||
capabilityService = this.capabilityService,
|
instantiate = this.instantiate;
|
||||||
$q = this.$q;
|
|
||||||
|
|
||||||
// Given a models object (containing key-value id-model pairs)
|
|
||||||
// create a function that will look up from the capability
|
|
||||||
// service based on id; for handy mapping below.
|
|
||||||
function capabilityResolver(models) {
|
|
||||||
return function (id) {
|
|
||||||
var model = models[id];
|
|
||||||
return model ?
|
|
||||||
capabilityService.getCapabilities(model) :
|
|
||||||
undefined;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// Assemble the results from the model service and the
|
// Assemble the results from the model service and the
|
||||||
// capability service into one value, suitable to return
|
// capability service into one value, suitable to return
|
||||||
// from this service. Note that ids are matched to capabilities
|
// from this service.
|
||||||
// by index.
|
function assembleResult(models) {
|
||||||
function assembleResult(ids, models, capabilities) {
|
|
||||||
var result = {};
|
var result = {};
|
||||||
ids.forEach(function (id, index) {
|
ids.forEach(function (id, index) {
|
||||||
if (models[id]) {
|
if (models[id]) {
|
||||||
// Create the domain object
|
// Create the domain object
|
||||||
result[id] = new DomainObjectImpl(
|
result[id] = instantiate(models[id], id);
|
||||||
id,
|
|
||||||
models[id],
|
|
||||||
capabilities[index]
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
return modelService.getModels(ids).then(function (models) {
|
return modelService.getModels(ids).then(assembleResult);
|
||||||
return $q.all(
|
|
||||||
ids.map(capabilityResolver(models))
|
|
||||||
).then(function (capabilities) {
|
|
||||||
return assembleResult(ids, models, capabilities);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return DomainObjectProvider;
|
return DomainObjectProvider;
|
||||||
|
@ -25,14 +25,16 @@
|
|||||||
* DomainObjectProviderSpec. Created by vwoeltje on 11/6/14.
|
* DomainObjectProviderSpec. Created by vwoeltje on 11/6/14.
|
||||||
*/
|
*/
|
||||||
define(
|
define(
|
||||||
["../../src/objects/DomainObjectProvider"],
|
[
|
||||||
function (DomainObjectProvider) {
|
"../../src/objects/DomainObjectProvider",
|
||||||
|
"../../src/objects/DomainObjectImpl"
|
||||||
|
],
|
||||||
|
function (DomainObjectProvider, DomainObjectImpl) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
describe("The domain object provider", function () {
|
describe("The domain object provider", function () {
|
||||||
var mockModelService,
|
var mockModelService,
|
||||||
mockCapabilityService,
|
mockInstantiate,
|
||||||
mockQ,
|
|
||||||
provider;
|
provider;
|
||||||
|
|
||||||
function mockPromise(value) {
|
function mockPromise(value) {
|
||||||
@ -57,18 +59,15 @@ define(
|
|||||||
"modelService",
|
"modelService",
|
||||||
[ "getModels" ]
|
[ "getModels" ]
|
||||||
);
|
);
|
||||||
mockCapabilityService = jasmine.createSpyObj(
|
mockInstantiate = jasmine.createSpy("instantiate");
|
||||||
"capabilityService",
|
|
||||||
[ "getCapabilities" ]
|
mockInstantiate.andCallFake(function (model, id) {
|
||||||
);
|
return new DomainObjectImpl(id, model, {});
|
||||||
mockQ = {
|
});
|
||||||
when: mockPromise,
|
|
||||||
all: mockAll
|
|
||||||
};
|
|
||||||
provider = new DomainObjectProvider(
|
provider = new DomainObjectProvider(
|
||||||
mockModelService,
|
mockModelService,
|
||||||
mockCapabilityService,
|
mockInstantiate
|
||||||
mockQ
|
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -86,10 +85,11 @@ define(
|
|||||||
result;
|
result;
|
||||||
mockModelService.getModels.andReturn(mockPromise({ a: model }));
|
mockModelService.getModels.andReturn(mockPromise({ a: model }));
|
||||||
result = provider.getObjects(ids).testValue;
|
result = provider.getObjects(ids).testValue;
|
||||||
|
expect(mockInstantiate).toHaveBeenCalledWith(model, 'a');
|
||||||
expect(result.a.getId()).toEqual("a");
|
expect(result.a.getId()).toEqual("a");
|
||||||
expect(result.a.getModel()).toEqual(model);
|
expect(result.a.getModel()).toEqual(model);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user