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 ViewElementChoiseCase = { id: string, label: string, description?: string, elements: { [name: string]: ViewElement } };
114 export type ViewElementChoise = ViewElementBase & {
117 [name: string]: ViewElementChoiseCase;
121 // https://tools.ietf.org/html/rfc7950#section-7.14.1
122 export type ViewElementRpc = ViewElementBase & {
124 "inputViewId"?: string;
125 "outputViewId"?: string;
128 export type ViewElementEmpty = ViewElementBase & {
132 export type ViewElement =
141 | ViewElementSelection
142 | ViewElementReference
147 export const isViewElementString = (viewElement: ViewElement): viewElement is ViewElementString => {
148 return viewElement && viewElement.uiType === "string";
151 export const isViewElementNumber = (viewElement: ViewElement): viewElement is ViewElementNumber => {
152 return viewElement && viewElement.uiType === "number";
155 export const isViewElementBoolean = (viewElement: ViewElement): viewElement is ViewElementBoolean => {
156 return viewElement && viewElement.uiType === "boolean";
159 export const isViewElementObject = (viewElement: ViewElement): viewElement is ViewElementObject => {
160 return viewElement && viewElement.uiType === "object" && viewElement.isList === false;
163 export const isViewElementList = (viewElement: ViewElement): viewElement is ViewElementList => {
164 return viewElement && viewElement.uiType === "object" && viewElement.isList === true;
167 export const isViewElementObjectOrList = (viewElement: ViewElement): viewElement is ViewElementObject | ViewElementList => {
168 return viewElement && viewElement.uiType === "object";
171 export const isViewElementSelection = (viewElement: ViewElement): viewElement is ViewElementSelection => {
172 return viewElement && viewElement.uiType === "selection";
175 export const isViewElementReference = (viewElement: ViewElement): viewElement is ViewElementReference => {
176 return viewElement && viewElement.uiType === "reference";
179 export const isViewElementUnion = (viewElement: ViewElement): viewElement is ViewElementUnion => {
180 return viewElement && viewElement.uiType === "union";
183 export const isViewElementChoise = (viewElement: ViewElement): viewElement is ViewElementChoise => {
184 return viewElement && viewElement.uiType === "choise";
187 export const isViewElementRpc = (viewElement: ViewElement): viewElement is ViewElementRpc => {
188 return viewElement && viewElement.uiType === "rpc";
191 export const isViewElementEmpty = (viewElement: ViewElement): viewElement is ViewElementRpc => {
192 return viewElement && viewElement.uiType === "empty";
195 export const ResolveFunction = Symbol("IsResolved");
197 export type ViewSpecification = {
201 "parentView"?: string;
203 "ifFeature"?: string;
205 "uses"?: (string[]) & { [ResolveFunction]?: () => void };
206 "elements": { [name: string]: ViewElement };
207 readonly "canEdit": boolean;
210 export type YangRange = {
215 export type Expression<T> =
219 export type Operator<T> = {
220 operation: "AND" | "OR";
221 arguments: Expression<T>[];