Added a way to force add to context

This commit is contained in:
Luca Frosini 2022-06-08 16:06:56 +02:00
parent f79e5ab3ff
commit 4b8966d907
5 changed files with 27 additions and 8 deletions

View File

@ -51,4 +51,6 @@ public interface ERManagement {
public AvailableInAnotherContextException getSpecificAvailableInAnotherContextException(String message); public AvailableInAnotherContextException getSpecificAvailableInAnotherContextException(String message);
public void setForceAddToContext(Boolean forceAddToContext);
} }

View File

@ -138,7 +138,10 @@ public abstract class EntityManagement<E extends Entity, ET extends EntityType>
*/ */
protected Map<String,RelationManagement<?, ?>> relationManagements; protected Map<String,RelationManagement<?, ?>> relationManagements;
/* Indicate that AddToContext skipped the isntance because it was not the source context */ /* The instance is added to the context even is not in source context */
protected boolean forceAddToContext;
/* Indicate that AddToContext skipped the instance because it was not the source context */
protected boolean skipped; protected boolean skipped;
protected EntityManagement(AccessType accessType) { protected EntityManagement(AccessType accessType) {
@ -298,7 +301,7 @@ public abstract class EntityManagement<E extends Entity, ET extends EntityType>
protected void reallyAddToContext() protected void reallyAddToContext()
throws ContextException, ResourceRegistryException { throws ContextException, ResourceRegistryException {
if(!sourceSecurityContext.isElementInContext(getElement())) { if(!forceAddToContext && !sourceSecurityContext.isElementInContext(getElement())) {
// The element in not in the source security context. It will be skipped // The element in not in the source security context. It will be skipped
skipped = true; skipped = true;
return; return;
@ -896,4 +899,9 @@ public abstract class EntityManagement<E extends Entity, ET extends EntityType>
} }
} }
@Override
public void setForceAddToContext(Boolean forceAddToContext) {
this.forceAddToContext = forceAddToContext;
}
} }

View File

@ -262,7 +262,7 @@ public class ResourceManagement extends EntityManagement<Resource, ResourceType>
protected void reallyAddToContext() protected void reallyAddToContext()
throws ContextException, ResourceRegistryException { throws ContextException, ResourceRegistryException {
if(!sourceSecurityContext.isElementInContext(getElement())) { if(!forceAddToContext && !sourceSecurityContext.isElementInContext(getElement())) {
// The element in not in the source security context. It will be skipped // The element in not in the source security context. It will be skipped
skipped = true; skipped = true;
return; return;

View File

@ -158,7 +158,10 @@ public abstract class RelationManagement<T extends EntityManagement<? extends En
protected PropagationConstraint propagationConstraint; protected PropagationConstraint propagationConstraint;
/* Indicate that AddToContext skipped the isntance because it was not the source context */ /* The instance is added to the context even is not in source context */
protected boolean forceAddToContext;
/* Indicate that AddToContext skipped the instance because it was not the source context */
protected boolean skipped; protected boolean skipped;
@Override @Override
@ -376,7 +379,7 @@ public abstract class RelationManagement<T extends EntityManagement<? extends En
protected void reallyAddToContext() protected void reallyAddToContext()
throws ContextException, ResourceRegistryException { throws ContextException, ResourceRegistryException {
if(!sourceSecurityContext.isElementInContext(getElement())) { if(!forceAddToContext && !sourceSecurityContext.isElementInContext(getElement())) {
// The element in not in the source security context. It will be skipped // The element in not in the source security context. It will be skipped
skipped = true; skipped = true;
return; return;
@ -791,4 +794,9 @@ public abstract class RelationManagement<T extends EntityManagement<? extends En
return serializeJsonNodeCollectionAsString(collection); return serializeJsonNodeCollectionAsString(collection);
} }
@Override
public void setForceAddToContext(Boolean forceAddToContext) {
this.forceAddToContext = forceAddToContext;
}
} }

View File

@ -171,7 +171,8 @@ public class SharingManager {
@PathParam(AccessPath.TYPE_PATH_PARAM) String type, @PathParam(AccessPath.TYPE_PATH_PARAM) String type,
@PathParam(AccessPath.UUID_PATH_PARAM) String instanceId, @PathParam(AccessPath.UUID_PATH_PARAM) String instanceId,
@QueryParam(SharingPath.OPERATION_QUERY_PARAMETER) SharingOperation operation, @QueryParam(SharingPath.OPERATION_QUERY_PARAMETER) SharingOperation operation,
@QueryParam(SharingPath.DRY_RUN_QUERY_PARAMETER) @DefaultValue("false") Boolean dryRun) @QueryParam(SharingPath.DRY_RUN_QUERY_PARAMETER) @DefaultValue("false") Boolean dryRun,
@QueryParam(SharingPath.FORCE_ADD_TO_CONTEXT_QUERY_PARAMETER) @DefaultValue("false") Boolean forceAddToContext)
throws SchemaViolationException, ResourceNotFoundException, ContextNotFoundException, ResourceRegistryException { throws SchemaViolationException, ResourceNotFoundException, ContextNotFoundException, ResourceRegistryException {
StringBuffer calledMethod = new StringBuffer(); StringBuffer calledMethod = new StringBuffer();
@ -196,12 +197,12 @@ public class SharingManager {
ElementManagement<?,?> elementManagement = ElementManagementUtility.getERManagement(type); ElementManagement<?,?> elementManagement = ElementManagementUtility.getERManagement(type);
elementManagement.setUUID(UUID.fromString(instanceId)); elementManagement.setUUID(UUID.fromString(instanceId));
elementManagement.setDryRun(dryRun); elementManagement.setDryRun(dryRun);
UUID contextUUID = UUID.fromString(contextId); UUID contextUUID = UUID.fromString(contextId);
if(operation == SharingOperation.ADD) { if(operation == SharingOperation.ADD) {
((ERManagement) elementManagement).addToContext(contextUUID); ((ERManagement) elementManagement).addToContext(contextUUID);
((ERManagement) elementManagement).setForceAddToContext(forceAddToContext);
}else { }else {
((ERManagement) elementManagement).removeFromContext(contextUUID); ((ERManagement) elementManagement).removeFromContext(contextUUID);
} }