From 41b112670e792b7b76c6aafbe3240768ffb4e174 Mon Sep 17 00:00:00 2001 From: "luca.frosini" Date: Thu, 12 Jan 2017 10:13:09 +0000 Subject: [PATCH] Implementing get all relation from a provided resource git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/information-system/resource-registry@141522 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../er/relation/RelationManagement.java | 61 ++++++++++++--- .../resourceregistry/er/ERManagementTest.java | 75 ++++++++++++++++++- 2 files changed, 125 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/er/relation/RelationManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/er/relation/RelationManagement.java index ee1c6de..9ae6d84 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/er/relation/RelationManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/er/relation/RelationManagement.java @@ -3,7 +3,9 @@ */ package org.gcube.informationsystem.resourceregistry.er.relation; +import java.util.ArrayList; import java.util.Iterator; +import java.util.List; import java.util.UUID; import org.codehaus.jettison.json.JSONArray; @@ -81,19 +83,34 @@ public abstract class RelationManagement extends ERManagemen this.orientGraph = orientGraph; } + @Override public String serialize() throws ResourceRegistryException { return serializeAsJson().toString(); } + @Override public JSONObject serializeAsJson() throws ResourceRegistryException { + return serializeAsJson(false); + } + + + public JSONObject serializeAsJson(boolean inverse) throws ResourceRegistryException { JSONObject ret = Utility.toJsonObject((OrientEdge) getElement(), false); - Vertex vertex = element.getVertex(Direction.IN); + Direction direction = Direction.IN; + String property = Relation.TARGET_PROPERTY; + + if(inverse){ + direction = Direction.OUT; + property = Relation.SOURCE_PROPERTY; + } + + Vertex vertex = element.getVertex(direction); EntityManagement entityManagement = EntityManagement .getEntityManagement(orientGraph, vertex); try { - ret.put(Relation.TARGET_PROPERTY, + ret.put(property, entityManagement.serializeAsJson()); } catch (JSONException e) { new ResourceRegistryException(e); @@ -101,7 +118,8 @@ public abstract class RelationManagement extends ERManagemen return ret; } - + + public Edge reallyCreate(UUID sourceUUID, UUID targetUUID) throws ResourceRegistryException { ResourceManagement srmSource = new ResourceManagement(orientGraph); @@ -473,20 +491,30 @@ public abstract class RelationManagement extends ERManagemen } } - protected String serializeEdges(Iterable edges) throws ResourceRegistryException{ - JSONArray jsonArray = new JSONArray(); + protected List serializeEdges(Iterable edges, boolean postFilterPolymorphic, boolean inverse) throws ResourceRegistryException{ + List list = new ArrayList<>(); for(Edge edge : edges){ + if(postFilterPolymorphic && edge.getLabel().compareTo(erType)!=0){ + continue; + } RelationManagement relationManagement = getRelationManagement(orientGraph, edge); - JSONObject jsonObject = relationManagement.serializeAsJson(); - jsonArray.put(jsonObject); + JSONObject jsonObject = relationManagement.serializeAsJson(inverse); + list.add(jsonObject); } + return list; + } + + protected String serializeJSONObjectList(List list){ + JSONArray jsonArray = new JSONArray(list); return jsonArray.toString(); } + @Override public String reallyGetAll(boolean polymorphic) throws ResourceRegistryException { Iterable edges = orientGraph.getEdgesOfClass(erType, polymorphic); - return serializeEdges(edges); + List list = serializeEdges(edges, false, false); + return serializeJSONObjectList(list); } public String reallyGetAllFrom(UUID uuid, Direction direction, boolean polymorphic) throws ResourceRegistryException { @@ -500,9 +528,22 @@ public abstract class RelationManagement extends ERManagemen } Vertex vertex = (Vertex) entityManagement.getElement(); - Iterable edges = vertex.getEdges(direction, erType); - return serializeEdges(edges); + List list = new ArrayList<>(); + + if(direction.equals(Direction.BOTH) || direction.equals(Direction.OUT)){ + Iterable edges = vertex.getEdges(Direction.OUT, erType); + list.addAll(serializeEdges(edges, !polymorphic, false)); + } + + + if(direction.equals(Direction.BOTH) || direction.equals(Direction.IN)){ + Iterable edges = vertex.getEdges(Direction.IN, erType); + list.addAll(serializeEdges(edges, !polymorphic, true)); + } + + return serializeJSONObjectList(list); + } public String allFrom(UUID uuid, Direction direction, boolean polymorphic) throws ResourceRegistryException { diff --git a/src/test/java/org/gcube/informationsystem/resourceregistry/er/ERManagementTest.java b/src/test/java/org/gcube/informationsystem/resourceregistry/er/ERManagementTest.java index 7b9731f..6386e44 100644 --- a/src/test/java/org/gcube/informationsystem/resourceregistry/er/ERManagementTest.java +++ b/src/test/java/org/gcube/informationsystem/resourceregistry/er/ERManagementTest.java @@ -55,6 +55,8 @@ import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.tinkerpop.blueprints.Direction; + /** * @author Luca Frosini (ISTI - CNR) * @@ -506,5 +508,76 @@ public class ERManagementTest extends ScopedTest { } - + + @Test + public void testGetAllFrom() throws Exception{ + Map map = createHostingNodeAndEService(); + + EService eService = (EService) map.get(EService.NAME); + HostingNode hostingNode = (HostingNode) map.get(HostingNode.NAME); + + + IsRelatedToManagement isRelatedToManagement = new IsRelatedToManagement(); + isRelatedToManagement.setElementType(IsRelatedTo.NAME); + + + String json = isRelatedToManagement.allFrom(eService.getHeader().getUUID(), Direction.BOTH, true); + @SuppressWarnings("rawtypes") + List isRelatedToList = Entities.unmarshalList(IsRelatedTo.class, json); + Assert.assertTrue(isRelatedToList.size()==1); + Assert.assertTrue(isRelatedToList.get(0).getSource().getHeader().getUUID().compareTo(hostingNode.getHeader().getUUID())==0); + + json = isRelatedToManagement.allFrom(eService.getHeader().getUUID(), Direction.IN, true); + isRelatedToList = Entities.unmarshalList(IsRelatedTo.class, json); + Assert.assertTrue(isRelatedToList.size()==1); + Assert.assertTrue(isRelatedToList.get(0).getSource().getHeader().getUUID().compareTo(hostingNode.getHeader().getUUID())==0); + + json = isRelatedToManagement.allFrom(eService.getHeader().getUUID(), Direction.OUT, true); + isRelatedToList = Entities.unmarshalList(IsRelatedTo.class, json); + Assert.assertTrue(isRelatedToList.size()==0); + + + + json = isRelatedToManagement.allFrom(eService.getHeader().getUUID(), Direction.BOTH, false); + Assert.assertTrue(isRelatedToList.size()==0); + json = isRelatedToManagement.allFrom(eService.getHeader().getUUID(), Direction.IN, false); + Assert.assertTrue(isRelatedToList.size()==0); + json = isRelatedToManagement.allFrom(eService.getHeader().getUUID(), Direction.OUT, false); + Assert.assertTrue(isRelatedToList.size()==0); + + + + + json = isRelatedToManagement.allFrom(hostingNode.getHeader().getUUID(), Direction.BOTH, true); + Assert.assertTrue(isRelatedToList.size()==1); + Assert.assertTrue(isRelatedToList.get(0).getTarget().getHeader().getUUID().compareTo(eService.getHeader().getUUID())==0); + + json = isRelatedToManagement.allFrom(hostingNode.getHeader().getUUID(), Direction.IN, true); + Assert.assertTrue(isRelatedToList.size()==0); + + json = isRelatedToManagement.allFrom(hostingNode.getHeader().getUUID(), Direction.OUT, true); + Assert.assertTrue(isRelatedToList.size()==1); + Assert.assertTrue(isRelatedToList.get(0).getTarget().getHeader().getUUID().compareTo(eService.getHeader().getUUID())==0); + + + + json = isRelatedToManagement.allFrom(hostingNode.getHeader().getUUID(), Direction.BOTH, false); + Assert.assertTrue(isRelatedToList.size()==0); + json = isRelatedToManagement.allFrom(hostingNode.getHeader().getUUID(), Direction.IN, false); + Assert.assertTrue(isRelatedToList.size()==0); + json = isRelatedToManagement.allFrom(hostingNode.getHeader().getUUID(), Direction.OUT, false); + Assert.assertTrue(isRelatedToList.size()==0); + + + + /* Removing created Entity and Relation to have a clean DB */ + + ResourceManagement resourceManagement = new ResourceManagement(); + resourceManagement.setUUID(hostingNode.getHeader().getUUID()); + resourceManagement.delete(); + + + + } + }