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 2f3e383..e2a65d6 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 @@ -62,6 +62,11 @@ public abstract class EntityManagement extends } @SuppressWarnings("rawtypes") + /* + * It works perfectly in case of any kind of update. + * In case of use from create the cache does not work by using the ID because until commit the edge has a fake id + * starting with - (minus) sign. This not imply any collateral effect but a better solution is a desiderata. + */ protected RelationManagement getRelationManagement(Edge edge) throws ResourceRegistryException { String id = edge.getId().toString(); RelationManagement relationManagement = relationManagements.get(id); @@ -75,7 +80,7 @@ public abstract class EntityManagement extends protected void addToRelationManagement(@SuppressWarnings("rawtypes") RelationManagement relationManagement) throws ResourceRegistryException { Element elem = relationManagement.getElement(); String id = elem.getId().toString(); - if(relationManagements.get(id)!=relationManagement) { + if(relationManagements.get(id)!=null && relationManagements.get(id)!=relationManagement) { StringBuilder errorMessage = new StringBuilder(); errorMessage.append("Two different instance of "); errorMessage.append(relationManagement.getClass().getSimpleName()); 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 6a98faf..df9428a 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 @@ -87,9 +87,11 @@ public class ResourceManagement extends EntityManagement { @SuppressWarnings("rawtypes") RelationManagement relationManagement = getRelationManagement(edge); - if(relationManagement.getSourceEntityManagement()==null) { + if(relationManagement.giveMeSourceEntityManagementAsIs()==null) { relationManagement.setSourceEntityManagement(this); - }else if(relationManagement.getSourceEntityManagement()!=null) { + } + + if(relationManagement.giveMeSourceEntityManagementAsIs()!=this) { StringBuilder errorMessage = new StringBuilder(); errorMessage.append("SourceEntityManagement for "); errorMessage.append(relationManagement.getClass().getSimpleName()); 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 b29576f..5a6f001 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 @@ -52,8 +52,8 @@ public abstract class RelationManagement targetEntityClass; - private S sourceEntityManagement; - private T targetEntityManagement; + protected S sourceEntityManagement; + protected T targetEntityManagement; protected RelationManagement(AccessType accessType) { super(accessType); @@ -90,6 +90,14 @@ public abstract class RelationManagement