Revert "Provide tosca function capability to complex type fields in composition view" 37/135137/1
authorMichaelMorris <michael.morris@est.tech>
Fri, 23 Jun 2023 17:26:51 +0000 (17:26 +0000)
committerMichaelMorris <michael.morris@est.tech>
Fri, 23 Jun 2023 17:39:31 +0000 (18:39 +0100)
This reverts commit fc3869ca4c430cc29e46bb42125f5672230b83f0.

Reason for revert: Looks to be causing an issue with setting node filter using custom tosca function (save button disbaled)

Change-Id: I684aae7a23d30ed5a20aa4630cd658997b4628a5
Issue-ID: SDC-4528
Signed-off-by: MichaelMorris <michael.morris@est.tech>
catalog-ui/src/app/directives/property-types/data-type-fields-structure/data-type-fields-structure.html
catalog-ui/src/app/directives/property-types/data-type-fields-structure/data-type-fields-structure.less
catalog-ui/src/app/directives/property-types/data-type-fields-structure/data-type-fields-structure.ts
catalog-ui/src/app/directives/property-types/type-list/type-list-directive.html
catalog-ui/src/app/directives/property-types/type-list/type-list-directive.ts
catalog-ui/src/app/directives/property-types/type-map/type-map-directive.html
catalog-ui/src/app/directives/property-types/type-map/type-map-directive.ts
catalog-ui/src/app/modules/service-module.ts
catalog-ui/src/app/ng2/pages/properties-assignment/tosca-function/tosca-function.component.ts
catalog-ui/src/app/ng2/pages/properties-assignment/tosca-function/tosca-get-function/tosca-get-function.component.ts

index afbd520..78aa7bc 100644 (file)
             </div>
         </div>
         <!--<div class="property-value">-->
-        <div class="inner-structure tosca-box tosca-parent">
-            <div class="tosca-box" data-ng-if="complexToscapath == null">
-                <form class="temp-form" data-ng-if="isService">
-                    <input type="radio" name="hasToscaFunction-{{fieldsPrefixName}}" data-ng-checked="verifyTosca(property.name) == false" data-ng-click="onEnableTosca(false,property.name)"/> 
-                    Value
-                    <input type="radio" name="hasToscaFunction-{{fieldsPrefixName}}" data-ng-checked="verifyTosca(property.name)" data-ng-click="onEnableTosca(true,property.name)" /> 
-                    {{'TOSCA_FUNCTION_LABEL' | translate}}
-                </form>
-            </div>
-            <div data-ng-if="verifyTosca(property.name)" class="div-tosca-function">
-                <tosca-function [property]="getSubProperty(property.name)"
-                                [component-instance-map]="componentInstanceMap"
-                                [allow-clear]="false"
-                                [composition-map]="true"
-                                [composition-map-key]="property.name"
-                                (on-valid-function)="onGetToscaFunction($event,property.name)"
-                >
-                </tosca-function>
-            </div>
-            <div data-ng-if="dataTypesService.isDataTypeForDataTypePropertyType(property) && !verifyTosca(property.name)" class="tosca-box">
-                <fields-structure value-obj-ref="(valueObjRef[property.name])"
-                                type-name="property.type"
-                                parent-property="parentProperty"
-                                component-instance-map="componentInstanceMap"
-                                parent-form-obj="parentFormObj"
-                                fields-prefix-name="fieldsPrefixName+property.name"
-                                read-only="readOnly"
-                                is-service="isService"
-                                complex-toscapath="property.name"
-                                default-value="{{currentTypeDefaultValue[property.name]}}">
+        <div data-ng-if="dataTypesService.isDataTypeForDataTypePropertyType(property)" class="inner-structure">
+            <fields-structure value-obj-ref="(valueObjRef[property.name])"
+                              type-name="property.type"
+                              parent-property="parentProperty"
+                              component-instance-map="componentInstanceMap"
+                              parent-form-obj="parentFormObj"
+                              fields-prefix-name="fieldsPrefixName+property.name"
+                              read-only="readOnly"
+                              is-service="isService"
+                              default-value="{{currentTypeDefaultValue[property.name]}}">
 
-                </fields-structure>
+            </fields-structure>
+        </div>
+        <div data-ng-if="!dataTypesService.isDataTypeForDataTypePropertyType(property)" ng-switch="property.type">
+            <div ng-switch-when="map">
+                <type-map value-obj-ref="valueObjRef[property.name]"
+                          schema-property="property.schema.property"
+                          parent-property="property"
+                          component-instance-map="componentInstanceMap"
+                          parent-form-obj="parentFormObj"
+                          fields-prefix-name="fieldsPrefixName+property.name"
+                          read-only="readOnly"
+                          default-value="{{currentTypeDefaultValue[property.name]}}"
+                          is-service="isService"
+                          types="types"></type-map>
             </div>
