diff --git a/platform/entanglement/src/actions/SetPrimaryLocationAction.js b/platform/entanglement/src/actions/SetPrimaryLocationAction.js new file mode 100644 index 0000000000..25ebd5ccf8 --- /dev/null +++ b/platform/entanglement/src/actions/SetPrimaryLocationAction.js @@ -0,0 +1,60 @@ +/***************************************************************************** + * Open MCT Web, Copyright (c) 2014-2015, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT Web is licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * Open MCT Web includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ + +/*global define */ +define( + function () { + "use strict"; + + /** + * Implements the "Set Primary Location" action, which sets a + * location property for objects to match their contextual + * location. + * + * @implements {Action} + * @constructor + * @private + * @memberof platform/entanglement + * @param {ActionContext} context the context in which the action + * will be performed + */ + function SetPrimaryLocationAction(context) { + this.domainObject = context.domainObject; + } + + SetPrimaryLocationAction.prototype.perform = function () { + var location = this.domainObject.getCapability('location'); + return location.setPrimaryLocation( + location.getContextualLocation() + ); + }; + + SetPrimaryLocationAction.appliesTo = function (context) { + var domainObject = context.domainObject; + return domainObject && domainObject.hasCapability("location") + && (domainObject.getModel().location === undefined); + }; + + return SetPrimaryLocationAction; + } +); + diff --git a/platform/entanglement/test/actions/SetPrimaryLocationSpec.js b/platform/entanglement/test/actions/SetPrimaryLocationActionSpec.js similarity index 93% rename from platform/entanglement/test/actions/SetPrimaryLocationSpec.js rename to platform/entanglement/test/actions/SetPrimaryLocationActionSpec.js index 3b8bf32150..76fb3a344b 100644 --- a/platform/entanglement/test/actions/SetPrimaryLocationSpec.js +++ b/platform/entanglement/test/actions/SetPrimaryLocationActionSpec.js @@ -24,7 +24,7 @@ define( [ - '../../src/actions/SetPrimaryLocation', + '../../src/actions/SetPrimaryLocationAction', '../DomainObjectFactory' ], function (SetPrimaryLocation, domainObjectFactory) { @@ -61,7 +61,10 @@ define( it("is applicable to objects with no location specified", function () { expect(SetPrimaryLocation.appliesTo(testContext)) .toBe(true); - testModel.location = "something"; + testContext.domainObject.getModel.andReturn({ + location: "something", + name: "some name" + }); expect(SetPrimaryLocation.appliesTo(testContext)) .toBe(false); });