diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/ERManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/ERManagement.java index 8a8d88a..4e54529 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/ERManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/ERManagement.java @@ -21,13 +21,15 @@ public interface ERManagement { public void setHonourPropagationConstraintsInContextSharing(boolean honourPropagationConstraintsInContextSharing); - public Map internalAddToContext(SecurityContext targetSecurityContext) + public Map internalAddToContext() throws ContextException, ResourceRegistryException; public Map addToContext(UUID contextUUID) throws SchemaViolationException, NotFoundException, ContextException, ResourceRegistryException; - public Map internalRemoveFromContext(SecurityContext targetSecurityContext) + public void setTargetSecurityContext(SecurityContext targetSecurityContext); + + public Map internalRemoveFromContext() throws ContextException, ResourceRegistryException; public Map removeFromContext(UUID contextUUID) diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/ERManagementUtility.java b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/ERManagementUtility.java index d8a3ec7..56cc824 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/ERManagementUtility.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/ERManagementUtility.java @@ -52,7 +52,8 @@ public class ERManagementUtility { ((ERManagement) elementManagement).setHonourPropagationConstraintsInContextSharing(false); ((ERManagement) elementManagement).setDryRunContextSharing(dryRun); // enforcedInstances.putAll(((ERManagement) elementManagement).internalAddToContext(targetSecurityContext)); - ((ERManagement) elementManagement).internalAddToContext(targetSecurityContext); + ((ERManagement) elementManagement).setTargetSecurityContext(targetSecurityContext); + ((ERManagement) elementManagement).internalAddToContext(); instancesManagement.put(uuid, elementManagement); } @@ -129,7 +130,8 @@ public class ERManagementUtility { ((ERManagement) elementManagement).setHonourPropagationConstraintsInContextSharing(false); ((ERManagement) elementManagement).setDryRunContextSharing(dryRun); //enforcedInstances.putAll(((ERManagement) elementManagement).internalRemoveFromContext(targetSecurityContext)); - ((ERManagement) elementManagement).internalRemoveFromContext(targetSecurityContext); + ((ERManagement) elementManagement).setTargetSecurityContext(targetSecurityContext); + ((ERManagement) elementManagement).internalRemoveFromContext(); instancesManagement.put(uuid, elementManagement); } 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 5bd4a0e..b63370d 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 @@ -58,6 +58,11 @@ import com.orientechnologies.orient.core.sql.executor.OResultSet; */ public abstract class EntityManagement extends EntityElementManagement implements ERManagement { + /** + * The target context of an addToContex/RemoveFromContext + */ + protected SecurityContext targetSecurityContext; + /** * By the default the system execute the the operation of * context sharing so this variable is initialised as false. @@ -105,6 +110,11 @@ public abstract class EntityManagement */ protected boolean honourPropagationConstraintsInContextSharing; + @Override + public void setTargetSecurityContext(SecurityContext targetSecurityContext) { + this.targetSecurityContext = targetSecurityContext; + } + public boolean isDryRunContextSharing() { return dryRunContextSharing; } @@ -292,7 +302,7 @@ public abstract class EntityManagement } } - protected Map reallyAddToContext(SecurityContext targetSecurityContext) + protected Map reallyAddToContext() throws ContextException, ResourceRegistryException { Map affectedInstances = new HashMap<>(); @@ -314,7 +324,8 @@ public abstract class EntityManagement RelationManagement relationManagement = getRelationManagement(edge); relationManagement.setDryRunContextSharing(dryRunContextSharing); relationManagement.setHonourPropagationConstraintsInContextSharing(honourPropagationConstraintsInContextSharing); - affectedInstances.putAll(relationManagement.internalAddToContext(targetSecurityContext)); + relationManagement.setTargetSecurityContext(targetSecurityContext); + affectedInstances.putAll(relationManagement.internalAddToContext()); } } @@ -322,10 +333,10 @@ public abstract class EntityManagement } @Override - public Map internalAddToContext(SecurityContext targetSecurityContext) + public Map internalAddToContext() throws ContextException, ResourceRegistryException { try { - Map affectedInstances = reallyAddToContext(targetSecurityContext); + Map affectedInstances = reallyAddToContext(); if(!dryRunContextSharing) { HeaderUtility.updateModifiedByAndLastUpdate(element); element.save(); @@ -348,9 +359,9 @@ public abstract class EntityManagement oDatabaseDocument = workingContext.getDatabaseDocument(PermissionMode.WRITER); oDatabaseDocument.begin(); - SecurityContext targetSecurityContext = ContextUtility.getInstance().getSecurityContextByUUID(contextUUID); + targetSecurityContext = ContextUtility.getInstance().getSecurityContextByUUID(contextUUID); - Map affectedInstances = internalAddToContext(targetSecurityContext); + Map affectedInstances = internalAddToContext(); sanityCheck(); @@ -382,10 +393,10 @@ public abstract class EntityManagement } @Override - public Map internalRemoveFromContext(SecurityContext targetSecurityContext) + public Map internalRemoveFromContext() throws ContextException, ResourceRegistryException { try { - Map affectedInstances = reallyRemoveFromContext(targetSecurityContext); + Map affectedInstances = reallyRemoveFromContext(); if(!dryRunContextSharing) { HeaderUtility.updateModifiedByAndLastUpdate(element); element.save(); @@ -400,7 +411,7 @@ public abstract class EntityManagement } } - protected Map reallyRemoveFromContext(SecurityContext targetSecurityContext) + protected Map reallyRemoveFromContext() throws ContextException, ResourceRegistryException { Map affectedInstances = new HashMap<>(); @@ -412,7 +423,8 @@ public abstract class EntityManagement RelationManagement relationManagement = getRelationManagement(edge); relationManagement.setDryRunContextSharing(dryRunContextSharing); relationManagement.setHonourPropagationConstraintsInContextSharing(honourPropagationConstraintsInContextSharing); - affectedInstances.putAll(relationManagement.internalRemoveFromContext(targetSecurityContext)); + relationManagement.setTargetSecurityContext(targetSecurityContext); + affectedInstances.putAll(relationManagement.internalRemoveFromContext()); } } @@ -438,9 +450,9 @@ public abstract class EntityManagement oDatabaseDocument = workingContext.getDatabaseDocument(PermissionMode.WRITER); oDatabaseDocument.begin(); - SecurityContext targetSecurityContext = ContextUtility.getInstance().getSecurityContextByUUID(contextUUID); + targetSecurityContext = ContextUtility.getInstance().getSecurityContextByUUID(contextUUID); - Map affectedInstances = internalRemoveFromContext(targetSecurityContext); + Map affectedInstances = internalRemoveFromContext(); sanityCheck(); 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 553d7d1..e56ebc9 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 @@ -26,7 +26,6 @@ import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.resour import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.resource.ResourceNotFoundException; import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaException; import org.gcube.informationsystem.resourceregistry.api.exceptions.schema.SchemaViolationException; -import org.gcube.informationsystem.resourceregistry.contexts.security.SecurityContext; import org.gcube.informationsystem.resourceregistry.contexts.security.SecurityContext.PermissionMode; import org.gcube.informationsystem.resourceregistry.instances.base.ElementManagementUtility; import org.gcube.informationsystem.resourceregistry.instances.model.relations.ConsistsOfManagement; @@ -244,7 +243,7 @@ public class ResourceManagement extends EntityManagement } @Override - protected Map reallyAddToContext(SecurityContext targetSecurityContext) + protected Map reallyAddToContext() throws ContextException, ResourceRegistryException { Map affectedInstances = new HashMap<>(); @@ -269,7 +268,8 @@ public class ResourceManagement extends EntityManagement RelationManagement relationManagement = getRelationManagement(edge); relationManagement.setDryRunContextSharing(dryRunContextSharing); relationManagement.setHonourPropagationConstraintsInContextSharing(honourPropagationConstraintsInContextSharing); - Map resourceCharacterisationInstances = relationManagement.internalAddToContext(targetSecurityContext); + relationManagement.setTargetSecurityContext(targetSecurityContext); + Map resourceCharacterisationInstances = relationManagement.internalAddToContext(); if(relationManagement instanceof ConsistsOfManagement) { facetCounter = facetCounter + resourceCharacterisationInstances.size(); } diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/relations/RelationManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/relations/RelationManagement.java index bb9aee4..158652b 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/relations/RelationManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/relations/RelationManagement.java @@ -57,6 +57,11 @@ import com.orientechnologies.orient.core.record.impl.ODocument; public abstract class RelationManagement, TET extends EntityType> extends RelationElementManagement implements ERManagement { + /** + * The target context of an addToContex/RemoveFromContext + */ + protected SecurityContext targetSecurityContext; + /** * By the default the system execute the the operation of * context sharing so this variable is initialised as false. @@ -104,6 +109,11 @@ public abstract class RelationManagement reallyAddToContext(SecurityContext targetSecurityContext) + protected Map reallyAddToContext() throws ContextException, ResourceRegistryException { getElement(); @@ -446,7 +456,8 @@ public abstract class RelationManagement internalAddToContext(SecurityContext targetSecurityContext) + public Map internalAddToContext() throws ContextException, ResourceRegistryException { try { - Map affectedInstances = reallyAddToContext(targetSecurityContext); + Map affectedInstances = reallyAddToContext(); if(propagationConstraint.getAddConstraint()==PropagationConstraint.AddConstraint.propagate) { if(!dryRunContextSharing) { HeaderUtility.updateModifiedByAndLastUpdate(element); @@ -501,7 +512,7 @@ public abstract class RelationManagement forcedAddToContext(SecurityContext targetSecurityContext) + public Map forcedAddToContext() throws ContextException, ResourceRegistryException { getElement(); @@ -511,13 +522,15 @@ public abstract class RelationManagement added = forcedAddToContext(targetSecurityContext); + Map added = forcedAddToContext(); sanityCheck(); @@ -563,7 +576,7 @@ public abstract class RelationManagement reallyRemoveFromContext(SecurityContext targetSecurityContext) + protected Map reallyRemoveFromContext() throws ContextException, ResourceRegistryException { getElement(); @@ -604,10 +617,10 @@ public abstract class RelationManagement internalRemoveFromContext(SecurityContext targetSecurityContext) + public Map internalRemoveFromContext() throws ContextException, ResourceRegistryException { try { - Map affectedInstances = reallyRemoveFromContext(targetSecurityContext); + Map affectedInstances = reallyRemoveFromContext(); if(!dryRunContextSharing) { HeaderUtility.updateModifiedByAndLastUpdate(element); element.save(); @@ -677,9 +690,9 @@ public abstract class RelationManagement affectedInstances = internalRemoveFromContext(targetSecurityContext); + Map affectedInstances = internalRemoveFromContext(); sanityCheck();