2 * ============LICENSE_START========================================================================
3 * ONAP : ccsdk feature sdnr wt odlux
4 * =================================================================================================
5 * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
6 * =================================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
8 * in compliance with the License. You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software distributed under the License
13 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
14 * or implied. See the License for the specific language governing permissions and limitations under
16 * ============LICENSE_END==========================================================================
19 export type ViewElementBase = {
25 "mandatory"?: boolean;
26 "description"?: string;
29 "status"?: "current" | "deprecated" | "obsolete",
30 "reference"?: string, // https://tools.ietf.org/html/rfc7950#section-7.21.4
33 // https://tools.ietf.org/html/rfc7950#section-9.8
34 export type ViewElementBinary = ViewElementBase & {
36 "length"?: Expression<YangRange>; // number of octets
39 // https://tools.ietf.org/html/rfc7950#section-9.7.4
40 export type ViewElementBits = ViewElementBase & {
43 [name: string]: number | undefined; // 0 - 4294967295
47 // https://tools.ietf.org/html/rfc7950#section-9
48 export type ViewElementString = ViewElementBase & {
50 "pattern"?: Expression<RegExp>;
51 "length"?: Expression<YangRange>;
55 // https://tools.ietf.org/html/rfc7950#section-9.3
56 export type ViewElementNumber = ViewElementBase & {
60 "range"?: Expression<YangRange>;
66 // https://tools.ietf.org/html/rfc7950#section-9.5
67 export type ViewElementBoolean = ViewElementBase & {
70 "falseValue"?: string;
73 // https://tools.ietf.org/html/rfc7950#section-9.6.4
74 export type ViewElementSelection = ViewElementBase & {
75 "uiType": "selection";
76 "multiSelect"?: boolean
80 "description"?: string,
81 "status"?: "current" | "deprecated" | "obsolete",
86 // is a list if isList is true ;-)
87 export type ViewElementObject = ViewElementBase & {
93 // Hint: read only lists do not need a key
94 export type ViewElementList = (ViewElementBase & {
101 export type ViewElementReference = ViewElementBase & {
102 "uiType": "reference";
103 "referencePath": string;
104 "ref": (currentPath: string) => ViewElement | null;
107 export type ViewElementUnion = ViewElementBase & {
109 "elements": ViewElement[];
112 export type ViewElementChoise = ViewElementBase & {
114 "cases": { [name: string]: { id: string, label: string, description?: string, elements: { [name: string]: ViewElement } } };
117 export type ViewElement =
125 | ViewElementSelection
126 | ViewElementReference
130 export const isViewElementString = (viewElement: ViewElement): viewElement is ViewElementString => {
131 return viewElement && viewElement.uiType === "string";
134 export const isViewElementNumber = (viewElement: ViewElement): viewElement is ViewElementNumber => {
135 return viewElement && viewElement.uiType === "number";
138 export const isViewElementBoolean = (viewElement: ViewElement): viewElement is ViewElementBoolean => {
139 return viewElement && viewElement.uiType === "boolean";
142 export const isViewElementObject = (viewElement: ViewElement): viewElement is ViewElementObject => {
143 return viewElement && viewElement.uiType === "object" && viewElement.isList === false;
146 export const isViewElementList = (viewElement: ViewElement): viewElement is ViewElementList => {
147 return viewElement && viewElement.uiType === "object" && viewElement.isList === true;
150 export const isViewElementObjectOrList = (viewElement: ViewElement): viewElement is ViewElementObject | ViewElementList => {
151 return viewElement && viewElement.uiType === "object";
154 export const isViewElementSelection = (viewElement: ViewElement): viewElement is ViewElementSelection => {
155 return viewElement && viewElement.uiType === "selection";
158 export const isViewElementReference = (viewElement: ViewElement): viewElement is ViewElementReference => {
159 return viewElement && viewElement.uiType === "reference";
162 export const isViewElementUnion = (viewElement: ViewElement): viewElement is ViewElementUnion => {
163 return viewElement && viewElement.uiType === "union";
166 export const isViewElementChoise = (viewElement: ViewElement): viewElement is ViewElementChoise => {
167 return viewElement && viewElement.uiType === "choise";
171 export type ViewSpecification = {
175 "parentView"?: string;
177 "ifFeature"?: string;
180 "elements": { [name: string]: ViewElement };
181 readonly "canEdit": boolean;
184 export type YangRange = {
189 export type Expression<T> =
193 export type Operator<T> = {
194 operation: "AND" | "OR";
195 arguments: Expression<T>[];