fixed dsl builder to correctly add output 10/93710/1
authorBenjamin, Max <max.benjamin@att.com>
Fri, 16 Aug 2019 14:59:18 +0000 (10:59 -0400)
committerBenjamin, Max (mb388a) <mb388a@att.com>
Fri, 16 Aug 2019 14:59:19 +0000 (10:59 -0400)
fixed dsl builder to correctly add output
look for lambda key rather than parent class null

Issue-ID: SO-2233
Signed-off-by: Benjamin, Max (mb388a) <mb388a@att.com>
Change-Id: I251b9b8b4c391354b9759ee16a2462df43c188f9

common/src/main/java/org/onap/so/client/graphinventory/entities/DSLQueryBuilder.java
common/src/test/java/org/onap/so/client/aai/DSLQueryBuilderTest.java

index ffbb86f..ad3bb6c 100644 (file)
@@ -20,6 +20,7 @@
 
 package org.onap.so.client.graphinventory.entities;
 
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -49,8 +50,24 @@ public class DSLQueryBuilder<S, E> implements QueryStep {
     }
 
     public DSLQueryBuilder<S, E> output() {
-        if (steps.get(steps.size() - 1) instanceof DSLNode) {
+        Object obj = steps.get(steps.size() - 1);
+        if (obj instanceof DSLNode) {
             ((DSLNode) steps.get(steps.size() - 1)).output();
+        } else if (obj.getClass().getName().contains("$$Lambda$")) {
+            // process lambda expressions
+            for (Field f : obj.getClass().getDeclaredFields()) {
+                f.setAccessible(true);
+                Object o;
+                try {
+                    o = f.get(obj);
+                    if (o instanceof DSLQueryBuilder && ((DSLQueryBuilder) o).steps.get(0) instanceof DSLNode) {
+                        ((DSLNode) ((DSLQueryBuilder) o).steps.get(0)).output();
+                    }
+                } catch (IllegalArgumentException | IllegalAccessException e) {
+                }
+                f.setAccessible(false);
+                break;
+            }
         }
         return this;
     }
index 590e838..fb45652 100644 (file)
@@ -24,6 +24,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import org.junit.Test;
 import org.onap.so.client.graphinventory.entities.DSLNode;
+import org.onap.so.client.graphinventory.entities.DSLNodeKey;
 import org.onap.so.client.graphinventory.entities.DSLQueryBuilder;
 import org.onap.so.client.graphinventory.entities.__;
 
@@ -118,4 +119,30 @@ public class DSLQueryBuilderTest {
         assertTrue(builder.equals(
                 "cloud-region('cloud-owner', 'owner')('cloud-region-id', 'id') > vlan-tag*('vlan-id-outer', 167)('my-boolean', true)"));
     }
+
+    @Test
+    public void outputOnNodeLambdasTest() {
+        DSLQueryBuilder<DSLNode, DSLNode> builder =
+                new DSLQueryBuilder<>(new DSLNode(AAIObjectType.L_INTERFACE, new DSLNodeKey("interface-id", "myId")));
+
+        builder.to(AAIObjectType.VSERVER, __.key("vserver-name", "myName")).output().to(AAIObjectType.P_INTERFACE)
+                .output();
+        assertEquals("l-interface('interface-id', 'myId') > vserver*('vserver-name', 'myName') > p-interface*",
+                builder.build());
+    }
+
+    @Test
+    public void skipOutputOnUnionTest() {
+        DSLQueryBuilder<DSLNode, DSLNode> builder =
+                new DSLQueryBuilder<>(new DSLNode(AAIObjectType.GENERIC_VNF, __.key("vnf-id", "vnfId")).output());
+
+        builder.union(__.node(AAIObjectType.PSERVER).output().to(__.node(AAIObjectType.COMPLEX).output()),
+                __.node(AAIObjectType.VSERVER)
+                        .to(__.node(AAIObjectType.PSERVER).output().to(__.node(AAIObjectType.COMPLEX).output())))
+                .output();
+
+        assertEquals(
+                "generic-vnf*('vnf-id', 'vnfId') > " + "[ pserver* > complex*, " + "vserver > pserver* > complex* ]",
+                builder.build());
+    }
 }