Provide tosca function to list of map values
[sdc.git] / catalog-ui / src / app / models / properties-inputs / derived-fe-property.ts
index 33e83ce..02b2d0b 100644 (file)
  */
 
 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";
 
@@ -30,9 +32,11 @@ export class DerivedFEProperty extends PropertyBEModel {
     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;
@@ -41,6 +45,8 @@ export class DerivedFEProperty extends PropertyBEModel {
     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
@@ -50,17 +56,42 @@ export class DerivedFEProperty extends PropertyBEModel {
             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;
@@ -70,11 +101,31 @@ export class DerivedFEProperty extends PropertyBEModel {
                     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();
     }
@@ -97,6 +148,7 @@ export class DerivedFEProperty extends PropertyBEModel {
     public hasValueObjChanged() {
         return !_.isEqual(this.valueObj, this.valueObjOrig);
     }
+
 }
 export class DerivedFEPropertyMap {
     [parentPath: string]: Array<DerivedFEProperty>;