-            <div data-ng-if="!dataTypesService.isDataTypeForDataTypePropertyType(property) && !verifyTosca(property.name)" ng-switch="property.type" class="tosca-box">
-                <div ng-switch-when="map">
-                    <type-map value-obj-ref="valueObjRef[property.name]"
-                            schema-property="getSubProperty(property.name).schema.property"
-                            parent-property="getSubProperty(property.name)"
-                            component-instance-map="componentInstanceMap"
-                            parent-form-obj="parentFormObj[fieldsPrefixName + property.name]"
-                            fields-prefix-name="fieldsPrefixName+property.name"
-                            read-only="readOnly"
-                            default-value="{{currentTypeDefaultValue[property.name]}}"
-                            is-service="isService"
-                            complex-toscapath="property.name"
-                            types="types"></type-map>
-                </div>
-                <div ng-switch-when="list">
-                    <type-list value-obj-ref="valueObjRef[property.name]"
-                            schema-property="getSubProperty(property.name).schema.property"
-                            parent-property="getSubProperty(property.name)"
-                            component-instance-map="componentInstanceMap"
-                            parent-form-obj="parentFormObj[fieldsPrefixName + property.name]"
-                            fields-prefix-name="fieldsPrefixName+property.name"
-                            read-only="readOnly"
-                            default-value="{{currentTypeDefaultValue[property.name]}}"
-                            is-service="isService"
-                            complex-toscapath="property.name"
-                            types="types"></type-list>
-                </div>
-                <div ng-switch-default class="primitive-value-field">
-                    <div class="i-sdc-form-item" data-ng-class="{error:(parentFormObj[fieldsPrefixName+property.name].$dirty && parentFormObj[fieldsPrefixName+property.name].$invalid)}">
-                        <!-- Has Constraints -->
+            <div ng-switch-when="list">
+                <type-list value-obj-ref="valueObjRef[property.name]"
+                           schema-property="property.schema.property"
+                           parent-property="parentProperty"
+                           component-instance-map="componentInstanceMap"
+                           parent-form-obj="parentFormObj"
+                           fields-prefix-name="fieldsPrefixName+property.name"
+                           read-only="readOnly"
+                           default-value="{{currentTypeDefaultValue[property.name]}}"
+                           is-service="isService"
+                           types="types"></type-list>
+            </div>
+            <div ng-switch-default class="primitive-value-field">
+                <div class="i-sdc-form-item" data-ng-class="{error:(parentFormObj[fieldsPrefixName+property.name].$dirty && parentFormObj[fieldsPrefixName+property.name].$invalid)}">
+                    <!-- Has Constraints -->
 
-                        <!--<select class="i-sdc-form-select"-->
-                        <!--ng-if="(property.constraints)"-->
-                        <!--data-ng-disabled="readOnly"-->
-                        <!--name="{{fieldsPrefixName+property.name}}"-->
-                        <!--data-ng-change="onValueChange(property.name,'constraintsChange')"-->
-                        <!--data-ng-model="valueObjRef[property.name]"-->
-                        <!--&gt;-->
-                        <!--&lt;!&ndash; Get the default value in case exist &ndash;&gt;-->
-                        <!--<option value = "{{valueObjRef[property.name]}}" name = "{{valueObjRef[property.name]}}" hidden selected>-->
-                        <!--{{valueObjRef[property.name]}}-->
-                        <!--</option> -->
-                        <!--&lt;!&ndash; add all constratint to Select list &ndash;&gt;-->
-                        <!--<option ng-repeat='value in property.constraints[0].validValues' value="{{value}}" >-->
-                        <!--{{value}}-->
-                        <!--</option> -->
-                        <!--</select>-->
-                        <!-- Input without constraints -->
-                        <input class="i-sdc-form-input"
+                    <!--<select class="i-sdc-form-select"-->
+                    <!--ng-if="(property.constraints)"-->
+                    <!--data-ng-disabled="readOnly"-->
+                    <!--name="{{fieldsPrefixName+property.name}}"-->
+                    <!--data-ng-change="onValueChange(property.name,'constraintsChange')"-->
+                    <!--data-ng-model="valueObjRef[property.name]"-->
+                    <!--&gt;-->
+                    <!--&lt;!&ndash; Get the default value in case exist &ndash;&gt;-->
+                    <!--<option value = "{{valueObjRef[property.name]}}" name = "{{valueObjRef[property.name]}}" hidden selected>-->
+                    <!--{{valueObjRef[property.name]}}-->
+                    <!--</option> -->
+                    <!--&lt;!&ndash; add all constratint to Select list &ndash;&gt;-->
+                    <!--<option ng-repeat='value in property.constraints[0].validValues' value="{{value}}" >-->
+                    <!--{{value}}-->
+                    <!--</option> -->
+                    <!--</select>-->
+                    <!-- Input without constraints -->
+                    <input class="i-sdc-form-input"
+                           data-tests-id="{{fieldsPrefixName+property.name}}"
+                           ng-if="!((property.simpleType||property.type) == 'boolean')"
+                           data-ng-maxlength="100"
+                           data-ng-readonly="readOnly"
+                           maxlength="{{(property.simpleType||property.type) == 'integer'? 10 : 100}}"
+                           data-ng-model="valueObjRef[property.name]"
+                           type="text"
+                           name="{{fieldsPrefixName+property.name}}"
+                           data-ng-pattern="getValidationPattern((property.simpleType||property.type))"
+                           data-ng-model-options="{ debounce: 200 }"
+                           data-ng-change="inputOnValueChange(property)"
+                           autofocus
+                    />
+                    <select class="i-sdc-form-select"
                             data-tests-id="{{fieldsPrefixName+property.name}}"
