// // ============LICENSE_START======================================================= // Copyright (C) 2016-2018 Ericsson. All rights reserved. // ================================================================================ // This file is licensed under the CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE // Full license text at https://creativecommons.org/licenses/by/4.0/legalcode // // SPDX-License-Identifier: CC-BY-4.0 // ============LICENSE_END========================================================= // // @author Sven van der Meer (sven.van.der.meer@ericsson.com) // == Concept: ContextMap The set of context that is available for use by the policies of a __PolicyModel__ is defined as __ContextMap__ concept instances. The __PolicyModel__ holds a map of all the __ContextMap__ definitions. A __ContextMap__ is itself a container for a group of related context items, each of which is represented by a __ContextItem__ concept instance. __ContextMap__ concepts are keyed with an `ArtifactKey` key. A developer can use the APEX Policy Editor to create context maps for their application domain. A __ContextMap__ uses a map to hold the context items. The ContextItem concept instances in the map are indexed by the __LocalName__ of their `ReferenceKey`. The __ContextMapType__ field of a __ContextMap__ defines the type of a context map. The type can have either of two values: * A __BAG__ context map is a context map with fixed content. Each possible context item in the context map is defined at design time and is held in the __ContextMap__ context instance as __ContextItem__ concept definitions and only the values of the context items in the context map can be changed at run time. The context items in a __BAG__ context map have mixed types and distinct __ContextItem__ concept instances of the same type can be defined. A __BAG__ context map is convenient for defining a group of context items that are diverse but are related by domain, such as the characteristics of a device. A fully defined __BAG__ context map has a fully populated __ContextItem__ map but its __ContextItemTemplate__ reference is not defined. + * A __SAMETYPE__ context map is used to represent a group of __ContextItem__ instances of the same type. Unlike a __BAG__ context map, the __ContextItem__ concept instances of a __SAMETYPE__ context map can be added, modified, and deleted at runtime. All __ContextItem__ concept instances in a __SAMETYPE__ context map must be of the same type, and that context item is defined as a single __ContextItemTemplate__ concept instances at design time. At run time, the __ContextItemTemplate__ definition is used to create new __ContextItem__ concept instances for the context map on demand. A fully defined _SAMETYPE__ context map has an empty __ContextItem__ map and its __ContextItemTemplate__ reference is defined. The __Scope__ of a __ContextMap__ defines the range of applicability of a context map in APEX. The following scopes of applicability are defined: * __EPHEMERAL__ scope means that the context map is owned, used, and modified by a single application, but the context map only exists while that application is running * __APPLICATION__ scope specifies that the context map is owned, used, and modified by a single application, the context map is persistent * __GLOBAL__ scope specifies that the context map is globally owned and is used and modified by any application, the context map is persistent * __EXTERNAL__ scope specifies that the context map is owned by an external system and may be used in a read-only manner by any application, the context map is persistent A much more sophisticated scoping mechanism for context maps is envisaged for Apex in future work. In such a mechanism, the scope of a context map would work somewhat like the way roles work in security authentication systems.