Update DBSerializer for relationships retrieving 45/75145/1
authorHarish Venkata Kajur <vk250x@att.com>
Fri, 28 Dec 2018 22:25:05 +0000 (17:25 -0500)
committerHarish Venkata Kajur <vk250x@att.com>
Fri, 28 Dec 2018 22:30:03 +0000 (17:30 -0500)
Enhance the code for how the db serializer works
when it comes to dealing with the relationships
For a particular vertex, when retrieving its relationship vertexes
it doesn't need to get all the properties of the relationship vertex
as it only cares about the aai-uri and named properties
so only partially retrieving those props that is needed for relationships

Issue-ID: AAI-1987
Change-Id: I1440c561d187ff180a599a3f52ac5c8715d5c8e3
Signed-off-by: Harish Venkata Kajur <vk250x@att.com>
aai-core/src/main/java/org/onap/aai/serialization/db/DBSerializer.java
aai-core/src/test/java/org/onap/aai/serialization/db/DbSerializerTest.java

index 9d107b1..95582b9 100644 (file)
@@ -928,16 +928,7 @@ public class DBSerializer {
      * @throws SecurityException         the security exception
      */
     private void copySimpleProperty(String property, Introspector obj, Vertex v) {
-
-        final Map<PropertyMetadata, String> metadata = obj.getPropertyMetadata(property);
-        String dbPropertyName = property;
-
-        if (metadata.containsKey(PropertyMetadata.DB_ALIAS)) {
-            dbPropertyName = metadata.get(PropertyMetadata.DB_ALIAS);
-        }
-
-
-        final Object temp = v.<Object>property(dbPropertyName).orElse(null);
+        final Object temp = getProperty(obj, property, v);
         if (temp != null) {
             obj.setValue(property, temp);
         }
@@ -1181,10 +1172,9 @@ public class DBSerializer {
         VertexProperty cousinVertexNodeType = cousin.property(AAIProperties.NODE_TYPE);
 
         if(cousinVertexNodeType.isPresent()){
-            if(namedPropNodes.contains(cousinVertexNodeType.value().toString())){
-                Introspector cousinObj = loader.introspectorFromName(cousinVertexNodeType.value().toString());
-                this.simpleDbToObject(cousinObj, cousin);
-                this.addRelatedToProperty(result, cousinObj);
+            String cousinType = cousinVertexNodeType.value().toString();
+            if(namedPropNodes.contains(cousinType)){
+                this.addRelatedToProperty(result, cousin, cousinType);
             }
         }
 
@@ -1244,37 +1234,43 @@ public class DBSerializer {
         return UriBuilder.fromPath(uri).build();
     }
 
-    /**
-     * Adds the r
-     *
-     * @param relationship the relationship
-     * @param child        the throws IllegalArgumentException, AAIUnknownObjectException child
-     * @throws AAIUnknownObjectException
-     * @throws IllegalArgumentException  elated to property.
-     */
-    public void addRelatedToProperty(Introspector relationship, Introspector child) throws AAIUnknownObjectException {
-        String nameProps = child.getMetadata(ObjectMetadata.NAME_PROPS);
+    public void addRelatedToProperty(Introspector relationship, Vertex cousinVertex, String cousinType) throws AAIUnknownObjectException {
+        Introspector obj = loader.introspectorFromName(cousinType);
+        String nameProps = obj.getMetadata(ObjectMetadata.NAME_PROPS);
         List<Introspector> relatedToProperties = new ArrayList<>();
 
         if (nameProps != null) {
             String[] props = nameProps.split(",");
             for (String prop : props) {
+                final Object temp = getProperty(obj, prop, cousinVertex);
                 Introspector relatedTo = relationship.newIntrospectorInstanceOfNestedProperty("related-to-property");
-                relatedTo.setValue("property-key", child.getDbName() + "." + prop);
-                relatedTo.setValue("property-value", child.getValue(prop));
+                relatedTo.setValue("property-key", cousinType + "." + prop);
+                relatedTo.setValue("property-value", temp);
                 relatedToProperties.add(relatedTo);
             }
         }
 
         if (!relatedToProperties.isEmpty()) {
             List relatedToList = (List) relationship.getValue("related-to-property");
-            for (Introspector obj : relatedToProperties) {
-                relatedToList.add(obj.getUnderlyingObject());
+            for (Introspector introspector : relatedToProperties) {
+                relatedToList.add(introspector.getUnderlyingObject());
             }
         }
 
     }
 
+    private Object getProperty(Introspector obj, String prop, Vertex vertex){
+
+        final Map<PropertyMetadata, String> metadata = obj.getPropertyMetadata(prop);
+        String dbPropertyName = prop;
+
+        if (metadata.containsKey(PropertyMetadata.DB_ALIAS)) {
+            dbPropertyName = metadata.get(PropertyMetadata.DB_ALIAS);
+        }
+
+        return vertex.<Object>property(dbPropertyName).orElse(null);
+    }
+
     /**
      * Creates the edge.
      *
index 5041c7d..42775cb 100644 (file)
@@ -47,6 +47,7 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.*;
 
+import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.*;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
@@ -714,18 +715,27 @@ public class DbSerializerTest extends AAISetup {
 
        @Test
        public void addRelatedToPropertyTest() throws AAIException {
+               engine.startTransaction();
+
+               Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf",
+                               "vnf-id","myname",
+                               "vnf-name","myname",
+                               "aai-uri", "/network/generic-vnfs/generic-vnf/myname"
+               );
+               engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name", "aai-uri", "/network/vnfcs/vnfc/a-name");
                Loader loader = loaderFactory.createLoaderForVersion(ModelType.MOXY, schemaVersions.getAppRootVersion());
                Introspector gv = loader.introspectorFromName("generic-vnf");
                gv.setValue("vnf-name", "myname");
+
                Introspector rel = loader.introspectorFromName("relationship");
                DBSerializer dbser = new DBSerializer(schemaVersions.getAppRootVersion(), dbEngine,
                                                                                                ModelType.MOXY, "AAI-TEST");
-               dbser.addRelatedToProperty(rel, gv);
+               dbser.addRelatedToProperty(rel, gvnf, "generic-vnf");
                List<Introspector> relToProps = rel.getWrappedListValue("related-to-property");
-               assertTrue(relToProps.size() == 1);
+               assertThat(relToProps.size(), is(1));
                Introspector relToProp = relToProps.get(0);
-               assertTrue("generic-vnf.vnf-name".equals(relToProp.getValue("property-key")));
-               assertTrue("myname".equals(relToProp.getValue("property-value")));
+               assertThat(relToProp.getValue("property-key"), is("generic-vnf.vnf-name"));
+               assertThat(relToProp.getValue("property-value"), is("myname"));
        }
 
        @Test