diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/er/entity/EntityManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/er/entity/EntityManagement.java index c159a40..2f3e383 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/er/entity/EntityManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/er/entity/EntityManagement.java @@ -67,10 +67,27 @@ public abstract class EntityManagement extends RelationManagement relationManagement = relationManagements.get(id); if(relationManagement==null) { relationManagement = ERManagementUtility.getRelationManagement(orientGraph, edge); + relationManagements.put(id, relationManagement); } return relationManagement; } + protected void addToRelationManagement(@SuppressWarnings("rawtypes") RelationManagement relationManagement) throws ResourceRegistryException { + Element elem = relationManagement.getElement(); + String id = elem.getId().toString(); + if(relationManagements.get(id)!=relationManagement) { + StringBuilder errorMessage = new StringBuilder(); + errorMessage.append("Two different instance of "); + errorMessage.append(relationManagement.getClass().getSimpleName()); + errorMessage.append(" point to the same "); + errorMessage.append(elem.getClass().getSimpleName()); + errorMessage.append(". "); + errorMessage.append(Utility.SHOULD_NOT_OCCUR_ERROR_MESSAGE); + throw new ResourceRegistryException(errorMessage.toString()); + } + relationManagements.put(id, relationManagement); + } + protected EntityManagement(AccessType accessType, OrientGraph orientGraph) { this(accessType); this.orientGraph = orientGraph; diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/er/entity/ResourceManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/er/entity/ResourceManagement.java index 9ae9bbd..6a98faf 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/er/entity/ResourceManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/er/entity/ResourceManagement.java @@ -84,9 +84,19 @@ public class ResourceManagement extends EntityManagement { Iterable edges = getElement().getEdges(Direction.OUT); for (Edge edge : edges) { + @SuppressWarnings("rawtypes") - RelationManagement relationManagement = ERManagementUtility.getRelationManagement(orientGraph, edge); - relationManagement.setSourceEntityManagement(this); + RelationManagement relationManagement = getRelationManagement(edge); + if(relationManagement.getSourceEntityManagement()==null) { + relationManagement.setSourceEntityManagement(this); + }else if(relationManagement.getSourceEntityManagement()!=null) { + StringBuilder errorMessage = new StringBuilder(); + errorMessage.append("SourceEntityManagement for "); + errorMessage.append(relationManagement.getClass().getSimpleName()); + errorMessage.append(" is not the one expected. "); + errorMessage.append(Utility.SHOULD_NOT_OCCUR_ERROR_MESSAGE); + throw new ResourceRegistryException(errorMessage.toString()); + } if (relationManagement instanceof ConsistsOfManagement) { try { @@ -106,8 +116,7 @@ public class ResourceManagement extends EntityManagement { * by default as design choice and not because forget * * else if(orientEdgeType.isSubClassOf(IsRelatedTo.NAME)){ - * JSONObject isRelatedTo = relationManagement - .serializeAsJson(); + * JSONObject isRelatedTo = relationManagement.serializeAsJson(true, true); * sourceResource = addIsRelatedTo(sourceResource, isRelatedTo); * } */ @@ -140,6 +149,7 @@ public class ResourceManagement extends EntityManagement { com.setJSON(consistOfJsonNode); com.setSourceEntityManagement(this); com.internalCreate(); + addToRelationManagement(com); } } @@ -152,6 +162,7 @@ public class ResourceManagement extends EntityManagement { irtm.setJSON(relationJsonNode); irtm.setSourceEntityManagement(this); irtm.internalCreate(); + addToRelationManagement(irtm); } } @@ -170,6 +181,7 @@ public class ResourceManagement extends EntityManagement { ConsistsOfManagement com = new ConsistsOfManagement(orientGraph); com.setJSON(relationJsonNode); com.internalCreateOrUdate(); + addToRelationManagement(com); } } @@ -181,6 +193,7 @@ public class ResourceManagement extends EntityManagement { orientGraph); irtm.setJSON(relationJsonNode); irtm.internalUpdate(); + addToRelationManagement(irtm); } } 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 28ba472..b29576f 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,6 @@ */ package org.gcube.informationsystem.resourceregistry.er.relation; -import java.io.StringWriter; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -92,7 +91,7 @@ public abstract class RelationManagement