From bdc99950c61ec033e69d7696c7993c42e31530c5 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 6 Nov 2015 13:56:07 -0800 Subject: [PATCH] [Creation] Add instantiate service ...to allow insantiating domain objects completely externally from any other domain object. Desired by code review feedback for nasa/openmctweb#255. --- platform/core/bundle.json | 5 +++ platform/core/src/services/Instantiate.js | 54 +++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 platform/core/src/services/Instantiate.js diff --git a/platform/core/bundle.json b/platform/core/bundle.json index 5f5031a737..76c94435ce 100644 --- a/platform/core/bundle.json +++ b/platform/core/bundle.json @@ -223,6 +223,11 @@ "key": "contextualize", "implementation": "services/Contextualize.js", "depends": [ "$log" ] + }, + { + "key": "instantiate", + "implementation": "services/Instantiate.js", + "depends": [ "capabilityService" ] } ], "roots": [ diff --git a/platform/core/src/services/Instantiate.js b/platform/core/src/services/Instantiate.js new file mode 100644 index 0000000000..f59916c938 --- /dev/null +++ b/platform/core/src/services/Instantiate.js @@ -0,0 +1,54 @@ +/***************************************************************************** + * 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*/ + +define( + ['../objects/DomainObjectImpl', 'uuid'], + function (DomainObjectImpl, uuid) { + 'use strict'; + + /** + * The `instantiate` service allows new domain object instances to be + * created. These objects are not persisted to any back-end or + * placed anywhere in the object hierarchy by default. + * + * Usage: `instantiate(model, [id])` + * + * ...returns a new instance of a domain object with the specified + * model. An identifier may be provided; if omitted, one will be + * generated instead. + * + * @constructor + * @memberof platform/core + * @param $injector Angular's `$injector` + */ + function Instantiate(capabilityService) { + return function (model, id) { + var capabilities = capabilityService.getCapabilities(model); + id = id || uuid(); + return new DomainObjectImpl(id, model, capabilities); + }; + } + + return Instantiate; + } +);