* ============LICENSE_END=========================================================
*/
-import { PropertyInputDetail, SchemaPropertyGroupModel, SchemaProperty } from "app/models";
-import { PROPERTY_DATA, PROPERTY_TYPES } from 'app/utils';
+import {PROPERTY_DATA, PROPERTY_TYPES} from 'app/utils/constants';
+import {SchemaProperty, SchemaPropertyGroupModel} from '../schema-property';
+import {ToscaPresentationData} from '../tosca-presentation';
+import {PropertyInputDetail} from './property-input-detail';
+import {Metadata} from '../metadata';
+import {ToscaFunction} from "../tosca-function";
+import {ToscaGetFunction} from "../tosca-get-function";
+import {ToscaGetFunctionTypeConverter} from "../tosca-get-function-type-converter";
+import {ToscaGetFunctionDto} from "../tosca-get-function-dto";
+
export enum DerivedPropertyType {
SIMPLE,
LIST,
MAP,
COMPLEX
}
+export class PropertyPolicyDetail {
+ policyId: string;
+ propertyName: string;
+ constructor(propertyPolicy?: PropertyPolicyDetail) {
+ if(propertyPolicy) {
+ this.policyId = propertyPolicy.policyId;
+ this.propertyName = propertyPolicy.propertyName;
+ }
+ }
+}
export class PropertyBEModel {
+ constraints: any[];
defaultValue: string;
definition: boolean;
description: string;
fromDerived: boolean;
- getInputValues: Array<PropertyInputDetail>
+ getInputValues: PropertyInputDetail[];
+ getPolicyValues: PropertyPolicyDetail[];
name: string;
+ origName: string;
parentUniqueId: string;
password: boolean;
required: boolean;
schema: SchemaPropertyGroupModel;
+ schemaType: string;
type: string;
uniqueId: string;
value: string;
+ parentPropertyType: string;
+ subPropertyInputPath: string;
+ inputPath: string;
+ toscaPresentation: ToscaPresentationData;
+ metadata: Metadata;
+ /**
+ * @deprecated Use toscaFunction instead
+ */
+ toscaGetFunction: ToscaGetFunctionDto;
+ toscaFunction: ToscaFunction;
constructor(property?: PropertyBEModel) {
if (property) {
+ this.constraints = property.constraints;
this.defaultValue = property.defaultValue;
this.description = property.description;
this.fromDerived = property.fromDerived;
this.name = property.name;
+ this.origName = property.origName;
this.parentUniqueId = property.parentUniqueId;
this.password = property.password;
this.required = property.required;
this.schema = property.schema;
+ this.schemaType = property.schemaType;
this.type = property.type;
this.uniqueId = property.uniqueId;
- this.value = property.value ? property.value : property.defaultValue;
+ this.value = property.value;
this.definition = property.definition;
this.getInputValues = property.getInputValues;
+ this.parentPropertyType = property.parentPropertyType;
+ this.subPropertyInputPath = property.subPropertyInputPath;
+ this.toscaPresentation = property.toscaPresentation;
+ this.getPolicyValues = property.getPolicyValues;
+ this.inputPath = property.inputPath;
+ this.metadata = property.metadata;
+ if (property.toscaFunction) {
+ this.toscaFunction = property.toscaFunction;
+ } else if (property.toscaGetFunction) {
+ //support for legacy tosca function
+ const toscaGetFunction1 = new ToscaGetFunction();
+ toscaGetFunction1.type = ToscaGetFunctionTypeConverter.convertToToscaFunctionType(property.toscaGetFunction.functionType);
+ toscaGetFunction1.propertyUniqueId = property.toscaGetFunction.propertyUniqueId;
+ toscaGetFunction1.propertyName = property.toscaGetFunction.propertyName;
+ toscaGetFunction1.propertySource = property.toscaGetFunction.propertySource;
+ toscaGetFunction1.sourceUniqueId = property.toscaGetFunction.sourceUniqueId;
+ toscaGetFunction1.sourceName = property.toscaGetFunction.sourceName;
+ toscaGetFunction1.functionType = property.toscaGetFunction.functionType;
+ toscaGetFunction1.propertyPathFromSource = property.toscaGetFunction.propertyPathFromSource;
+ this.toscaFunction = toscaGetFunction1;
+ }
}
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
+ } 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;
+ const temp = angular.copy(this);
+ temp.value = temp.value === '{}' || temp.value === '[]' ? undefined : temp.value;
+ temp.defaultValue = temp.defaultValue === '{}' || temp.defaultValue === '[]' ? undefined : temp.defaultValue;
return temp;
- };
+ }
- public getDerivedPropertyType = () => {
+ public getDerivedPropertyType = (): DerivedPropertyType => {
if (PROPERTY_DATA.SIMPLE_TYPES.indexOf(this.type) > -1) {
return DerivedPropertyType.SIMPLE;
- } else if (this.type == PROPERTY_TYPES.LIST) {
+ }
+ if (this.type === PROPERTY_TYPES.LIST) {
return DerivedPropertyType.LIST;
- } else if (this.type == PROPERTY_TYPES.MAP) {
+ }
+ if (this.type === PROPERTY_TYPES.MAP) {
return DerivedPropertyType.MAP;
- } else {
- return DerivedPropertyType.COMPLEX;
}
+ return DerivedPropertyType.COMPLEX;
}
-}
+ /**
+ * Parses default value to JSON.
+ */
+ public parseDefaultValueToJson(): any {
+ if (this.defaultValue == undefined) {
+ return undefined;
+ }
+ const propertyType: DerivedPropertyType = this.getDerivedPropertyType();
+ if (propertyType == DerivedPropertyType.SIMPLE) {
+ return this.parseDefaultSimpleValue();
+ }
+
+ try {
+ return JSON.parse(this.defaultValue);
+ } catch (e) {
+ console.error(`Could not parse the property of type '${this.type}' default value to JSON '${this.defaultValue}'`, e);
+ }
+
+ return undefined;
+ }
+
+ private parseDefaultSimpleValue() {
+ switch (this.type) {
+ case PROPERTY_TYPES.INTEGER:
+ try {
+ return parseInt(this.defaultValue);
+ } catch (e) {
+ console.error(`Could not parse the property of type '${this.type}' default value to int '${this.defaultValue}'`, e);
+ }
+ return undefined;
+ case PROPERTY_TYPES.FLOAT:
+ try {
+ return parseFloat(this.defaultValue);
+ } catch (e) {
+ console.error(`Could not parse the property of type '${this.type}' default value to float '${this.defaultValue}'`, e);
+ }
+ return undefined;
+ case PROPERTY_TYPES.BOOLEAN:
+ return this.defaultValue === 'true';
+ default:
+ return this.defaultValue;
+ }
+ }
+
+ /**
+ * Checks whether the property value is a TOSCA function (e.g. get_input, get_property, get_attribute, concat, etc.)
+ */
+ public isToscaFunction(): boolean {
+ return this.toscaFunction != null;
+ }
+}
-// 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;
-// }