diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/base/ElementManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/base/ElementManagement.java index 9df5070..3b8167a 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/base/ElementManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/base/ElementManagement.java @@ -792,7 +792,7 @@ public abstract class ElementManagement { oDatabaseDocument.commit(); }else { if(operationValidator==null) { - throw new ResourceRegistryException("A removeFromContext operation which must not honour PropagationConstraints have to provide an " + OperationValidator.class.getSimpleName()); + throw new ResourceRegistryException("AddFromContext operation which must not honour PropagationConstraints have to provide an " + OperationValidator.class.getSimpleName()); } if(operationValidator.isValidOperation(affectedInstances)) { oDatabaseDocument.commit(); @@ -845,7 +845,7 @@ public abstract class ElementManagement { oDatabaseDocument.commit(); }else { if(operationValidator==null) { - throw new ResourceRegistryException("A removeFromContext operation which must not honour PropagationConstraints have to provide an " + OperationValidator.class.getSimpleName()); + throw new ResourceRegistryException("RemoveFromContext operation which must not honour PropagationConstraints have to provide an " + OperationValidator.class.getSimpleName()); } if(operationValidator.isValidOperation(affectedInstances)) { oDatabaseDocument.commit(); diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/SharingOperationValidator.java b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/SharingOperationValidator.java index 3beea67..b59fd8a 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/SharingOperationValidator.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/instances/model/SharingOperationValidator.java @@ -8,6 +8,7 @@ import java.util.UUID; import org.gcube.com.fasterxml.jackson.databind.JsonNode; import org.gcube.informationsystem.base.reference.Element; import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException; +import org.gcube.informationsystem.resourceregistry.api.rest.SharingPath.SharingOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -15,24 +16,24 @@ public class SharingOperationValidator implements OperationValidator { protected static Logger logger = LoggerFactory.getLogger(SharingOperationValidator.class); - protected final Map expectedInstaces; - protected final String operation; + protected final Map expectedInstances; + protected final SharingOperation sharingOperation; - public SharingOperationValidator(Map expectedInstaces, String operation) { - this.expectedInstaces = expectedInstaces; - this.operation = operation; + public SharingOperationValidator(Map expectedInstances, SharingOperation sharingOperation) { + this.expectedInstances = expectedInstances; + this.sharingOperation = sharingOperation; } @Override public boolean isValidOperation(Map affectedInstances) throws ResourceRegistryException { - Set expectedUUIDSet = expectedInstaces.keySet(); + Set expectedUUIDSet = expectedInstances.keySet(); Set affectedUUIDSet = new HashSet<>(affectedInstances.keySet()); affectedUUIDSet.removeAll(expectedUUIDSet); if(affectedUUIDSet.size()>0) { StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("To keep the integrity of the IS the operation "); - stringBuffer.append(operation); + stringBuffer.append(sharingOperation.toString()); stringBuffer.append(" affects more instances than the requested by the client. The operation will be aborted. "); stringBuffer.append("Additional affected instances are "); stringBuffer.append(affectedUUIDSet.toString()); @@ -42,12 +43,12 @@ public class SharingOperationValidator implements OperationValidator { } for(UUID expectedUUID : expectedUUIDSet) { - JsonNode expectedJsonNode = expectedInstaces.get(expectedUUID); + JsonNode expectedJsonNode = expectedInstances.get(expectedUUID); JsonNode affectedJsonNode = affectedInstances.get(expectedUUID); if(affectedJsonNode==null) { StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("The operation "); - stringBuffer.append(operation); + stringBuffer.append(sharingOperation.toString()); stringBuffer.append(" did not affected the instance with UUID "); stringBuffer.append(expectedUUID.toString()); stringBuffer.append(" "); diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/rest/SharingManager.java b/src/main/java/org/gcube/informationsystem/resourceregistry/rest/SharingManager.java index c34e34f..ae28e4d 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/rest/SharingManager.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/rest/SharingManager.java @@ -26,6 +26,7 @@ import org.gcube.informationsystem.resourceregistry.api.rest.SharingPath; import org.gcube.informationsystem.resourceregistry.api.rest.SharingPath.SharingOperation; import org.gcube.informationsystem.resourceregistry.instances.base.ElementManagement; import org.gcube.informationsystem.resourceregistry.instances.base.ElementManagementUtility; +import org.gcube.informationsystem.resourceregistry.instances.model.SharingOperationValidator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -127,7 +128,8 @@ public class SharingManager { elementManagement.setHonourPropagationConstraintsInContextSharing(false); elementManagement.setDryRunContextSharing(dryRun); UUID contextUUID = UUID.fromString(contextId); - Map affectedInstances = elementManagement.addToContext(contextUUID); + SharingOperationValidator sharingOperationValidator = new SharingOperationValidator(expectedInstances, operation); + Map affectedInstances = elementManagement.addToContext(contextUUID, sharingOperationValidator); return serializeAffectedInstaces(objectMapper, affectedInstances); }catch (ResourceRegistryException e) {