/***************************************************************************** * 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,Promise*/ /** * Module defining CreateAction. Created by vwoeltje on 11/10/14. */ define( ['./CreateWizard', 'uuid', '../../../edit/src/objects/EditableDomainObject'], function (CreateWizard, uuid, EditableDomainObject) { "use strict"; /** * The Create Action is performed to create new instances of * domain objects of a specific type. This is the action that * is performed when a user uses the Create menu. * * @memberof platform/commonUI/browse * @implements {Action} * @constructor * * @param {Type} type the type of domain object to create * @param {DomainObject} parent the domain object that should * act as a container for the newly-created object * (note that the user will have an opportunity to * override this) * @param {ActionContext} context the context in which the * action is being performed * @param {NavigationService} navigationService the navigation service, * which handles changes in navigation. It allows the object * being browsed/edited to be set. */ function CreateAction(type, parent, context, $q, navigationService) { this.metadata = { key: 'create', glyph: type.getGlyph(), name: type.getName(), type: type.getKey(), description: type.getDescription(), context: context }; this.type = type; this.parent = parent; this.navigationService = navigationService; this.$q = $q; } /** * Create a new object of the given type. * This will prompt for user input first. */ CreateAction.prototype.perform = function () { var newModel = this.type.getInitialModel(), parentObject = this.navigationService.getNavigation(), newObject, editableObject; newModel.type = this.type.getKey(); newObject = parentObject.useCapability('instantiation', newModel); editableObject = new EditableDomainObject(newObject, this.$q); editableObject.setOriginalObject(parentObject); editableObject.useCapability('mutation', function(model){ model.location = parentObject.getId(); }); if (newObject.hasCapability('composition') && this.type.getKey()!=='folder') { this.navigationService.setNavigation(editableObject); } else { return editableObject.getCapability('action').perform('save'); } }; /** * Metadata associated with a Create action. * @typedef {ActionMetadata} CreateActionMetadata * @property {string} type the key for the type of domain object * to be created */ /** * Get metadata about this action. * @returns {CreateActionMetadata} metadata about this action */ CreateAction.prototype.getMetadata = function () { return this.metadata; }; return CreateAction; } );