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
This commit is contained in:
parent
2b55c43477
commit
41b112670e
|
@ -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<R extends Relation> 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);
|
||||
|
@ -102,6 +119,7 @@ public abstract class RelationManagement<R extends Relation> 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<R extends Relation> extends ERManagemen
|
|||
}
|
||||
}
|
||||
|
||||
protected String serializeEdges(Iterable<Edge> edges) throws ResourceRegistryException{
|
||||
JSONArray jsonArray = new JSONArray();
|
||||
protected List<JSONObject> serializeEdges(Iterable<Edge> edges, boolean postFilterPolymorphic, boolean inverse) throws ResourceRegistryException{
|
||||
List<JSONObject> list = new ArrayList<>();
|
||||
for(Edge edge : edges){
|
||||
RelationManagement relationManagement = getRelationManagement(orientGraph, edge);
|
||||
JSONObject jsonObject = relationManagement.serializeAsJson();
|
||||
jsonArray.put(jsonObject);
|
||||
if(postFilterPolymorphic && edge.getLabel().compareTo(erType)!=0){
|
||||
continue;
|
||||
}
|
||||
RelationManagement relationManagement = getRelationManagement(orientGraph, edge);
|
||||
JSONObject jsonObject = relationManagement.serializeAsJson(inverse);
|
||||
list.add(jsonObject);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
protected String serializeJSONObjectList(List<JSONObject> list){
|
||||
JSONArray jsonArray = new JSONArray(list);
|
||||
return jsonArray.toString();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String reallyGetAll(boolean polymorphic) throws ResourceRegistryException {
|
||||
Iterable<Edge> edges = orientGraph.getEdgesOfClass(erType, polymorphic);
|
||||
return serializeEdges(edges);
|
||||
List<JSONObject> 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<R extends Relation> extends ERManagemen
|
|||
}
|
||||
|
||||
Vertex vertex = (Vertex) entityManagement.getElement();
|
||||
Iterable<Edge> edges = vertex.getEdges(direction, erType);
|
||||
|
||||
return serializeEdges(edges);
|
||||
List<JSONObject> list = new ArrayList<>();
|
||||
|
||||
if(direction.equals(Direction.BOTH) || direction.equals(Direction.OUT)){
|
||||
Iterable<Edge> edges = vertex.getEdges(Direction.OUT, erType);
|
||||
list.addAll(serializeEdges(edges, !polymorphic, false));
|
||||
}
|
||||
|
||||
|
||||
if(direction.equals(Direction.BOTH) || direction.equals(Direction.IN)){
|
||||
Iterable<Edge> 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 {
|
||||
|
|
|
@ -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)
|
||||
*
|
||||
|
@ -505,6 +507,77 @@ public class ERManagementTest extends ScopedTest {
|
|||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetAllFrom() throws Exception{
|
||||
Map<String, Resource> 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<IsRelatedTo> 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();
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue