X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=sdnr%2Fwt%2Fodlux%2Fapps%2FconfigurationApp%2Fsrc%2Fmodels%2FuiModels.ts;h=29484d8121a97d0957d927c65dcafc48de78f6ef;hb=21e4a946cd24b8a03ea577352f0271ebf7669ffa;hp=69a807a3cefc3d3df46f915878bcfc44d23b6d97;hpb=45bf787f75acb67d4153be40480b07f48ded4d17;p=ccsdk%2Ffeatures.git diff --git a/sdnr/wt/odlux/apps/configurationApp/src/models/uiModels.ts b/sdnr/wt/odlux/apps/configurationApp/src/models/uiModels.ts index 69a807a3c..29484d812 100644 --- a/sdnr/wt/odlux/apps/configurationApp/src/models/uiModels.ts +++ b/sdnr/wt/odlux/apps/configurationApp/src/models/uiModels.ts @@ -15,76 +15,225 @@ * the License. * ============LICENSE_END========================================================================== */ -export interface AccessFlags { - "read": boolean, - "write": boolean, - "create": boolean -} -export interface ViewElementBase { +export type ViewElementBase = { "id": string; "label": string; - "viewId": string; - "leafrefPath": string; - "accessFlags": AccessFlags; - "description": string; + "module": string; + "path": string; + "config": boolean; + "ifFeature"?: string; + "when"?: string; + "mandatory"?: boolean; + "description"?: string; + "isList"?: boolean; + "default"?: string; + "status"?: "current" | "deprecated" | "obsolete", + "reference"?: string, // https://tools.ietf.org/html/rfc7950#section-7.21.4 +} + +// https://tools.ietf.org/html/rfc7950#section-9.8 +export type ViewElementBinary = ViewElementBase & { + "uiType": "binary"; + "length"?: Expression; // number of octets } -export interface ViewElementString extends ViewElementBase { +// https://tools.ietf.org/html/rfc7950#section-9.7.4 +export type ViewElementBits = ViewElementBase & { + "uiType": "bits"; + "flags": { + [name: string]: number | undefined; // 0 - 4294967295 + } +} + +// https://tools.ietf.org/html/rfc7950#section-9 +export type ViewElementString = ViewElementBase & { "uiType": "string"; + "pattern"?: Expression; + "length"?: Expression; + "invertMatch"?: true; +} + +// special case derived from +export type ViewElementDate = ViewElementBase & { + "uiType": "date"; + "pattern"?: Expression; + "length"?: Expression; + "invertMatch"?: true; } -export interface ViewElementNumber extends ViewElementBase { +// https://tools.ietf.org/html/rfc7950#section-9.3 +export type ViewElementNumber = ViewElementBase & { "uiType": "number"; - "min"?: number; - "max"?: number; - "unit"?: string; + "min": number; + "max": number; + "range"?: Expression; + "units"?: string; "format"?: string; + "fDigits"?: number; } -export interface ViewElementBoolean extends ViewElementBase { +// https://tools.ietf.org/html/rfc7950#section-9.5 +export type ViewElementBoolean = ViewElementBase & { "uiType": "boolean"; "trueValue"?: string; "falseValue"?: string; } -export interface ViewElementObject extends ViewElementBase { +// https://tools.ietf.org/html/rfc7950#section-9.6.4 +export type ViewElementSelection = ViewElementBase & { + "uiType": "selection"; + "multiSelect"?: boolean + "options": { + "key": string; + "value": string; + "description"?: string, + "status"?: "current" | "deprecated" | "obsolete", + "reference"?: string, + }[]; +} + +// is a list if isList is true ;-) +export type ViewElementObject = ViewElementBase & { "uiType": "object"; + "isList"?: false; "viewId": string; } -export interface ViewElementSelection extends ViewElementBase { - "uiType": "selection"; - "multiSelect"?: boolean - "options": { - "key": string, - "value": string, - "description": string - }[], +// Hint: read only lists do not need a key +export type ViewElementList = (ViewElementBase & { + "uiType": "object"; + "isList": true; + "viewId": string; + "key"?: string; +}); + +export type ViewElementReference = ViewElementBase & { + "uiType": "reference"; + "referencePath": string; + "ref": (currentPath: string) => [ViewElement , string] | undefined; } -export interface ViewElementList extends ViewElementBase { - "uiType": "list", - "listType": "object" | "string" | "number", - "viewId": string, +export type ViewElementUnion = ViewElementBase & { + "uiType": "union"; + "elements": ViewElement[]; +} + +export type ViewElementChoiseCase = { id: string, label: string, description?: string, elements: { [name: string]: ViewElement } }; + +export type ViewElementChoise = ViewElementBase & { + "uiType": "choise"; + "cases": { + [name: string]: ViewElementChoiseCase; + } +} + +// https://tools.ietf.org/html/rfc7950#section-7.14.1 +export type ViewElementRpc = ViewElementBase & { + "uiType": "rpc"; + "inputViewId"?: string; + "outputViewId"?: string; +} + +export type ViewElementEmpty = ViewElementBase & { + "uiType": "empty"; } export type ViewElement = + | ViewElementEmpty + | ViewElementBits + | ViewElementBinary | ViewElementString + | ViewElementDate | ViewElementNumber | ViewElementBoolean | ViewElementObject + | ViewElementList | ViewElementSelection - | ViewElementList; + | ViewElementReference + | ViewElementUnion + | ViewElementChoise + | ViewElementRpc; + +export const isViewElementString = (viewElement: ViewElement): viewElement is ViewElementString => { + return viewElement && (viewElement.uiType === "string" || viewElement.uiType === "date"); +} + +export const isViewElementDate = (viewElement: ViewElement): viewElement is ViewElementDate => { + return viewElement && (viewElement.uiType === "date"); +} + +export const isViewElementNumber = (viewElement: ViewElement): viewElement is ViewElementNumber => { + return viewElement && viewElement.uiType === "number"; +} + +export const isViewElementBoolean = (viewElement: ViewElement): viewElement is ViewElementBoolean => { + return viewElement && viewElement.uiType === "boolean"; +} + +export const isViewElementObject = (viewElement: ViewElement): viewElement is ViewElementObject => { + return viewElement && viewElement.uiType === "object" && viewElement.isList === false; +} + +export const isViewElementList = (viewElement: ViewElement): viewElement is ViewElementList => { + return viewElement && viewElement.uiType === "object" && viewElement.isList === true; +} + +export const isViewElementObjectOrList = (viewElement: ViewElement): viewElement is ViewElementObject | ViewElementList => { + return viewElement && viewElement.uiType === "object"; +} + +export const isViewElementSelection = (viewElement: ViewElement): viewElement is ViewElementSelection => { + return viewElement && viewElement.uiType === "selection"; +} + +export const isViewElementReference = (viewElement: ViewElement): viewElement is ViewElementReference => { + return viewElement && viewElement.uiType === "reference"; +} -export interface ViewSpecification { +export const isViewElementUnion = (viewElement: ViewElement): viewElement is ViewElementUnion => { + return viewElement && viewElement.uiType === "union"; +} + +export const isViewElementChoise = (viewElement: ViewElement): viewElement is ViewElementChoise => { + return viewElement && viewElement.uiType === "choise"; +} + +export const isViewElementRpc = (viewElement: ViewElement): viewElement is ViewElementRpc => { + return viewElement && viewElement.uiType === "rpc"; +} + +export const isViewElementEmpty = (viewElement: ViewElement): viewElement is ViewElementRpc => { + return viewElement && viewElement.uiType === "empty"; +} + +export const ResolveFunction = Symbol("IsResolved"); + +export type ViewSpecification = { "id": string; - "parentView": string; - "name": string; - "language": string; + "ns"?: string; + "name"?: string; "title"?: string; - "url": string; - "dataPath": string; - "elements": ViewElement[]; + "parentView"?: string; + "language": string; + "ifFeature"?: string; + "when"?: string; + "uses"?: (string[]) & { [ResolveFunction]?: (parent: string) => void }; + "elements": { [name: string]: ViewElement }; + "config": boolean; + readonly "canEdit": boolean; } +export type YangRange = { + min: number, + max: number, +} + +export type Expression = + | T + | Operator; + +export type Operator = { + operation: "AND" | "OR"; + arguments: Expression[]; +} \ No newline at end of file