 43628ad9d6
			
		
	
	43628ad9d6
	
	
	
		
			
			* Upgrades lodash * Replaces some usage of lodash with native functions. * Adds linting to catch cases where native functions could be used instead of lodash functions * Renamed testTools to testUtils Co-authored-by: Joshi <simplyrender@gmail.com> Co-authored-by: David Tsay <david.e.tsay@nasa.gov> Co-authored-by: David Tsay <3614296+davetsay@users.noreply.github.com> Co-authored-by: Andrew Henry <akhenry@gmail.com>
		
			
				
	
	
		
			138 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			138 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*****************************************************************************
 | |
|  * Open MCT, Copyright (c) 2014-2018, United States Government
 | |
|  * as represented by the Administrator of the National Aeronautics and Space
 | |
|  * Administration. All rights reserved.
 | |
|  *
 | |
|  * Open MCT 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 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.
 | |
|  *****************************************************************************/
 | |
| 
 | |
| define([
 | |
|     'lodash',
 | |
|     'EventEmitter',
 | |
|     './DefaultCompositionProvider',
 | |
|     './CompositionCollection'
 | |
| ], function (
 | |
|     _,
 | |
|     EventEmitter,
 | |
|     DefaultCompositionProvider,
 | |
|     CompositionCollection
 | |
| ) {
 | |
|     /**
 | |
|      * An interface for interacting with the composition of domain objects.
 | |
|      * The composition of a domain object is the list of other domain objects
 | |
|      * it "contains" (for instance, that should be displayed beneath it
 | |
|      * in the tree.)
 | |
|      *
 | |
|      * @interface CompositionAPI
 | |
|      * @returns {module:openmct.CompositionCollection}
 | |
|      * @memberof module:openmct
 | |
|      */
 | |
|     function CompositionAPI(publicAPI) {
 | |
|         this.registry = [];
 | |
|         this.policies = [];
 | |
|         this.addProvider(new DefaultCompositionProvider(publicAPI, this));
 | |
|         this.publicAPI = publicAPI;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Add a composition provider.
 | |
|      *
 | |
|      * Plugins can add new composition providers to change the loading
 | |
|      * behavior for certain domain objects.
 | |
|      *
 | |
|      * @method addProvider
 | |
|      * @param {module:openmct.CompositionProvider} provider the provider to add
 | |
|      * @memberof module:openmct.CompositionAPI#
 | |
|      */
 | |
|     CompositionAPI.prototype.addProvider = function (provider) {
 | |
|         this.registry.unshift(provider);
 | |
|     };
 | |
| 
 | |
|     /**
 | |
|      * Retrieve the composition (if any) of this domain object.
 | |
|      *
 | |
|      * @method get
 | |
|      * @returns {module:openmct.CompositionCollection}
 | |
|      * @memberof module:openmct.CompositionAPI#
 | |
|      */
 | |
|     CompositionAPI.prototype.get = function (domainObject) {
 | |
|         var provider = this.registry.find(p => {
 | |
|             return p.appliesTo(domainObject);
 | |
|         });
 | |
| 
 | |
|         if (!provider) {
 | |
|             return;
 | |
|         }
 | |
| 
 | |
|         return new CompositionCollection(domainObject, provider, this.publicAPI);
 | |
|     };
 | |
| 
 | |
|     /**
 | |
|      * A composition policy is a function which either allows or disallows
 | |
|      * placing one object in another's composition.
 | |
|      *
 | |
|      * Open MCT's policy model requires consensus, so any one policy may
 | |
|      * reject composition by returning false. As such, policies should
 | |
|      * generally be written to return true in the default case.
 | |
|      *
 | |
|      * @callback CompositionPolicy
 | |
|      * @memberof module:openmct.CompositionAPI~
 | |
|      * @param {module:openmct.DomainObject} containingObject the object which
 | |
|      *        would act as a container
 | |
|      * @param {module:openmct.DomainObject} containedObject the object which
 | |
|      *        would be contained
 | |
|      * @returns {boolean} false if this composition should be disallowed
 | |
|      */
 | |
| 
 | |
|     /**
 | |
|      * Add a composition policy. Composition policies may disallow domain
 | |
|      * objects from containing other domain objects.
 | |
|      *
 | |
|      * @method addPolicy
 | |
|      * @param {module:openmct.CompositionAPI~CompositionPolicy} policy
 | |
|      *        the policy to add
 | |
|      * @memberof module:openmct.CompositionAPI#
 | |
|      */
 | |
|     CompositionAPI.prototype.addPolicy = function (policy) {
 | |
|         this.policies.push(policy);
 | |
|     };
 | |
| 
 | |
|     /**
 | |
|      * Check whether or not a domain object is allowed to contain another
 | |
|      * domain object.
 | |
|      *
 | |
|      * @private
 | |
|      * @method checkPolicy
 | |
|      * @param {module:openmct.DomainObject} containingObject the object which
 | |
|      *        would act as a container
 | |
|      * @param {module:openmct.DomainObject} containedObject the object which
 | |
|      *        would be contained
 | |
|      * @returns {boolean} false if this composition should be disallowed
 | |
| 
 | |
|      * @param {module:openmct.CompositionAPI~CompositionPolicy} policy
 | |
|      *        the policy to add
 | |
|      * @memberof module:openmct.CompositionAPI#
 | |
|      */
 | |
|     CompositionAPI.prototype.checkPolicy = function (container, containee) {
 | |
|         return this.policies.every(function (policy) {
 | |
|             return policy(container, containee);
 | |
|         });
 | |
|     };
 | |
| 
 | |
|     return CompositionAPI;
 | |
| });
 |