diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/EntityManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/EntityManagement.java index 54e8b2a..d8af1b9 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/EntityManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/EntityManagement.java @@ -414,6 +414,7 @@ public abstract class EntityManagement relationManagement.setHonourPropagationConstraintsInContextSharing(honourPropagationConstraintsInContextSharing); relationManagement.setTargetSecurityContext(targetSecurityContext); relationManagement.internalRemoveFromContext(); + addToRelationManagements(relationManagement); affectedInstances.putAll(relationManagement.getAffectedInstances()); } } diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/FacetManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/FacetManagement.java index 6edde5e..58e0649 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/FacetManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/FacetManagement.java @@ -70,9 +70,16 @@ public class FacetManagement extends EntityManagement { protected void reallyRemoveFromContext() throws ContextException, ResourceRegistryException { if(entryPoint) { + OEdge oEdge = getElement().getEdges(ODirection.IN).iterator().next(); + consistsOfManagement = new ConsistsOfManagement(); + consistsOfManagement.setElement(oEdge); + consistsOfManagement.setTargetEntityManagement(this); + affectedInstances.put(uuid, consistsOfManagement.serializeSelfAsJsonNode()); + OVertex oVertex = getElement().getVertices(ODirection.IN).iterator().next(); resourceManagement = new ResourceManagement(); resourceManagement.setElement(oVertex); + resourceManagement.addToRelationManagements(consistsOfManagement); } super.reallyRemoveFromContext(); } @@ -89,7 +96,7 @@ public class FacetManagement extends EntityManagement { OVertex oVertex = getElement().getVertices(ODirection.IN).iterator().next(); resourceManagement = new ResourceManagement(); resourceManagement.setElement(oVertex); - // TODO + resourceManagement.addToRelationManagements(consistsOfManagement); } affectedInstances.put(uuid, serializeSelfAsJsonNode()); @@ -126,7 +133,13 @@ public class FacetManagement extends EntityManagement { resourceManagement.setODatabaseDocument(oDatabaseDocument); break; - case ADD_TO_CONTEXT: case REMOVE_FROM_CONTEXT: + case ADD_TO_CONTEXT: + resourceManagement.setWorkingContext(targetSecurityContext); + targetSecurityContextODatabaseDocument = targetSecurityContext.getDatabaseDocument(PermissionMode.READER); + resourceManagement.setODatabaseDocument(targetSecurityContextODatabaseDocument); + break; + + case REMOVE_FROM_CONTEXT: resourceManagement.setWorkingContext(targetSecurityContext); targetSecurityContextODatabaseDocument = targetSecurityContext.getDatabaseDocument(PermissionMode.READER); resourceManagement.setODatabaseDocument(targetSecurityContextODatabaseDocument); diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/ResourceManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/ResourceManagement.java index 0fe1b11..608b739 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/ResourceManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/entities/ResourceManagement.java @@ -477,8 +477,17 @@ public class ResourceManagement extends EntityManagement break; } }else { + if(operation == Operation.REMOVE_FROM_CONTEXT && relationManagement!=null) { + /* + * The relation has been removed from the targetContext but it has not been committed. + * We must consider as not available in targetSecurityContext + */ + continue; + } + if(relationManagement==null) { relationManagement = getRelationManagement(edge); + relationManagements.put(id, relationManagement); } } diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/relations/ConsistsOfManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/relations/ConsistsOfManagement.java index eca0664..13f065e 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/relations/ConsistsOfManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/relations/ConsistsOfManagement.java @@ -129,6 +129,7 @@ public class ConsistsOfManagement extends RelationManagement