From d5d79c14ccccd3fa449761221812847d38382fe9 Mon Sep 17 00:00:00 2001 From: "luca.frosini" Date: Mon, 11 Jun 2018 09:01:10 +0000 Subject: [PATCH] Refs #11288: Made resource-registry more RESTful Task-Url: https://support.d4science.org/issues/11288 git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/information-system/resource-registry@168995 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../context/IsParentOfManagement.java | 11 ++- .../resourceregistry/er/ERManagement.java | 3 +- .../er/relation/ConsistsOfManagement.java | 16 +++- .../er/relation/IsRelatedToManagement.java | 16 +++- .../er/relation/RelationManagement.java | 86 ++++++++++++++++--- .../resourceregistry/utils/HeaderUtility.java | 17 ++-- .../utils/PropagationConstraintOrient.java | 40 +++++++++ 7 files changed, 161 insertions(+), 28 deletions(-) create mode 100644 src/main/java/org/gcube/informationsystem/resourceregistry/utils/PropagationConstraintOrient.java diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/context/IsParentOfManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/context/IsParentOfManagement.java index ab2e05e..c964f98 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/context/IsParentOfManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/context/IsParentOfManagement.java @@ -3,6 +3,7 @@ package org.gcube.informationsystem.resourceregistry.context; import java.util.UUID; import org.codehaus.jettison.json.JSONObject; +import org.gcube.informationsystem.impl.embedded.PropagationConstraintImpl; import org.gcube.informationsystem.model.AccessType; import org.gcube.informationsystem.model.embedded.PropagationConstraint; import org.gcube.informationsystem.model.embedded.PropagationConstraint.AddConstraint; @@ -31,8 +32,16 @@ import com.tinkerpop.blueprints.impls.orient.OrientGraph; @SuppressWarnings("rawtypes") public class IsParentOfManagement extends RelationManagement { + public static final PropagationConstraint DEFAULT_IS_PARENT_OF_PC; + + static { + DEFAULT_IS_PARENT_OF_PC = new PropagationConstraintImpl(); + DEFAULT_IS_PARENT_OF_PC.setRemoveConstraint(RemoveConstraint.keep); + DEFAULT_IS_PARENT_OF_PC.setAddConstraint(AddConstraint.unpropagate); + } + public IsParentOfManagement() { - super(AccessType.IS_PARENT_OF); + super(AccessType.IS_PARENT_OF, DEFAULT_IS_PARENT_OF_PC); } public IsParentOfManagement(OrientGraph orientGraph) throws ResourceRegistryException { diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/er/ERManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/er/ERManagement.java index 2d6e705..975a131 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/er/ERManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/er/ERManagement.java @@ -21,7 +21,6 @@ import org.gcube.informationsystem.model.ER; import org.gcube.informationsystem.model.ISManageable; import org.gcube.informationsystem.model.embedded.Header; import org.gcube.informationsystem.model.entity.Context; -import org.gcube.informationsystem.model.entity.Entity; import org.gcube.informationsystem.resourceregistry.api.exceptions.AlreadyPresentException; import org.gcube.informationsystem.resourceregistry.api.exceptions.AvailableInAnotherContextException; import org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException; @@ -251,7 +250,7 @@ public abstract class ERManagement { Header entityHeader = HeaderUtility.getHeader(jsonNode, true); if(entityHeader != null) { - element.setProperty(Entity.HEADER_PROPERTY, entityHeader); + element.setProperty(ER.HEADER_PROPERTY, entityHeader); } else { entityHeader = HeaderUtility.addHeader(element, null); } diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/er/relation/ConsistsOfManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/er/relation/ConsistsOfManagement.java index 566753f..381e480 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/er/relation/ConsistsOfManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/er/relation/ConsistsOfManagement.java @@ -1,6 +1,10 @@ package org.gcube.informationsystem.resourceregistry.er.relation; +import org.gcube.informationsystem.impl.embedded.PropagationConstraintImpl; import org.gcube.informationsystem.model.AccessType; +import org.gcube.informationsystem.model.embedded.PropagationConstraint; +import org.gcube.informationsystem.model.embedded.PropagationConstraint.AddConstraint; +import org.gcube.informationsystem.model.embedded.PropagationConstraint.RemoveConstraint; import org.gcube.informationsystem.model.relation.ConsistsOf; import org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException; import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException; @@ -19,12 +23,20 @@ import com.tinkerpop.blueprints.impls.orient.OrientGraph; @SuppressWarnings("rawtypes") public class ConsistsOfManagement extends RelationManagement { + public static final PropagationConstraint DEFAULT_CONSISTS_OF_PC; + + static { + DEFAULT_CONSISTS_OF_PC = new PropagationConstraintImpl(); + DEFAULT_CONSISTS_OF_PC.setRemoveConstraint(RemoveConstraint.cascadeWhenOrphan); + DEFAULT_CONSISTS_OF_PC.setAddConstraint(AddConstraint.propagate); + } + public ConsistsOfManagement() { - super(AccessType.CONSISTS_OF); + super(AccessType.CONSISTS_OF, DEFAULT_CONSISTS_OF_PC); } public ConsistsOfManagement(SecurityContext workingContext, OrientGraph orientGraph) { - super(AccessType.CONSISTS_OF, workingContext, orientGraph); + super(AccessType.CONSISTS_OF, workingContext, orientGraph, DEFAULT_CONSISTS_OF_PC); } @Override diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/er/relation/IsRelatedToManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/er/relation/IsRelatedToManagement.java index 44075a8..0c44339 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/er/relation/IsRelatedToManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/er/relation/IsRelatedToManagement.java @@ -1,6 +1,10 @@ package org.gcube.informationsystem.resourceregistry.er.relation; +import org.gcube.informationsystem.impl.embedded.PropagationConstraintImpl; import org.gcube.informationsystem.model.AccessType; +import org.gcube.informationsystem.model.embedded.PropagationConstraint; +import org.gcube.informationsystem.model.embedded.PropagationConstraint.AddConstraint; +import org.gcube.informationsystem.model.embedded.PropagationConstraint.RemoveConstraint; import org.gcube.informationsystem.model.relation.IsRelatedTo; import org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException; import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException; @@ -18,12 +22,20 @@ import com.tinkerpop.blueprints.impls.orient.OrientGraph; @SuppressWarnings("rawtypes") public class IsRelatedToManagement extends RelationManagement { + public static final PropagationConstraint DEFAULT_IS_RELATED_TO_PC; + + static { + DEFAULT_IS_RELATED_TO_PC = new PropagationConstraintImpl(); + DEFAULT_IS_RELATED_TO_PC.setRemoveConstraint(RemoveConstraint.keep); + DEFAULT_IS_RELATED_TO_PC.setAddConstraint(AddConstraint.unpropagate); + } + public IsRelatedToManagement() { - super(AccessType.IS_RELATED_TO); + super(AccessType.IS_RELATED_TO,DEFAULT_IS_RELATED_TO_PC); } public IsRelatedToManagement(SecurityContext workingContext, OrientGraph orientGraph) { - super(AccessType.IS_RELATED_TO, workingContext, orientGraph); + super(AccessType.IS_RELATED_TO, workingContext, orientGraph, DEFAULT_IS_RELATED_TO_PC); } @Override diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/er/relation/RelationManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/er/relation/RelationManagement.java index 98d304e..12fe200 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/er/relation/RelationManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/er/relation/RelationManagement.java @@ -8,6 +8,7 @@ import java.util.UUID; import org.codehaus.jettison.json.JSONArray; import org.codehaus.jettison.json.JSONObject; +import org.gcube.informationsystem.impl.utils.ISMapper; import org.gcube.informationsystem.model.AccessType; import org.gcube.informationsystem.model.embedded.PropagationConstraint; import org.gcube.informationsystem.model.embedded.PropagationConstraint.AddConstraint; @@ -29,14 +30,18 @@ import org.gcube.informationsystem.resourceregistry.er.ERManagementUtility; import org.gcube.informationsystem.resourceregistry.er.entity.EntityManagement; import org.gcube.informationsystem.resourceregistry.er.entity.FacetManagement; import org.gcube.informationsystem.resourceregistry.er.entity.ResourceManagement; +import org.gcube.informationsystem.resourceregistry.utils.PropagationConstraintOrient; import org.gcube.informationsystem.resourceregistry.utils.Utility; import com.fasterxml.jackson.databind.JsonNode; +import com.orientechnologies.orient.core.metadata.schema.OType; +import com.orientechnologies.orient.core.record.impl.ODocument; import com.tinkerpop.blueprints.Direction; import com.tinkerpop.blueprints.Edge; import com.tinkerpop.blueprints.Vertex; import com.tinkerpop.blueprints.impls.orient.OrientBaseGraph; import com.tinkerpop.blueprints.impls.orient.OrientEdge; +import com.tinkerpop.blueprints.impls.orient.OrientElement; import com.tinkerpop.blueprints.impls.orient.OrientGraph; /** @@ -51,7 +56,9 @@ public abstract class RelationManagement