Support TOSCA functions in Node Filters
[sdc.git] / catalog-ui / src / app / models / tosca-get-function.ts
index 2386338..7e6c5ad 100644 (file)
@@ -23,8 +23,9 @@ import {PropertySource} from "./property-source";
 import {ToscaGetFunctionType} from "./tosca-get-function-type";
 import {ToscaFunction} from "./tosca-function";
 import {ToscaFunctionType} from "./tosca-function-type.enum";
+import {ToscaFunctionParameter} from "./tosca-function-parameter";
 
-export class ToscaGetFunction implements ToscaFunction {
+export class ToscaGetFunction implements ToscaFunction, ToscaFunctionParameter {
     type: ToscaFunctionType;
     propertyUniqueId: string;
     propertyName: string;
@@ -39,6 +40,8 @@ export class ToscaGetFunction implements ToscaFunction {
         if (!toscaGetFunction) {
             return;
         }
+        this.type = toscaGetFunction.type;
+        this.value = toscaGetFunction.value;
         this.propertyUniqueId = toscaGetFunction.propertyUniqueId;
         this.propertyName = toscaGetFunction.propertyName;
         this.propertySource = toscaGetFunction.propertySource;
@@ -50,4 +53,38 @@ export class ToscaGetFunction implements ToscaFunction {
         }
     }
 
+    public buildValueString(): string {
+        return JSON.stringify(this.buildValueObject());
+    }
+
+    public buildValueObject(): Object {
+        if (this.functionType == ToscaGetFunctionType.GET_PROPERTY || this.functionType == ToscaGetFunctionType.GET_ATTRIBUTE) {
+            return this.buildFunctionValueWithPropertySource();
+        }
+        if (this.functionType == ToscaGetFunctionType.GET_INPUT) {
+            return this.buildGetInputFunctionValue();
+        }
+        return undefined;
+    }
+
+    private buildGetInputFunctionValue(): Object {
+        if (this.propertyPathFromSource.length === 1) {
+            return {[this.functionType.toLowerCase()]: this.propertyPathFromSource[0]};
+        }
+        return {[this.functionType.toLowerCase()]: this.propertyPathFromSource};
+    }
+
+    private buildFunctionValueWithPropertySource(): Object {
+        if (this.propertySource == PropertySource.SELF) {
+            return {
+                [this.functionType.toLowerCase()]: [PropertySource.SELF, ...this.propertyPathFromSource]
+            };
+        }
+        if (this.propertySource == PropertySource.INSTANCE) {
+            return {
+                [this.functionType.toLowerCase()]: [this.sourceName, ...this.propertyPathFromSource]
+            };
+        }
+    }
+
 }
\ No newline at end of file