Fixing corner case

This commit is contained in:
Luca Frosini 2021-03-05 18:14:07 +01:00
parent 6afde17b0f
commit d7ed728c81
5 changed files with 26 additions and 3 deletions

View File

@ -414,6 +414,7 @@ public abstract class EntityManagement<E extends Entity, ET extends EntityType>
relationManagement.setHonourPropagationConstraintsInContextSharing(honourPropagationConstraintsInContextSharing); relationManagement.setHonourPropagationConstraintsInContextSharing(honourPropagationConstraintsInContextSharing);
relationManagement.setTargetSecurityContext(targetSecurityContext); relationManagement.setTargetSecurityContext(targetSecurityContext);
relationManagement.internalRemoveFromContext(); relationManagement.internalRemoveFromContext();
addToRelationManagements(relationManagement);
affectedInstances.putAll(relationManagement.getAffectedInstances()); affectedInstances.putAll(relationManagement.getAffectedInstances());
} }
} }

View File

@ -70,9 +70,16 @@ public class FacetManagement extends EntityManagement<Facet, FacetType> {
protected void reallyRemoveFromContext() protected void reallyRemoveFromContext()
throws ContextException, ResourceRegistryException { throws ContextException, ResourceRegistryException {
if(entryPoint) { 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(); OVertex oVertex = getElement().getVertices(ODirection.IN).iterator().next();
resourceManagement = new ResourceManagement(); resourceManagement = new ResourceManagement();
resourceManagement.setElement(oVertex); resourceManagement.setElement(oVertex);
resourceManagement.addToRelationManagements(consistsOfManagement);
} }
super.reallyRemoveFromContext(); super.reallyRemoveFromContext();
} }
@ -89,7 +96,7 @@ public class FacetManagement extends EntityManagement<Facet, FacetType> {
OVertex oVertex = getElement().getVertices(ODirection.IN).iterator().next(); OVertex oVertex = getElement().getVertices(ODirection.IN).iterator().next();
resourceManagement = new ResourceManagement(); resourceManagement = new ResourceManagement();
resourceManagement.setElement(oVertex); resourceManagement.setElement(oVertex);
// TODO resourceManagement.addToRelationManagements(consistsOfManagement);
} }
affectedInstances.put(uuid, serializeSelfAsJsonNode()); affectedInstances.put(uuid, serializeSelfAsJsonNode());
@ -126,7 +133,13 @@ public class FacetManagement extends EntityManagement<Facet, FacetType> {
resourceManagement.setODatabaseDocument(oDatabaseDocument); resourceManagement.setODatabaseDocument(oDatabaseDocument);
break; 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); resourceManagement.setWorkingContext(targetSecurityContext);
targetSecurityContextODatabaseDocument = targetSecurityContext.getDatabaseDocument(PermissionMode.READER); targetSecurityContextODatabaseDocument = targetSecurityContext.getDatabaseDocument(PermissionMode.READER);
resourceManagement.setODatabaseDocument(targetSecurityContextODatabaseDocument); resourceManagement.setODatabaseDocument(targetSecurityContextODatabaseDocument);

View File

@ -477,8 +477,17 @@ public class ResourceManagement extends EntityManagement<Resource, ResourceType>
break; break;
} }
}else { }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) { if(relationManagement==null) {
relationManagement = getRelationManagement(edge); relationManagement = getRelationManagement(edge);
relationManagements.put(id, relationManagement);
} }
} }

View File

@ -129,6 +129,7 @@ public class ConsistsOfManagement extends RelationManagement<FacetManagement, Fa
return; return;
} }
resourceManagement.setOperation(operation); resourceManagement.setOperation(operation);
resourceManagement.addToRelationManagements(this);
resourceManagement.sanityCheck(); resourceManagement.sanityCheck();
}catch (ResourceRegistryException e) { }catch (ResourceRegistryException e) {
throw e; throw e;

View File

@ -277,7 +277,6 @@ public class ERManagementTest extends ContextTest {
} }
@Test @Test
public void testCreateEServiceAndRemoveFromContextRequiredFacet() throws Exception { public void testCreateEServiceAndRemoveFromContextRequiredFacet() throws Exception {
EService eService = instantiateValidEService(); EService eService = instantiateValidEService();