From 69c5de8f6d5f4f05e152094bc1e40c03922dcd72 Mon Sep 17 00:00:00 2001 From: Harish Venkata Kajur Date: Fri, 28 Dec 2018 17:25:05 -0500 Subject: [PATCH] Update DBSerializer for relationships retrieving 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 --- .../onap/aai/serialization/db/DBSerializer.java | 52 ++++++++++------------ .../aai/serialization/db/DbSerializerTest.java | 18 ++++++-- 2 files changed, 38 insertions(+), 32 deletions(-) diff --git a/aai-core/src/main/java/org/onap/aai/serialization/db/DBSerializer.java b/aai-core/src/main/java/org/onap/aai/serialization/db/DBSerializer.java index 9d107b1f..95582b98 100644 --- a/aai-core/src/main/java/org/onap/aai/serialization/db/DBSerializer.java +++ b/aai-core/src/main/java/org/onap/aai/serialization/db/DBSerializer.java @@ -928,16 +928,7 @@ public class DBSerializer { * @throws SecurityException the security exception */ private void copySimpleProperty(String property, Introspector obj, Vertex v) { - - final Map metadata = obj.getPropertyMetadata(property); - String dbPropertyName = property; - - if (metadata.containsKey(PropertyMetadata.DB_ALIAS)) { - dbPropertyName = metadata.get(PropertyMetadata.DB_ALIAS); - } - - - final Object temp = v.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 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 metadata = obj.getPropertyMetadata(prop); + String dbPropertyName = prop; + + if (metadata.containsKey(PropertyMetadata.DB_ALIAS)) { + dbPropertyName = metadata.get(PropertyMetadata.DB_ALIAS); + } + + return vertex.property(dbPropertyName).orElse(null); + } + /** * Creates the edge. * diff --git a/aai-core/src/test/java/org/onap/aai/serialization/db/DbSerializerTest.java b/aai-core/src/test/java/org/onap/aai/serialization/db/DbSerializerTest.java index 5041c7d1..42775cbf 100644 --- a/aai-core/src/test/java/org/onap/aai/serialization/db/DbSerializerTest.java +++ b/aai-core/src/test/java/org/onap/aai/serialization/db/DbSerializerTest.java @@ -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 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 -- 2.16.6