Fixed addtoContext and removeFromContext

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/information-system/resource-registry@141413 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Luca Frosini 2016-12-27 14:31:39 +00:00
parent 7cfce46fa4
commit 0bcdd8a260
3 changed files with 48 additions and 38 deletions

View File

@ -367,9 +367,8 @@ public abstract class RelationManagement<R extends Relation> {
public boolean reallyAddToContext() throws ContextException, public boolean reallyAddToContext() throws ContextException,
ResourceRegistryException { ResourceRegistryException {
getEdge();
ContextUtility.addToActualContext(orientGraph, getEdge());
AddConstraint addConstraint = AddConstraint.unpropagate; AddConstraint addConstraint = AddConstraint.unpropagate;
try { try {
@ -390,17 +389,23 @@ public abstract class RelationManagement<R extends Relation> {
Vertex target = edge.getVertex(Direction.IN); Vertex target = edge.getVertex(Direction.IN);
switch (addConstraint) { switch (addConstraint) {
case propagate: case propagate:
EntityManagement entityManagement = EntityManagement /*
.getEntityManagement(orientGraph, target); * The relation must be added only in the case the target vertex
entityManagement.reallyAddToContext(); * must be added. Otherwise we have a relation which point
break; * to an entity outside of the context.
*/
case unpropagate: ContextUtility.addToActualContext(orientGraph, getEdge());
break; EntityManagement entityManagement = EntityManagement
.getEntityManagement(orientGraph, target);
default: entityManagement.reallyAddToContext();
break; break;
case unpropagate:
break;
default:
break;
} }
return true; return true;
@ -440,30 +445,35 @@ public abstract class RelationManagement<R extends Relation> {
} }
Vertex target = edge.getVertex(Direction.IN); Vertex target = edge.getVertex(Direction.IN);
/*
* In any removeConstraint value the relation MUSt be removed from
* context to avoid to have edge having a source outside of the context.
*/
ContextUtility.removeFromActualContext(orientGraph, edge); ContextUtility.removeFromActualContext(orientGraph, edge);
switch (removeConstraint) { switch (removeConstraint) {
case cascade: case cascade:
removeFromContextTargetVertex(target);
break;
case cascadeWhenOrphan:
Iterable<Edge> iterable = target.getEdges(Direction.IN);
Iterator<Edge> iterator = iterable.iterator();
if (iterator.hasNext()) {
logger.trace(
"{} point to {} which is not orphan. Giving {} directive, it will be not remove from current context.",
edge, target, removeConstraint);
} else {
removeFromContextTargetVertex(target); removeFromContextTargetVertex(target);
} break;
break;
case cascadeWhenOrphan:
case keep: Iterable<Edge> iterable = target.getEdges(Direction.IN);
break; Iterator<Edge> iterator = iterable.iterator();
if (iterator.hasNext()) {
default: logger.trace(
break; "{} point to {} which is not orphan. Giving {} directive, it will be not remove from current context.",
edge, target, removeConstraint);
} else {
removeFromContextTargetVertex(target);
}
break;
case keep:
break;
default:
break;
} }
return true; return true;

View File

@ -279,7 +279,7 @@ public class MultiContextTest extends ScopedTest {
resourceManagement.setUUID(eServiceUUID); resourceManagement.setUUID(eServiceUUID);
resourceManagement.delete(); resourceManagement.delete();
} catch (ResourceNotFoundException e) { } catch (ResourceNotFoundException e) {
logger.debug("Resource with {} Not Found as Expected", logger.debug("Resource with {} Not Deleted as Expected",
eServiceUUID); eServiceUUID);
} }
@ -297,6 +297,7 @@ public class MultiContextTest extends ScopedTest {
resourceManagement.setUUID(eServiceUUID); resourceManagement.setUUID(eServiceUUID);
deleted = resourceManagement.delete(); deleted = resourceManagement.delete();
Assert.assertTrue(deleted); Assert.assertTrue(deleted);
} }

View File

@ -11,9 +11,8 @@
<logger name="org.gcube" level="INFO" /> <logger name="org.gcube" level="INFO" />
<logger name="org.gcube.informationsystem" level="DEBUG" /> <logger name="org.gcube.informationsystem" level="DEBUG" />
<logger name="org.gcube.informationsystem.resourceregistry.context" level="INFO" /> <logger name="org.gcube.informationsystem.resourceregistry" level="DEBUG" />
<logger name="org.gcube.informationsystem.resourceregistry.resources.utils" level="INFO" /> <logger name="org.gcube.informationsystem.resourceregistry.context" level="DEBUG" />
<logger name="org.gcube.informationsystem.resourceregistry.resources.impl" level="TRACE" />
<logger name="org.gcube.informationsystem.impl.utils.discovery" level="ERROR" /> <logger name="org.gcube.informationsystem.impl.utils.discovery" level="ERROR" />
<root level="WARN"> <root level="WARN">