diff options
Diffstat (limited to 'catalog-ui/src/app/models/properties-inputs')
5 files changed, 341 insertions, 0 deletions
diff --git a/catalog-ui/src/app/models/properties-inputs/derived-fe-property.ts b/catalog-ui/src/app/models/properties-inputs/derived-fe-property.ts new file mode 100644 index 0000000000..1d79353453 --- /dev/null +++ b/catalog-ui/src/app/models/properties-inputs/derived-fe-property.ts @@ -0,0 +1,72 @@ +import { SchemaPropertyGroupModel, SchemaProperty } from '../aschema-property'; +import { PROPERTY_DATA, PROPERTY_TYPES} from 'app/utils'; +import { PropertyBEModel } from '../../models'; + +export enum DerivedPropertyType { + SIMPLE, + LIST, + MAP, + COMPLEX //other datatype, list of non-simple, or map of non-simple +} + +export class DerivedFEProperty extends PropertyBEModel { + parentName: string; + propertiesName: string; //"network_assignments#ipv4_subnet#use_ipv4 = parentPath + name + derivedDataType: DerivedPropertyType; + isDeclared: boolean; + isSelected: boolean; + isDisabled: boolean; + isChildOfListOrMap: boolean; + + constructor(property: PropertyBEModel, parentName?: string) + constructor(name: string, parentName: string, type: string, value: string, isChildOfListOrMap?:boolean, schema?: SchemaPropertyGroupModel); + constructor(nameOrPropertyObj?: string | PropertyBEModel, parentName?: string, type?: string, value?: string, isChildOfListOrMap?: boolean, schema?: SchemaPropertyGroupModel) { + + super(typeof nameOrPropertyObj === 'string' ? null : nameOrPropertyObj); + + if (typeof nameOrPropertyObj !== 'string') { //constructor #1 + this.parentName = parentName ? parentName : null; + this.propertiesName = (parentName) ? parentName + '#' + nameOrPropertyObj.name : nameOrPropertyObj.name; + } else { //constructor #2 + this.name = nameOrPropertyObj; + this.type = type; + this.parentName = parentName; + this.propertiesName = parentName + '#' + nameOrPropertyObj; + this.value = value; + if (schema) { + this.schema = new SchemaPropertyGroupModel(new SchemaProperty(schema.property)); + } + } + this.derivedDataType = this.getDerivedPropertyType(); + this.isChildOfListOrMap = (isChildOfListOrMap) ? isChildOfListOrMap : false; + } + + public getDerivedPropertyType = () => { + if (PROPERTY_DATA.SIMPLE_TYPES.indexOf(this.type) > -1) { + return DerivedPropertyType.SIMPLE; + } else if (this.type == PROPERTY_TYPES.LIST) { + return DerivedPropertyType.LIST; + } else if (this.type == PROPERTY_TYPES.MAP) { + return DerivedPropertyType.MAP; + } else { + return DerivedPropertyType.COMPLEX; + } + } + +} +export class DerivedFEPropertyMap { + [parentPath: string]: Array<DerivedFEProperty>; +} + + + +// isDataType: boolean; + + +// canAdd: boolean; +// canCollapse: boolean; +// canBeDeclared: boolean; + +// derivedValue: string; +// derivedValueType: string; +// propertiesName: string;
\ No newline at end of file diff --git a/catalog-ui/src/app/models/properties-inputs/input-fe-model.ts b/catalog-ui/src/app/models/properties-inputs/input-fe-model.ts new file mode 100644 index 0000000000..1261df3d6d --- /dev/null +++ b/catalog-ui/src/app/models/properties-inputs/input-fe-model.ts @@ -0,0 +1,32 @@ +import { SchemaPropertyGroupModel, SchemaProperty } from "../aschema-property"; +import { PropertyBEModel } from "../../models"; +import {PROPERTY_DATA} from "../../utils/constants"; + +export class InputFEModel extends PropertyBEModel { + isSimpleType: boolean; + isDataType: boolean; + instanceName: string; + propertyName: string; + + + constructor(input?: PropertyBEModel) { + super(input); + if (input) { + this.isSimpleType = PROPERTY_DATA.SIMPLE_TYPES.indexOf(this.type) > -1; + this.isDataType = PROPERTY_DATA.TYPES.indexOf(this.type) == -1; + let propNameIndex:number = this.name.indexOf('_'); + this.instanceName = this.name.substring(0, propNameIndex); + if (input.inputPath) { + this.propertyName = input.inputPath.substring(0, input.inputPath.indexOf('#')) + } else { + this.propertyName = this.name.substring(propNameIndex + 1); + } + } + } + + + + public toJSON = (): any => { + }; + +} diff --git a/catalog-ui/src/app/models/properties-inputs/property-be-model.ts b/catalog-ui/src/app/models/properties-inputs/property-be-model.ts new file mode 100644 index 0000000000..a5279d0668 --- /dev/null +++ b/catalog-ui/src/app/models/properties-inputs/property-be-model.ts @@ -0,0 +1,84 @@ +import { SchemaPropertyGroupModel, SchemaProperty } from "../aschema-property"; + +export class PropertyBEModel { + + defaultValue: string; + description: string; + fromDerived: boolean; + name: string; + parentUniqueId: string; + password: boolean; + required: boolean; + schema: SchemaPropertyGroupModel; + type: string; + uniqueId: string; + value: string; + definition: boolean; + inputPath: string; + propertiesName: string; + input: PropertyBEModel; + + constructor(property?: PropertyBEModel, childProperty?:PropertyBEModel) { + if (property) { + this.defaultValue = property.defaultValue; + this.description = property.description; + this.fromDerived = property.fromDerived; + this.name = property.name; + this.parentUniqueId = property.parentUniqueId; + this.password = property.password; + this.required = property.required; + this.schema = property.schema; + this.type = property.type; + this.uniqueId = property.uniqueId; + this.value = property.value ? property.value : property.defaultValue; + this.definition = property.definition; + if (property.inputPath) { + this.inputPath = property.inputPath; + } + } + if (childProperty) { + this.input = childProperty; + this.propertiesName = childProperty.propertiesName; + } + + if (!this.schema || !this.schema.property) { + this.schema = new SchemaPropertyGroupModel(new SchemaProperty()); + } else { //forcing creating new object, so editing different one than the object in the table + this.schema = new SchemaPropertyGroupModel(new SchemaProperty(this.schema.property)); + } + } + + + + public toJSON = (): any => { + let temp = angular.copy(this); + temp.value = temp.value === "{}" || temp.value === "[]" ? undefined : temp.value; + temp.defaultValue = temp.defaultValue === "{}" || temp.defaultValue === "[]" ? undefined : temp.defaultValue; + return temp; + }; + +} + + +// EXTRAS FROM CONSTRUCTOR: +// this.source = property.source; +// this.valueUniqueUid = property.valueUniqueUid; +// this.path = property.path; +// this.rules = property.rules; +// this.resourceInstanceUniqueId = property.resourceInstanceUniqueId; +// this.readonly = property.readonly; +// this.simpleType = property.simpleType; +// this.componentInstanceId = property.componentInstanceId; +// this.parentValue = property.parentValue; +//NEW PROPERTIES MAY NEED: +// export class PropertyFEModel extends PropertyBEModel { +// componentInstanceId: string; +// isAlreadySelected: boolean; +// filterTerm: string; +// } +//FOR INPUTS, BE ALSO INCLUDES: +//export class InputFEModel extends PropertyBEModel { +// hidden: boolean; +// label: string; +// immutable: boolean; +// } diff --git a/catalog-ui/src/app/models/properties-inputs/property-fe-map.ts b/catalog-ui/src/app/models/properties-inputs/property-fe-map.ts new file mode 100644 index 0000000000..3b267460b1 --- /dev/null +++ b/catalog-ui/src/app/models/properties-inputs/property-fe-map.ts @@ -0,0 +1,21 @@ +'use strict'; +import { PropertyBEModel, PropertyFEModel } from "../../models"; + +export class InstanceBePropertiesMap { + [instanceId: string]: Array<PropertyBEModel>; +} + +export class InstanceFePropertiesMap { + [instanceId: string]: Array<PropertyFEModel>; +} + +export class InstancePropertiesAPIMap { + componentInstanceProperties: InstanceBePropertiesMap; + componentInstanceInputsMap: InstanceBePropertiesMap; + + constructor(inputsMapData: InstanceBePropertiesMap, propertiesMapData: InstanceBePropertiesMap) { + this.componentInstanceInputsMap = inputsMapData ? inputsMapData: new InstanceBePropertiesMap(); + this.componentInstanceProperties = propertiesMapData ? propertiesMapData: new InstanceBePropertiesMap(); + } + +} diff --git a/catalog-ui/src/app/models/properties-inputs/property-fe-model.ts b/catalog-ui/src/app/models/properties-inputs/property-fe-model.ts new file mode 100644 index 0000000000..29f2c79225 --- /dev/null +++ b/catalog-ui/src/app/models/properties-inputs/property-fe-model.ts @@ -0,0 +1,132 @@ +import {SchemaPropertyGroupModel, SchemaProperty} from '../aschema-property'; +import { PROPERTY_DATA } from 'app/utils'; +import { PropertyBEModel, DerivedFEPropertyMap, DerivedFEProperty } from '../../models'; + + +export class PropertyFEModel extends PropertyBEModel { + + //START - TO REMOVE: + treeNodeId: string; + parent: PropertyFEModel; + + childrenProperties: Array<PropertyFEModel>; + isAllChildrenLevelsCalculated: boolean; + uniqueId: string; + valueObjectRef: any; + //END - TO REMOVE: + + expandedChildPropertyId: string; + flattenedChildren: Array<DerivedFEProperty>; //[parentPath] : Array<DerivedFEProp> + isDataType: boolean; //aka- isComplexType. (Type is NOT: simple, list, or map) + isDeclared: boolean; + isDisabled: boolean; + isSelected: boolean; + isSimpleType: boolean; + + private _derivedFromSimpleTypeName:string; + get derivedFromSimpleTypeName():string { + return this._derivedFromSimpleTypeName; + } + set derivedFromSimpleTypeName(derivedFromSimpleTypeName:string) { + this._derivedFromSimpleTypeName = derivedFromSimpleTypeName; + } + + constructor(property?: PropertyBEModel); + constructor(name: string, type: string, treeNodeId: string, parent: PropertyFEModel, valueObjectRef: any, schema?: SchemaPropertyGroupModel); + constructor(nameOrPropertyObj?: string | PropertyBEModel, type?: string, treeNodeId?: string, parent?: PropertyFEModel, valueObjectRef?: any, schema?: SchemaPropertyGroupModel) { + + super(typeof nameOrPropertyObj === 'string' ? null : nameOrPropertyObj); + + if (typeof nameOrPropertyObj === 'string') { + this.name = nameOrPropertyObj; + this.type = type; + this.treeNodeId = treeNodeId; + this.parent = parent; + this.valueObjectRef = valueObjectRef; + this.value = this.value || this.defaultValue; + if(schema){ + this.schema = new SchemaPropertyGroupModel(new SchemaProperty(schema.property)); + } + } + + this.isSimpleType = PROPERTY_DATA.SIMPLE_TYPES.indexOf(this.type) > -1; + this.isDataType = PROPERTY_DATA.TYPES.indexOf(this.type) == -1; + this.setNonDeclared(); + } + + public convertChildToInput = (childName: string): void => { + //childName: "mac_count_required" + let childJson = this.flattenedChildren[childName].map((child) => { + + }); + }; + + public getChildJsonRecursive = (child: string, value?: string): void => { + //TODO: use array.map for the below + /* value += "{" + this.flattenedChildren[child].name + ":"; + if (this.flattenedChildren[child].valueType == 'simple') { + value += this.flattenedChildren[child].value + '}'; + return value; + } else { + this.flattenedChildren[child].forEach(grandChild => { + if (this.flattenedChildren[grandChild].valueType == 'simple') { + return "{" + this.flattenedChildren[grandChild].name + ':' + this.flattenedChildren[child].value.toString() + "}"; + } else { + return this.getChildJsonRecursive(grandChild + '#' + this.flattenedChildren[child].name); + } + }); + } + + return "{" + this.flattenedChildren[child].name + this.flattenedChildren[child].value.toString() + "}"; +*/ + + }; + + public setNonDeclared = (childPath?: string): void => { + if (!childPath) { //declaring a child prop + this.isDeclared = false; + } else { + let childProp: DerivedFEProperty = this.flattenedChildren.find(child => child.propertiesName == childPath); + childProp.isDeclared = false; + } + } + + public setAsDeclared = (childNameToDeclare?:string): void => { + if (!childNameToDeclare) { //declaring a child prop + this.isSelected = false; + this.isDeclared = true; + } else { + let childProp: DerivedFEProperty = this.flattenedChildren.find(child => child.propertiesName == childNameToDeclare); + childProp.isSelected = false; + childProp.isDeclared = true; + } + } + + + + //For expand-collapse functionality + public updateExpandedChildPropertyId = (childPropertyId: string): void => { + if (childPropertyId.lastIndexOf('#') > -1) { + this.expandedChildPropertyId = (this.expandedChildPropertyId == childPropertyId) ? (childPropertyId.substring(0, childPropertyId.lastIndexOf('#'))) : childPropertyId; + } else { + this.expandedChildPropertyId = this.name; + } + //console.log("expandedChild is now " + this.expandedChildPropertyId); + } + + public convertToServerObject: Function = (): any => { //TODO: Idan, Rachel, Nechama: Decide what we need to do here + // let serverObject = {}; + // let mapData = { + // 'type': this.type, + // 'required': this.required || false, + // 'defaultValue': this.defaultValue != '' && this.defaultValue != '[]' && this.defaultValue != '{}' ? this.defaultValue : null, + // 'description': this.description, + // 'isPassword': this.password || false, + // 'schema': this.schema, + // 'name': this.name + // }; + // serverObject[this.name] = mapData; + + //return JSON.stringify(serverObject); + }; +} |