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

    • Field Detail

      • sourceSecurityContext

        protected SecurityContext sourceSecurityContext
        The source context of an addToContex
      • targetSecurityContext

        protected SecurityContext targetSecurityContext
        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 Detail

      • 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 Detail

      • setSourceSecurityContext

        public void setSourceSecurityContext​(SecurityContext sourceSecurityContext)
        Description copied from interface: ERManagement
        Set source security context to evaluate addToContext
        Specified by:
        setSourceSecurityContext in interface ERManagement
        Parameters:
        sourceSecurityContext - the source security context
      • isAvailableOnContext

        public boolean isAvailableOnContext​(SecurityContext securityContext)
      • 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
      • serializeEdges

        protected Collection<org.gcube.com.fasterxml.jackson.databind.JsonNode> serializeEdges​(Iterable<com.orientechnologies.orient.core.record.impl.ODocument> edges,
                                                                                               boolean postFilterPolymorphic)
                                                                                        throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
        Throws:
        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