*/
import * as _ from "lodash";
-import { SchemaPropertyGroupModel, SchemaProperty } from '../aschema-property';
+import { SchemaPropertyGroupModel, SchemaProperty } from '../schema-property';
import { DerivedPropertyType, PropertyBEModel, PropertyFEModel } from '../../models';
+import {SubPropertyToscaFunction} from "../sub-property-tosca-function";
+import {ToscaFunction} from "../tosca-function";
import { PROPERTY_TYPES } from 'app/utils';
import { UUID } from "angular2-uuid";
valueObjIsValid: boolean;
valueObjOrig: any;
valueObjIsChanged: boolean;
+ value: any
parentName: string;
propertiesName: string; //"network_assignments#ipv4_subnet#use_ipv4 = parentPath + name
derivedDataType: DerivedPropertyType;
+ toscaFunction: ToscaFunction;
isDeclared: boolean;
isSelected: boolean;
isDisabled: boolean;
canBeDeclared: boolean;
mapKey: string;
mapKeyError: string;
+ mapInlist: boolean;
+ parentMapKey: string;
constructor(property: PropertyBEModel, parentName?: string, createChildOfListOrMap?: boolean, key?:string, value?:any) {
if (!createChildOfListOrMap) { //creating a standard derived prop
this.canBeDeclared = true; //defaults to true
} else { //creating a direct child of list or map (ie. Item that can be deleted, with UUID instead of name)
super(null);
+ if(property.subPropertyToscaFunctions != null){
+ property.subPropertyToscaFunctions.forEach((item : SubPropertyToscaFunction) => {
+ if(item.subPropertyPath[0] === key){
+ this.toscaFunction = item.toscaFunction;
+ }
+ });
+ }
this.isChildOfListOrMap = true;
this.canBeDeclared = false;
this.name = UUID.UUID();
this.parentName = parentName;
this.propertiesName = parentName + '#' + this.name;
-
- if (property.type == PROPERTY_TYPES.LIST) {
- this.mapKey = property.schema.property.type.split('.').pop();
+ if (property.type == PROPERTY_TYPES.LIST) {
+ let parentKey : string = null;
+ if(property.value != null) {
+ const valueJson = JSON.parse(property.value);
+ if (key != '') {
+ parentKey = key;
+ }else{
+ let indexNumber = Number(Object.keys(valueJson).sort().reverse()[0]) + 1;
+ parentKey = indexNumber.toString();
+ }
+ }else {
+ parentKey = "0";
+ }
+ if (property.schemaType != PROPERTY_TYPES.MAP) {
+ this.mapKey = parentKey;
+ }
this.mapKeyError = null;
this.type = property.schema.property.type;
+ if (this.type == PROPERTY_TYPES.MAP){
+ this.mapInlist = true;
+ this.parentMapKey = parentKey;
+ }
+ this.schema = new SchemaPropertyGroupModel(new SchemaProperty(property.schema.property));
} else { //map
if (key) {
this.mapKey = key;
this.mapKeyError = 'Key cannot be empty.';
}
this.type = property.type;
+ if (property.schema.property.type == PROPERTY_TYPES.MAP){
+ const schProp = new SchemaProperty();
+ schProp.isSimpleType = true;
+ schProp.isDataType = false;
+ schProp.simpleType = PROPERTY_TYPES.STRING;
+ this.schema = new SchemaPropertyGroupModel(schProp);
+ this.schemaType = PROPERTY_TYPES.STRING;
+ if (property instanceof DerivedFEProperty) {
+ this.parentMapKey = property.parentMapKey;
+ if (value != null && typeof value == 'object') {
+ this.toscaFunction = property.toscaFunction;
+ }
+ }
+ } else {
+ this.schema = new SchemaPropertyGroupModel(new SchemaProperty(property.schema.property));
+ }
+
+ }
+ this.valueObj = ((this.type == PROPERTY_TYPES.JSON || this.type == PROPERTY_TYPES.MAP) && typeof value == 'object') ? JSON.stringify(value) : value;
+ if (value != null) {
+ this.value = typeof value == 'object' ? JSON.stringify(value) : value;
}
- this.valueObj = (this.type == PROPERTY_TYPES.JSON && typeof value == 'object') ? JSON.stringify(value) : value;
- this.schema = new SchemaPropertyGroupModel(new SchemaProperty(property.schema.property));
this.updateValueObjOrig();
}
+ // this.constraints = property ? property.constraints : null;
this.valueObjIsValid = true;
this.derivedDataType = this.getDerivedPropertyType();
}
public hasValueObjChanged() {
return !_.isEqual(this.valueObj, this.valueObjOrig);
}
+
}
export class DerivedFEPropertyMap {
[parentPath: string]: Array<DerivedFEProperty>;