Class RelationManagement<T extends EntityManagement<? extends org.gcube.informationsystem.model.reference.entities.Entity,TET>,TET extends org.gcube.informationsystem.types.reference.entities.EntityType>

java.lang.Object
org.gcube.informationsystem.resourceregistry.base.ElementManagement<com.orientechnologies.orient.core.record.OEdge,org.gcube.informationsystem.types.reference.relations.RelationType<SET,TET>>
org.gcube.informationsystem.resourceregistry.base.relations.RelationElementManagement<ResourceManagement,T,org.gcube.informationsystem.types.reference.entities.ResourceType,TET>
org.gcube.informationsystem.resourceregistry.instances.model.relations.RelationManagement<T,TET>
All Implemented Interfaces:
ERManagement
Direct Known Subclasses:
ConsistsOfManagement, IsRelatedToManagement

public abstract class RelationManagement<T extends EntityManagement<? extends org.gcube.informationsystem.model.reference.entities.Entity,TET>,TET extends org.gcube.informationsystem.types.reference.entities.EntityType> extends RelationElementManagement<ResourceManagement,T,org.gcube.informationsystem.types.reference.entities.ResourceType,TET> implements ERManagement
Author:
Luca Frosini (ISTI - CNR)
  • Field Details

    • sourceInstanceEnvironment

      protected InstanceEnvironment sourceInstanceEnvironment
      The source context of an addToContex
    • targetInstanceEnvironment

      protected InstanceEnvironment targetInstanceEnvironment
      The target context of an addToContex/RemoveFromContext
    • honourPropagationConstraintsInContextSharing

      protected boolean honourPropagationConstraintsInContextSharing
      By the default the system honour the propagation constraints so this variable is initialised as true. To revert a previous operation or for particular a maintenance we could request to the service do not honour the propagation constraints but under certain conditions and with some limitation only. These limitation are required to keep the system in a consistent state. In fact, this directive is only valid for Resources and IsRelatedTo relations. We need to take in account that to add an IsRelatedTo to a context always the source and target Resources must be in such a Context. Please also take into account that adding a Resource to a context always imply to honour the propagation constraints of ConsistsOf relations. In fact, a resource must be characterised least by one facet in any context it belongs. Giving that we cannot made assumption on which facets must be used. A way could be to consider just the facets are mandatory for such a Resource Type, but the type could not have mandatory facets (even every Resource Type in the gCube Model has one mandatory facet). As counterpart, when a Resource is removed from a Context all the facets charactering it must be removed. This option can also be used in conjunction with ElementManagement.dryRun=true. This allow to simulate a sharing operation which requires do not honour the propagation constraints.
    • defaultPropagationConstraint

      public final org.gcube.informationsystem.model.reference.properties.PropagationConstraint defaultPropagationConstraint
    • propagationConstraint

      protected org.gcube.informationsystem.model.reference.properties.PropagationConstraint propagationConstraint
    • forceAddToContext

      protected boolean forceAddToContext
    • skipped

      protected boolean skipped
  • Constructor Details

    • RelationManagement

      protected RelationManagement(org.gcube.informationsystem.base.reference.AccessType accessType, Class<? extends org.gcube.informationsystem.model.reference.entities.Entity> targetEntityClass, org.gcube.informationsystem.model.reference.properties.PropagationConstraint defaultPropagationConstraint)
  • Method Details

    • setSourceInstanceEnvironment

      public void setSourceInstanceEnvironment(InstanceEnvironment source)
      Description copied from interface: ERManagement
      Set source InstanceEnvironment to evaluate addToContext
      Specified by:
      setSourceInstanceEnvironment in interface ERManagement
      Parameters:
      source - the source security context
    • getSourceInstanceEnvironment

      public InstanceEnvironment getSourceInstanceEnvironment()
      Specified by:
      getSourceInstanceEnvironment in interface ERManagement
    • setTargetInstanceEnvironment

      public void setTargetInstanceEnvironment(InstanceEnvironment target)
      Description copied from interface: ERManagement
      Set target security context of addToContext/removeFromContext
      Specified by:
      setTargetInstanceEnvironment in interface ERManagement
    • getTargetInstanceEnvironment

      public InstanceEnvironment getTargetInstanceEnvironment()
      Specified by:
      getTargetInstanceEnvironment in interface ERManagement
    • isHonourPropagationConstraintsInContextSharing

      public boolean isHonourPropagationConstraintsInContextSharing()
      Specified by:
      isHonourPropagationConstraintsInContextSharing in interface ERManagement
    • setHonourPropagationConstraintsInContextSharing

      public void setHonourPropagationConstraintsInContextSharing(boolean honourPropagationConstraintsInContextSharing)
      Specified by:
      setHonourPropagationConstraintsInContextSharing in interface ERManagement
    • isAvailableOnContext

      public boolean isAvailableOnContext(InstanceEnvironment instanceEnvironment)
    • getWorkingEnvironment

      protected Environment getWorkingEnvironment() throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Specified by:
      getWorkingEnvironment in class ElementManagement<com.orientechnologies.orient.core.record.OEdge,org.gcube.informationsystem.types.reference.relations.RelationType<org.gcube.informationsystem.types.reference.entities.ResourceType,TET extends org.gcube.informationsystem.types.reference.entities.EntityType>>
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
    • getElement

      public com.orientechnologies.orient.core.record.OEdge getElement() throws org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException, org.gcube.informationsystem.resourceregistry.api.exceptions.AvailableInAnotherContextException, org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Overrides:
      getElement in class ElementManagement<com.orientechnologies.orient.core.record.OEdge,org.gcube.informationsystem.types.reference.relations.RelationType<org.gcube.informationsystem.types.reference.entities.ResourceType,TET extends org.gcube.informationsystem.types.reference.entities.EntityType>>
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException
      org.gcube.informationsystem.resourceregistry.api.exceptions.AvailableInAnotherContextException
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
    • giveMeSourceEntityManagementAsIs

      public ResourceManagement giveMeSourceEntityManagementAsIs() throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
    • fullSerialize

      protected Map<String,org.gcube.com.fasterxml.jackson.databind.JsonNode> fullSerialize(Map<String,org.gcube.com.fasterxml.jackson.databind.JsonNode> visitedSourceResources) throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
    • getPropagationConstraint

      protected PropagationConstraintOrient getPropagationConstraint(com.orientechnologies.orient.core.record.impl.ODocument oDocument) throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
    • checkPropagationConstraint

      protected void checkPropagationConstraint() throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
    • reallyCreate

      protected com.orientechnologies.orient.core.record.OEdge reallyCreate() throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Overrides:
      reallyCreate in class RelationElementManagement<ResourceManagement,T extends EntityManagement<? extends org.gcube.informationsystem.model.reference.entities.Entity,TET>,org.gcube.informationsystem.types.reference.entities.ResourceType,TET extends org.gcube.informationsystem.types.reference.entities.EntityType>
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
    • newSourceEntityManagement

      protected ResourceManagement newSourceEntityManagement() throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Specified by:
      newSourceEntityManagement in class RelationElementManagement<ResourceManagement,T extends EntityManagement<? extends org.gcube.informationsystem.model.reference.entities.Entity,TET>,org.gcube.informationsystem.types.reference.entities.ResourceType,TET extends org.gcube.informationsystem.types.reference.entities.EntityType>
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
    • getEntityTypeNotValidErrroMessage

      protected String getEntityTypeNotValidErrroMessage(String entityPosition, String requiredType, String effectiveType)
    • checksourceAndTargetEntityCompliancy

      protected void checksourceAndTargetEntityCompliancy() throws org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException, org.gcube.informationsystem.resourceregistry.api.exceptions.AvailableInAnotherContextException, org.gcube.informationsystem.resourceregistry.api.exceptions.types.SchemaViolationException, org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Specified by:
      checksourceAndTargetEntityCompliancy in class RelationElementManagement<ResourceManagement,T extends EntityManagement<? extends org.gcube.informationsystem.model.reference.entities.Entity,TET>,org.gcube.informationsystem.types.reference.entities.ResourceType,TET extends org.gcube.informationsystem.types.reference.entities.EntityType>
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException
      org.gcube.informationsystem.resourceregistry.api.exceptions.AvailableInAnotherContextException
      org.gcube.informationsystem.resourceregistry.api.exceptions.types.SchemaViolationException
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
    • reallyUpdate

      protected com.orientechnologies.orient.core.record.OEdge reallyUpdate() throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Overrides:
      reallyUpdate in class RelationElementManagement<ResourceManagement,T extends EntityManagement<? extends org.gcube.informationsystem.model.reference.entities.Entity,TET>,org.gcube.informationsystem.types.reference.entities.ResourceType,TET extends org.gcube.informationsystem.types.reference.entities.EntityType>
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
    • reallyAddToContext

      protected void reallyAddToContext() throws org.gcube.informationsystem.resourceregistry.api.exceptions.contexts.ContextException, org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.contexts.ContextException
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
    • internalAddToContext

      public void internalAddToContext() throws org.gcube.informationsystem.resourceregistry.api.exceptions.contexts.ContextException, org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Specified by:
      internalAddToContext in interface ERManagement
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.contexts.ContextException
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
    • forcedAddToContext

      public void forcedAddToContext() throws org.gcube.informationsystem.resourceregistry.api.exceptions.contexts.ContextException, org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.contexts.ContextException
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
    • addToContext

      public void addToContext(UUID contextUUID) throws org.gcube.informationsystem.resourceregistry.api.exceptions.types.SchemaViolationException, org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException, org.gcube.informationsystem.resourceregistry.api.exceptions.contexts.ContextException, org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Specified by:
      addToContext in interface ERManagement
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.types.SchemaViolationException
      org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException
      org.gcube.informationsystem.resourceregistry.api.exceptions.contexts.ContextException
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
    • reallyRemoveFromContext

      protected Map<UUID,org.gcube.com.fasterxml.jackson.databind.JsonNode> reallyRemoveFromContext() throws org.gcube.informationsystem.resourceregistry.api.exceptions.contexts.ContextException, org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.contexts.ContextException
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
    • internalRemoveFromContext

      public void internalRemoveFromContext() throws org.gcube.informationsystem.resourceregistry.api.exceptions.contexts.ContextException, org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Specified by:
      internalRemoveFromContext in interface ERManagement
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.contexts.ContextException
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
    • removeFromContext

      public void removeFromContext(UUID contextUUID) throws org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException, org.gcube.informationsystem.resourceregistry.api.exceptions.contexts.ContextException, org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Specified by:
      removeFromContext in interface ERManagement
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException
      org.gcube.informationsystem.resourceregistry.api.exceptions.contexts.ContextException
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
    • reallyDelete

      protected void reallyDelete() throws org.gcube.informationsystem.resourceregistry.api.exceptions.relations.RelationNotFoundException, org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Overrides:
      reallyDelete in class RelationElementManagement<ResourceManagement,T extends EntityManagement<? extends org.gcube.informationsystem.model.reference.entities.Entity,TET>,org.gcube.informationsystem.types.reference.entities.ResourceType,TET extends org.gcube.informationsystem.types.reference.entities.EntityType>
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.relations.RelationNotFoundException
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
    • serializeJsonNodeCollectionAsString

      protected String serializeJsonNodeCollectionAsString(Collection<org.gcube.com.fasterxml.jackson.databind.JsonNode> collection) throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
    • reallyGetAll

      public String reallyGetAll(boolean polymorphic) throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Specified by:
      reallyGetAll in class ElementManagement<com.orientechnologies.orient.core.record.OEdge,org.gcube.informationsystem.types.reference.relations.RelationType<org.gcube.informationsystem.types.reference.entities.ResourceType,TET extends org.gcube.informationsystem.types.reference.entities.EntityType>>
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
    • setForceAddToContext

      public void setForceAddToContext(Boolean forceAddToContext)
      Specified by:
      setForceAddToContext in interface ERManagement