-                            ng-if="!((property.simpleType||property.type) == 'boolean')"
-                            data-ng-maxlength="100"
-                            data-ng-readonly="readOnly"
-                            maxlength="{{(property.simpleType||property.type) == 'integer'? 10 : 100}}"
-                            data-ng-model="valueObjRef[property.name]"
-                            type="text"
+                            ng-if="(property.simpleType||property.type) == 'boolean'"
+                            data-ng-disabled="readOnly"
                             name="{{fieldsPrefixName+property.name}}"
-                            data-ng-pattern="getValidationPattern((property.simpleType||property.type))"
-                            data-ng-model-options="{ debounce: 200 }"
-                            data-ng-change="inputOnValueChange(property,valueObjRef[property.name])"
-                            autofocus
-                        />
-                        <select class="i-sdc-form-select"
-                                data-tests-id="{{fieldsPrefixName+property.name}}"
-                                ng-if="(property.simpleType||property.type) == 'boolean'"
-                                data-ng-disabled="readOnly"
-                                name="{{fieldsPrefixName+property.name}}"
-                                data-ng-change="onValueChange(property.name,'boolean')"
-                                data-ng-model="valueObjRef[property.name]"
-                                data-ng-options="option.v as option.n for option in [{ n: '', v: undefined }, { n: 'false', v: false }, { n: 'true', v: true }]">
-                        </select>
+                            data-ng-change="onValueChange(property.name,'boolean')"
+                            data-ng-model="valueObjRef[property.name]"
+                            data-ng-options="option.v as option.n for option in [{ n: '', v: undefined }, { n: 'false', v: false }, { n: 'true', v: true }]">
+                    </select>
 
-                        <div class="input-error" data-ng-show="parentFormObj[fieldsPrefixName+property.name].$dirty && parentFormObj[fieldsPrefixName+property.name].$invalid">
-                            <span ng-show="parentFormObj[fieldsPrefixName+property.name].$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '100' }"></span>
-                            <span ng-show="parentFormObj[fieldsPrefixName+property.name].$error.pattern" translate="PROPERTY_EDIT_PATTERN"></span>
-                            <span ng-show="parentFormObj[fieldsPrefixName+property.name].$error.customValidation" translate="PROPERTY_EDIT_MAP_UNIQUE_KEYS"></span>
-                        </div>
+                    <div class="input-error" data-ng-show="parentFormObj[fieldsPrefixName+property.name].$dirty && parentFormObj[fieldsPrefixName+property.name].$invalid">
+                        <span ng-show="parentFormObj[fieldsPrefixName+property.name].$error.maxlength" translate="VALIDATION_ERROR_MAX_LENGTH" translate-values="{'max': '100' }"></span>
+                        <span ng-show="parentFormObj[fieldsPrefixName+property.name].$error.pattern" translate="PROPERTY_EDIT_PATTERN"></span>
+                        <span ng-show="parentFormObj[fieldsPrefixName+property.name].$error.customValidation" translate="PROPERTY_EDIT_MAP_UNIQUE_KEYS"></span>
                     </div>
                 </div>
             </div>
index 37ca36a..30c7b06 100644 (file)
  * Created by obarda on 1/27/2016.
  */
 'use strict';
-import { DataTypesMap, DerivedFEProperty, PropertyDeclareAPIModel, PropertyModel } from 'app/models';
+import { DataTypesMap, PropertyModel } from 'app/models';
 import { DataTypePropertyModel } from 'app/models/data-type-properties';
 import { DataTypesService } from 'app/services';
 import { ValidationUtils } from 'app/utils';
-import { PropertiesUtils } from "../../../ng2/pages/properties-assignment/services/properties.utils";
-import { InstanceFeDetails } from "app/models/instance-fe-details";
-import { SubPropertyToscaFunction } from 'app/models/sub-property-tosca-function';
-import { ToscaGetFunction } from 'app/models/tosca-get-function';
+import {InstanceFeDetails} from "app/models/instance-fe-details";
 import * as _ from 'lodash';
 
 export interface IDataTypeFieldsStructureScope extends ng.IScope {
@@ -50,20 +47,12 @@ export interface IDataTypeFieldsStructureScope extends ng.IScope {
     dataTypesService: DataTypesService;
     constraints: string[];
     isService:boolean;
-    showToscaFunction: Map<string, boolean>;
-    subpropertyMap: Map<string, PropertyDeclareAPIModel>;
-    complexToscapath: string;
 
     expandAndCollapse(): void;
     getValidationPattern(type: string): RegExp;
     validateIntRange(value: string): boolean;
     onValueChange(propertyName: string, type: string): void;
-    inputOnValueChange(property: any, value: any): void;
-    onEnableTosca(toscaFlag:boolean,propertyName:string);
-    verifyTosca(propertyName: string) : boolean;
-    getSubProperty(propertyName: string) : PropertyDeclareAPIModel;
-    getToscaPathValue(propertyName: string) : Array<string>;
-    onGetToscaFunction(toscaGetFunction: ToscaGetFunction, propertyName:string);
+    inputOnValueChange(property: any): void;
 }
 
 export class DataTypeFieldsStructureDirective implements ng.IDirective {
@@ -81,8 +70,7 @@ export class DataTypeFieldsStructureDirective implements ng.IDirective {
         defaultValue: '@',
         types: '=',
         expandByDefault: '=',
-        isService: '=',
-        complexToscapath: '='
+        isService: '='
     };
 
     restrict = 'E';
@@ -90,15 +78,13 @@ export class DataTypeFieldsStructureDirective implements ng.IDirective {
 
     constructor(private DataTypesService: DataTypesService,
                 private PropertyNameValidationPattern: RegExp,
-                private ValidationUtils: ValidationUtils, 
-                private PropertiesUtils: PropertiesUtils) {
+                private ValidationUtils: ValidationUtils) {
     }
 
     public static factory = (DataTypesService: DataTypesService,
                              PropertyNameValidationPattern: RegExp,
-                             ValidationUtils: ValidationUtils, 
-                             PropertiesUtils: PropertiesUtils) => {
-        return new DataTypeFieldsStructureDirective(DataTypesService, PropertyNameValidationPattern, ValidationUtils, PropertiesUtils);
+                             ValidationUtils: ValidationUtils) => {
+        return new DataTypeFieldsStructureDirective(DataTypesService, PropertyNameValidationPattern, ValidationUtils);
     }
     template = (): string => {
         return require('./data-type-fields-structure.html');
@@ -110,20 +96,7 @@ export class DataTypeFieldsStructureDirective implements ng.IDirective {
         scope.$watchCollection('[typeName,fieldsPrefixName]', (newData: any): void => {
             this.rerender(scope);
         });
-        let childProp = this.PropertiesUtils.convertAddPropertyBAToPropertyFE(scope.parentProperty);
-        scope.subpropertyMap = new Map<string,PropertyDeclareAPIModel>();
-        scope.showToscaFunction = new Map<string,boolean>();
-        childProp.flattenedChildren.forEach(prop => {
-            scope.showToscaFunction.set(prop.name,false);
-            if (scope.parentProperty.subPropertyToscaFunctions != null) {
-                scope.parentProperty.subPropertyToscaFunctions.forEach(SubPropertyToscaFunction => {
-                    if (SubPropertyToscaFunction.subPropertyPath.toString() == prop.name) {
-                        scope.showToscaFunction.set(prop.name,true);
-                    }
-                });
-            }
-            scope.subpropertyMap.set(prop.name,new PropertyDeclareAPIModel(childProp, prop));
-        });
+
         scope.expandAndCollapse = (): void => {
             if (!scope.expanded) {
                 this.initDataOnScope(scope, $attr);
@@ -157,65 +130,6 @@ export class DataTypeFieldsStructureDirective implements ng.IDirective {
                 || scope.onValueChange(property.name, (property.simpleType || property.type)));
             return value;
         };
-
-        scope.onEnableTosca = (toscaFlag:boolean,key:string):void => {
-            scope.showToscaFunction.set(key,toscaFlag);
-            scope.valueObjRef[key] = "";
-            if (!toscaFlag) {
-                if (scope.parentProperty.subPropertyToscaFunctions != null) {
-                    let subToscaFunctionList : Array<SubPropertyToscaFunction> = [];
-                    scope.parentProperty.subPropertyToscaFunctions.forEach((SubPropertyToscaFunction, index) => {
-                        if (SubPropertyToscaFunction.subPropertyPath.toString() != key) {
-                            subToscaFunctionList.push(SubPropertyToscaFunction);
-                        }
-                    });
-                    scope.parentProperty.subPropertyToscaFunctions = subToscaFunctionList;
-                }
-            }
-        };
-
-        scope.verifyTosca = (propName:string) : boolean => {
-            return scope.showToscaFunction.get(propName);
-        }
-
-        scope.getSubProperty = (propertyName: string) : PropertyDeclareAPIModel => {
-            return scope.subpropertyMap.get(propertyName);
-        }
-
-        scope.getToscaPathValue = (propertyName: string) : Array<string> => {
-            const parentObj : PropertyDeclareAPIModel = scope.subpropertyMap.get(propertyName);
-            if (parentObj.input instanceof DerivedFEProperty) {
-                return parentObj.input.toscaPath;
-            }
-            return [propertyName];
-        }
-
-        scope.onGetToscaFunction = (toscaGetFunction: ToscaGetFunction, key:string): void => {
-            let toscaPath = key;
-            scope.valueObjRef[key] = "";
-            if (scope.parentProperty.subPropertyToscaFunctions != null) {
-                let toscaFlag : boolean = true
-                scope.parentProperty.subPropertyToscaFunctions.forEach(SubPropertyToscaFunction => {
-                    if (SubPropertyToscaFunction.subPropertyPath.toString() == toscaPath) {
-                        SubPropertyToscaFunction.toscaFunction = toscaGetFunction;
-                        toscaFlag = false;
-                        return;
-                    }
-                });
-                if (toscaFlag) {
-                    let subPropertyToscaFunction = new SubPropertyToscaFunction();
-                    subPropertyToscaFunction.toscaFunction = toscaGetFunction;
-                    subPropertyToscaFunction.subPropertyPath = [toscaPath];
-                    scope.parentProperty.subPropertyToscaFunctions.push(subPropertyToscaFunction);
-                }
-            } else {
-                let subPropertyToscaFunction = new SubPropertyToscaFunction();
-                subPropertyToscaFunction.toscaFunction = toscaGetFunction;
-                subPropertyToscaFunction.subPropertyPath = [toscaPath];
-                scope.parentProperty.subPropertyToscaFunctions = [subPropertyToscaFunction];
-            }
-        }
-
     }
     // public types=Utils.Constants.PROPERTY_DATA.TYPES;
 
@@ -277,4 +191,4 @@ export class DataTypeFieldsStructureDirective implements ng.IDirective {
     }
 }
 
-DataTypeFieldsStructureDirective.factory.$inject = ['Sdc.Services.DataTypesService', 'PropertyNameValidationPattern', 'ValidationUtils','PropertiesUtils'];
+DataTypeFieldsStructureDirective.factory.$inject = ['Sdc.Services.DataTypesService', 'PropertyNameValidationPattern', 'ValidationUtils'];
index 109c9a9..1455f27 100644 (file)
   -->
     
 <div class="dt-list">
-    <div data-ng-if="valueObjRef.length > 0" data-ng-repeat="i in getNumber(valueObjRef.length) track by $index" class="dt-list-item">
+    <div data-ng-repeat="i in getNumber(valueObjRef.length) track by $index" class="dt-list-item">
         <span class="delete-dt-list-item" data-ng-click="deleteListItem($index)"></span>
         <div data-ng-if="isSchemaTypeDataType">
             <fields-structure value-obj-ref="valueObjRef[$index]"
                             type-name="schemaProperty.type"
                             parent-form-obj="parentFormObj"
-                            parent-property="parentProperty"
                             fields-prefix-name="fieldsPrefixName+''+$index"
                             types="types"
                             read-only="readOnly"></fields-structure>
@@ -29,7 +28,7 @@
         <div data-ng-if="!isSchemaTypeDataType">
             <div class="i-sdc-form-item list-new-item" data-ng-class="{error:(parentFormObj['listNewItem'+fieldsPrefixName].$dirty && parentFormObj['listNewItem'+fieldsPrefixName].$invalid)}"
                 ng-if="schemaProperty.type !== 'map'">
-                <form class="temp-form" data-ng-if="isService && complexToscapath == null">
+                <form class="temp-form" data-ng-if="isService">
                     <input type="radio" name="hasToscaFunction-{{fieldsPrefixName}}-{{$index}}" data-ng-checked="{{showToscaFunction[$index] == false}}" data-ng-click="onEnableTosca(false,$index)"/> 
                     Value
                     <input type="radio" name="hasToscaFunction-{{fieldsPrefixName}}-{{$index}}" data-ng-checked="{{showToscaFunction[$index]}}" data-ng-click="onEnableTosca(true,$index)" /> 
index 18c46b4..40a29da 100644 (file)
@@ -47,7 +47,6 @@ export interface ITypeListScope extends ng.IScope {
     constraints:string[];
     types:DataTypesMap;
     isService:boolean;
-    complexToscapath: string;
 
     getValidationPattern(type:string):RegExp;
     validateIntRange(value:string):boolean;
@@ -86,8 +85,7 @@ export class TypeListDirective implements ng.IDirective {
         maxLength: '=',
         constraints: '=',
         types: '=',
-        isService: '=',
-        complexToscapath: '='
+        isService: '='
     };
 
     restrict = 'E';
@@ -125,26 +123,22 @@ export class TypeListDirective implements ng.IDirective {
     link = (scope:ITypeListScope, element:any, $attr:any) => {
         scope.propertyNameValidationPattern = this.PropertyNameValidationPattern;
         scope.stringSchema = this.stringSchema;
-        if ((scope.valueObjRef == null || scope.valueObjRef.length == 0) && scope.complexToscapath == null) {
+        if (scope.valueObjRef == null || scope.valueObjRef.length == 0) {
             scope.valueObjRef = [];
             scope.valueObjRef.push("");
         }
-        if (scope.valueObjRef != null && scope.valueObjRef.length > 0) {
-            scope.showToscaFunction = new Array(scope.valueObjRef.length);
-            scope.valueObjRef.forEach((value, index) => {
-                scope.showToscaFunction[index] = false;
-                if (scope.parentProperty.subPropertyToscaFunctions != null) {
-                    let key : string = index.toString();
-                    scope.parentProperty.subPropertyToscaFunctions.forEach(SubPropertyToscaFunction => {
-                        if (SubPropertyToscaFunction.subPropertyPath.toString() == key) {
-                            scope.showToscaFunction[index] = true;
-                            return;
-                        }
-                    });
-                }
-            });
-        }
-        
+        scope.showToscaFunction = new Array(scope.valueObjRef.length);
+        scope.valueObjRef.forEach((value, index) => {
+            scope.showToscaFunction[index] = false;
+            let key : string = index.toString();
+            if (scope.parentProperty.subPropertyToscaFunctions != null) {
+                scope.parentProperty.subPropertyToscaFunctions.forEach(SubPropertyToscaFunction => {
+                    if (SubPropertyToscaFunction.subPropertyPath.indexOf(key) != -1) {
+                        scope.showToscaFunction[index] = true;
+                    }
+                });
+            }
+        });
         //reset valueObjRef when schema type is changed
         scope.$watchCollection('schemaProperty.type', (newData:any):void => {
             scope.isSchemaTypeDataType = this.DataTypesService.isDataTypeForSchemaType(scope.schemaProperty);
@@ -180,7 +174,6 @@ export class TypeListDirective implements ng.IDirective {
                 }
             }
             scope.valueObjRef.push(newVal);
-            scope.showToscaFunction = scope.showToscaFunction || [];
             scope.showToscaFunction.push(false);
             scope.listNewItem.value = "";
         };
@@ -221,7 +214,7 @@ export class TypeListDirective implements ng.IDirective {
                 if (scope.parentProperty.subPropertyToscaFunctions != null) {
                     let subToscaFunctionList : Array<SubPropertyToscaFunction> = [];
                     scope.parentProperty.subPropertyToscaFunctions.forEach((SubPropertyToscaFunction, index) => {
-                        if (SubPropertyToscaFunction.subPropertyPath.toString() != key) {
+                        if (SubPropertyToscaFunction.subPropertyPath.indexOf(key) == -1) {
                             subToscaFunctionList.push(SubPropertyToscaFunction);
                         }
                     });
@@ -233,26 +226,21 @@ export class TypeListDirective implements ng.IDirective {
         scope.onGetToscaFunction = (toscaGetFunction: ToscaGetFunction, index:number): void => {
             let key:string = index.toString();
             if (scope.parentProperty.subPropertyToscaFunctions != null) {
-                let toscaFlag : boolean = true;
                 scope.parentProperty.subPropertyToscaFunctions.forEach(SubPropertyToscaFunction => {
-                    if (SubPropertyToscaFunction.subPropertyPath.toString() == key) {
+                    if (SubPropertyToscaFunction.subPropertyPath.indexOf(key) != -1) {
                         SubPropertyToscaFunction.toscaFunction = toscaGetFunction;
-                        toscaFlag = false;
                         return;
                     }
                 });
-                if (toscaFlag) {
-                    let subPropertyToscaFunction = new SubPropertyToscaFunction();
-                    subPropertyToscaFunction.toscaFunction = toscaGetFunction;
-                    subPropertyToscaFunction.subPropertyPath = [key];
-                    scope.parentProperty.subPropertyToscaFunctions.push(subPropertyToscaFunction);
-                }
-            } else {  
-                let subPropertyToscaFunction = new SubPropertyToscaFunction();
-                subPropertyToscaFunction.toscaFunction = toscaGetFunction;
-                subPropertyToscaFunction.subPropertyPath = [key];
-                scope.parentProperty.subPropertyToscaFunctions = [subPropertyToscaFunction];
+
+            }
+            if (scope.parentProperty.subPropertyToscaFunctions == null){
+                scope.parentProperty.subPropertyToscaFunctions = [];
             }
+            let subPropertyToscaFunction = new SubPropertyToscaFunction();
+            subPropertyToscaFunction.toscaFunction = toscaGetFunction;
+            subPropertyToscaFunction.subPropertyPath = [key];
+            scope.parentProperty.subPropertyToscaFunctions.push(subPropertyToscaFunction);
         }
 
     };
index fad6838..f53f5cf 100644 (file)
@@ -41,7 +41,7 @@
         </div>
         <div data-ng-if="!isSchemaTypeDataType" class="i-sdc-form-item map-item-field" data-ng-class="{error:(parentFormObj['mapValue'+fieldsPrefixName+$index].$dirty && parentFormObj['mapValue'+fieldsPrefixName+$index].$invalid)}">
             <label class="i-sdc-form-label required">Value</label>
-            <form class="temp-form" data-ng-if="isService && complexToscapath == null">
+            <form class="temp-form" data-ng-if="isService">
                 <input type="radio" name="hasToscaFunction-{{fieldsPrefixName}}-{{$index}}" data-ng-checked="{{showToscaFunction[$index] == false}}" data-ng-click="onEnableTosca(false,$index)"/>
                 Value
                 <input type="radio" name="hasToscaFunction-{{fieldsPrefixName}}-{{$index}}" data-ng-checked="{{showToscaFunction[$index]}}" data-ng-click="onEnableTosca(true,$index)" ng-disabled="mapKeys[$index] == '' || mapKeys[$index] == null"/>
     </div>
     <div class="add-map-item" data-ng-class="{'schema-data-type':isSchemaTypeDataType}" data-ng-if="showAddBtn">
         <div class="add-btn" data-tests-id="add-map-item"
-             data-ng-class="{'disabled': readOnly || !isMapKeysUnique}"
+             data-ng-class="{'disabled': readOnly || !schemaProperty.type || mapKeys.indexOf('')>-1 || !isMapKeysUnique}"
              data-ng-click="addMapItemFields()" title="{{'PROPERTY_EDIT_MAP_ADD_ITEM' | translate}}">Add</div>
     </div>
 </div>
index 875a49c..098b289 100644 (file)
@@ -49,7 +49,6 @@ export interface ITypeMapScope extends ng.IScope {
     showToscaFunction: boolean[];
     types: DataTypesMap;
     isService: boolean;
-    complexToscapath: string;
 
     getValidationPattern(type: string): RegExp;
     validateIntRange(value: string): boolean;
@@ -78,8 +77,7 @@ export class TypeMapDirective implements ng.IDirective {
         showAddBtn: '=?',
         parentProperty: '=',
         types: '=',
-        isService: '=',
-        complexToscapath: '='
+        isService: '='
     };
 
     restrict = 'E';
@@ -184,30 +182,26 @@ export class TypeMapDirective implements ng.IDirective {
             const currentKey = currentKeySet[index];
             const existingKeyIndex = currentKeySet.indexOf(newKey);
             if (existingKeyIndex > -1 && existingKeyIndex != index) {
-                if (scope.parentFormObj != null) {
-                    scope.parentFormObj[fieldName].$setValidity('keyExist', false);
-                }
+                scope.parentFormObj[fieldName].$setValidity('keyExist', false);
                 scope.isMapKeysUnique = false;
                 return;
             }
-            if (scope.parentFormObj != null) {
-                scope.parentFormObj[fieldName].$setValidity('keyExist', true);
-                if (!scope.parentFormObj[fieldName].$invalid) {
-                    // To preserve the order of the keys, delete each one and recreate
-                    const newObj = {};
-                    angular.copy(scope.valueObjRef, newObj);
-                    angular.forEach(newObj, function(value: any, key: string) {
-                        delete scope.valueObjRef[key];
-                        if (key == currentKey) {
-                            scope.valueObjRef[newKey] = value;
-                        } else {
-                            scope.valueObjRef[key] = value;
-                        }
-                    });
-                }
-            }
+
+            scope.parentFormObj[fieldName].$setValidity('keyExist', true);
             scope.isMapKeysUnique = true;
-            
+            if (!scope.parentFormObj[fieldName].$invalid) {
+                // To preserve the order of the keys, delete each one and recreate
+                const newObj = {};
+                angular.copy(scope.valueObjRef, newObj);
+                angular.forEach(newObj, function(value: any, key: string) {
+                    delete scope.valueObjRef[key];
+                    if (key == currentKey) {
+                        scope.valueObjRef[newKey] = value;
+                    } else {
+                        scope.valueObjRef[key] = value;
+                    }
+                });
+            }
         };
 
         scope.deleteMapItem = (index: number): void => {
@@ -239,7 +233,7 @@ export class TypeMapDirective implements ng.IDirective {
                 if (scope.parentProperty.subPropertyToscaFunctions != null) {
                     const subToscaFunctionList: SubPropertyToscaFunction[] = [];
                     scope.parentProperty.subPropertyToscaFunctions.forEach((SubPropertyToscaFunction, index) => {
-                        if (SubPropertyToscaFunction.subPropertyPath.toString() != scope.mapKeys[flagIndex]) {
+                        if (SubPropertyToscaFunction.subPropertyPath.indexOf(scope.mapKeys[flagIndex]) == -1) {
                             subToscaFunctionList.push(SubPropertyToscaFunction);
                         }
                     });
@@ -248,30 +242,24 @@ export class TypeMapDirective implements ng.IDirective {
             }
         };
 
-        scope.onGetToscaFunction = (toscaGetFunction: ToscaGetFunction, index:string): void => {
-            let key:string = index;
+        scope.onGetToscaFunction = (toscaGetFunction: ToscaGetFunction, key: string): void => {
             if (scope.parentProperty.subPropertyToscaFunctions != null) {
-                let toscaFlag : boolean = true;
-                scope.parentProperty.subPropertyToscaFunctions.forEach(SubPropertyToscaFunction => {
-                    if (SubPropertyToscaFunction.subPropertyPath.toString() == key) {
+                scope.parentProperty.subPropertyToscaFunctions.forEach((SubPropertyToscaFunction) => {
+                    if (SubPropertyToscaFunction.subPropertyPath.indexOf(key) != -1) {
                         SubPropertyToscaFunction.toscaFunction = toscaGetFunction;
-                        toscaFlag = false;
                         return;
                     }
                 });
-                if (toscaFlag) {
-                    let subPropertyToscaFunction = new SubPropertyToscaFunction();
-                    subPropertyToscaFunction.toscaFunction = toscaGetFunction;
-                    subPropertyToscaFunction.subPropertyPath = [key];
-                    scope.parentProperty.subPropertyToscaFunctions.push(subPropertyToscaFunction);
-                }
-            } else {  
-                let subPropertyToscaFunction = new SubPropertyToscaFunction();
-                subPropertyToscaFunction.toscaFunction = toscaGetFunction;
-                subPropertyToscaFunction.subPropertyPath = [key];
-                scope.parentProperty.subPropertyToscaFunctions = [subPropertyToscaFunction];
+
             }
-        }
+            if (scope.parentProperty.subPropertyToscaFunctions == null) {
+                scope.parentProperty.subPropertyToscaFunctions = [];
+            }
+            const subPropertyToscaFunction = new SubPropertyToscaFunction();
+            subPropertyToscaFunction.toscaFunction = toscaGetFunction;
+            subPropertyToscaFunction.subPropertyPath = [key];
+            scope.parentProperty.subPropertyToscaFunctions.push(subPropertyToscaFunction);
+        };
 
         scope.addMapItemFields = (): void => {
             if (!scope.valueObjRef) {
index 1450b7f..b9191cc 100644 (file)
@@ -71,7 +71,6 @@ import { FileUtils } from '../utils/file-utils';
 import { ValidationUtils } from '../utils/validation-utils';
 import {ReqAndCapabilitiesService} from "../ng2/pages/workspace/req-and-capabilities/req-and-capabilities.service";
 import {ToscaArtifactService} from "../ng2/services/tosca-artifact.service";
-import { PropertiesUtils } from 'app/ng2/pages/properties-assignment/services/properties.utils';
 
 const moduleName: string = 'Sdc.Services';
 const serviceModule: ng.IModule = angular.module(moduleName, []);
@@ -134,4 +133,3 @@ serviceModule.service('ElementService', downgradeInjectable(ElementService));
 serviceModule.service('ModelService', downgradeInjectable(ModelService));
 serviceModule.service('ImportVSPService', downgradeInjectable(ImportVSPService));
 serviceModule.service('ToscaArtifactService', downgradeInjectable(ToscaArtifactService));
-serviceModule.service('PropertiesUtils', downgradeInjectable(PropertiesUtils));
index 792d9cb..34ed9a6 100644 (file)
@@ -82,6 +82,7 @@ export class ToscaFunctionComponent implements OnInit, OnChanges {
             if (!this.isInitialized) {
                 return;
             }
+            this.emitValidityChange();
             if (this.formGroup.valid) {
                 this.onValidFunction.emit(this.toscaFunctionForm.value);
             }
@@ -110,12 +111,12 @@ export class ToscaFunctionComponent implements OnInit, OnChanges {
             let keyToFind = [this.compositionMapKey];
             let subPropertyToscaFunction = this.property.subPropertyToscaFunctions.find(subPropertyToscaFunction => this.areEqual(subPropertyToscaFunction.subPropertyPath, keyToFind));
 
-            if (subPropertyToscaFunction){
-                this.toscaFunction = subPropertyToscaFunction.toscaFunction;
-                this.toscaFunctionForm.setValue(this.toscaFunction);
-                this.toscaFunctionTypeForm.setValue(this.toscaFunction.type);
-            }
-            return;
+                if (subPropertyToscaFunction){
+                       this.toscaFunction = subPropertyToscaFunction.toscaFunction;
+                    this.toscaFunctionForm.setValue(this.toscaFunction);
+                    this.toscaFunctionTypeForm.setValue(this.toscaFunction.type);
+                }
+                return;
         }
            if (this.property instanceof PropertyDeclareAPIModel && this.property.subPropertyToscaFunctions && (<PropertyDeclareAPIModel> this.property).propertiesName){
                let propertiesPath = (<PropertyDeclareAPIModel> this.property).propertiesName.split("#");
@@ -266,7 +267,6 @@ export class ToscaFunctionComponent implements OnInit, OnChanges {
         } else {
             this.toscaFunctionForm.setValue(undefined);
         }
-        this.emitValidityChange();
     }
 
     onYamlFunctionValidityChange(validationEvent: YamlFunctionValidationEvent): void {
index 1fe4677..a1ed8aa 100644 (file)
@@ -486,7 +486,7 @@ export class ToscaGetFunctionComponent implements OnInit, OnChanges {
         if (this.typeHasSchema(this.property.type)) {
             if ((this.property instanceof PropertyDeclareAPIModel && (<PropertyDeclareAPIModel> this.property).input instanceof DerivedFEProperty) || this.compositionMap) {
                 let childObject : DerivedFEProperty = (<DerivedFEProperty>(<PropertyDeclareAPIModel> this.property).input);
-                let childSchemaType = (this.property != null && this.property.schemaType != null) ? this.property.schemaType : childObject.type;
+                let childSchemaType = this.property.schemaType != null ? this.property.schemaType : childObject.type;
                 if(this.isComplexType(childSchemaType) && !this.compositionMap){
                     if (childObject.type == PROPERTY_TYPES.MAP && childObject.isChildOfListOrMap) {
                         return validPropertyType === PROPERTY_TYPES.STRING;
@@ -501,15 +501,12 @@ export class ToscaGetFunctionComponent implements OnInit, OnChanges {
             }
             return validPropertyType === this.property.type && this.property.schema.property.type === property.schema.property.type;
         }
-        if ((this.property.schema.property.isDataType || this.isComplexType(this.property.type)) && this.property instanceof PropertyDeclareAPIModel && (<PropertyDeclareAPIModel>this.property).propertiesName){
+        if (this.property.schema.property.isDataType && this.property instanceof PropertyDeclareAPIModel && (<PropertyDeclareAPIModel>this.property).propertiesName){
             let typeToMatch = (<PropertyDeclareAPIModel> this.property).input.type;
             let childObject : DerivedFEProperty = (<DerivedFEProperty>(<PropertyDeclareAPIModel> this.property).input);
             if (childObject.type == PROPERTY_TYPES.MAP && childObject.isChildOfListOrMap) {
                 typeToMatch = PROPERTY_TYPES.STRING;
             }
-            if ((typeToMatch === PROPERTY_TYPES.LIST || typeToMatch === PROPERTY_TYPES.MAP) && (<PropertyDeclareAPIModel> this.property).input.schema.property.type && this.compositionMap && !isNaN(Number(this.compositionMapKey))) {
-                typeToMatch = (<PropertyDeclareAPIModel> this.property).input.schema.property.type;
-            }
             return validPropertyType === typeToMatch;
         }