Class AbstractRelationSchemaManagement<T extends AbstractEntitySchemaManagement<TT>,TT extends org.gcube.informationsystem.types.reference.entities.EntitySchema>

java.lang.Object
org.gcube.informationsystem.resourceregistry.persistence.orientdb.base.ElementManagement<com.orientechnologies.orient.core.record.OEdge,org.gcube.informationsystem.types.reference.relations.RelationSchema<SET,TET>>
org.gcube.informationsystem.resourceregistry.persistence.orientdb.base.RelationElementManagement<ResourceSchemaManagement,T,org.gcube.informationsystem.types.reference.entities.ResourceSchema,TT>
org.gcube.informationsystem.resourceregistry.persistence.orientdb.types.relations.AbstractRelationSchemaManagement<T,TT>
All Implemented Interfaces:
TypeDefinitionManagement
Direct Known Subclasses:
ConsistsOfSchemaManagement, IsRelatedToSchemaManagement, RelationSchemaManagement

public abstract class AbstractRelationSchemaManagement<T extends AbstractEntitySchemaManagement<TT>,TT extends org.gcube.informationsystem.types.reference.entities.EntitySchema> extends RelationElementManagement<ResourceSchemaManagement,T,org.gcube.informationsystem.types.reference.entities.ResourceSchema,TT> implements TypeDefinitionManagement
Author:
Luca Frosini (ISTI - CNR)
  • Field Details

    • name

      protected String name
      The name of the relation type.
  • Constructor Details

    • AbstractRelationSchemaManagement

      public AbstractRelationSchemaManagement(Class<TT> clz)
      Creates a new AbstractRelationSchemaManagement instance.
      Parameters:
      clz - the target entity type class
    • AbstractRelationSchemaManagement

      public AbstractRelationSchemaManagement(TypeEnvironment typeEnvironment, com.orientechnologies.orient.core.db.document.ODatabaseDocument oDatabaseDocument, Class<TT> clz) throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Creates a new AbstractRelationSchemaManagement instance with database and environment context bindings.
      Parameters:
      typeEnvironment - the type environment context
      oDatabaseDocument - the database connection
      clz - the target entity type class
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException - if initialization fails
  • Method Details

    • getAffectedInstances

      public Map<UUID,org.gcube.com.fasterxml.jackson.databind.JsonNode> getAffectedInstances()
      Description copied from class: ElementManagement
      Returns the map of instances affected by operations on this element.
      Overrides:
      getAffectedInstances in class ElementManagement<com.orientechnologies.orient.core.record.OEdge,org.gcube.informationsystem.types.reference.relations.RelationSchema<org.gcube.informationsystem.types.reference.entities.ResourceSchema,TT extends org.gcube.informationsystem.types.reference.entities.EntitySchema>>
      Returns:
      the map of affected instances
    • getWorkingEnvironment

      protected Environment getWorkingEnvironment() throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Description copied from class: ElementManagement
      Returns the active database working environment.
      Specified by:
      getWorkingEnvironment in class ElementManagement<com.orientechnologies.orient.core.record.OEdge,org.gcube.informationsystem.types.reference.relations.RelationSchema<org.gcube.informationsystem.types.reference.entities.ResourceSchema,TT extends org.gcube.informationsystem.types.reference.entities.EntitySchema>>
      Returns:
      the working environment
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException - if the environment cannot be resolved
    • setName

      public void setName(String name)
      Description copied from interface: TypeDefinitionManagement
      Sets the name of the Type definition.
      Specified by:
      setName in interface TypeDefinitionManagement
      Parameters:
      name - the name of the Type definition to set
    • getName

      public String getName()
      Description copied from interface: TypeDefinitionManagement
      Returns the name of the Type definition.
      Specified by:
      getName in interface TypeDefinitionManagement
      Returns:
      the name of the Type definition
    • createCompleteJsonNode

      protected org.gcube.com.fasterxml.jackson.databind.JsonNode createCompleteJsonNode() throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Description copied from class: ElementManagement
      Abstract method to create the complete JSON node representation of the element.
      Overrides:
      createCompleteJsonNode in class RelationElementManagement<ResourceSchemaManagement,T extends AbstractEntitySchemaManagement<TT>,org.gcube.informationsystem.types.reference.entities.ResourceSchema,TT extends org.gcube.informationsystem.types.reference.entities.EntitySchema>
      Returns:
      the complete JSON node representing the element and its relationships
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException - on serialization or mapping error
    • reallyCreate

      protected com.orientechnologies.orient.core.record.OEdge reallyCreate() throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Description copied from class: ElementManagement
      Persists a new element in the database (subclass hook).
      Overrides:
      reallyCreate in class RelationElementManagement<ResourceSchemaManagement,T extends AbstractEntitySchemaManagement<TT>,org.gcube.informationsystem.types.reference.entities.ResourceSchema,TT extends org.gcube.informationsystem.types.reference.entities.EntitySchema>
      Returns:
      the persisted OrientDB vertex
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.AlreadyPresentException - if the element already exists in the database
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException - on any database error
    • reallyUpdate

      protected com.orientechnologies.orient.core.record.OEdge reallyUpdate() throws org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException, org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Description copied from class: ElementManagement
      Updates an existing element in the database (subclass hook).
      Overrides:
      reallyUpdate in class RelationElementManagement<ResourceSchemaManagement,T extends AbstractEntitySchemaManagement<TT>,org.gcube.informationsystem.types.reference.entities.ResourceSchema,TT extends org.gcube.informationsystem.types.reference.entities.EntitySchema>
      Returns:
      the updated OrientDB vertex
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException - if the element does not exist in the database
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException - on any database error
    • reallyDelete

      protected void reallyDelete() throws org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException, org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Description copied from class: ElementManagement
      Deletes an existing element from the database (subclass hook).
      Overrides:
      reallyDelete in class RelationElementManagement<ResourceSchemaManagement,T extends AbstractEntitySchemaManagement<TT>,org.gcube.informationsystem.types.reference.entities.ResourceSchema,TT extends org.gcube.informationsystem.types.reference.entities.EntitySchema>
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException - if the element does not exist in the database
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException - on any database error
    • getElement

      public com.orientechnologies.orient.core.record.OEdge getElement() throws org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException, org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Description copied from class: ElementManagement
      Returns the OrientDB element instance, retrieving and caching it if not already present.
      Overrides:
      getElement in class ElementManagement<com.orientechnologies.orient.core.record.OEdge,org.gcube.informationsystem.types.reference.relations.RelationSchema<org.gcube.informationsystem.types.reference.entities.ResourceSchema,TT extends org.gcube.informationsystem.types.reference.entities.EntitySchema>>
      Returns:
      the OrientDB element instance
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException - if the element does not exist
      org.gcube.informationsystem.resourceregistry.api.exceptions.instances.AvailableInAnotherContextException - if the element belongs to another context
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException - on database error
    • retrieveElement

      public com.orientechnologies.orient.core.record.OEdge retrieveElement() throws org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException, org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Description copied from class: ElementManagement
      Directly queries and retrieves the OrientDB element from the database.
      Overrides:
      retrieveElement in class ElementManagement<com.orientechnologies.orient.core.record.OEdge,org.gcube.informationsystem.types.reference.relations.RelationSchema<org.gcube.informationsystem.types.reference.entities.ResourceSchema,TT extends org.gcube.informationsystem.types.reference.entities.EntitySchema>>
      Returns:
      the loaded OrientDB element
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException - if the element does not exist
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException - on database error
    • reallyGetAll

      public String reallyGetAll() throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Description copied from class: ElementManagement
      Retrieves all elements from the database and returns them as a JSON array string.
      Specified by:
      reallyGetAll in class ElementManagement<com.orientechnologies.orient.core.record.OEdge,org.gcube.informationsystem.types.reference.relations.RelationSchema<org.gcube.informationsystem.types.reference.entities.ResourceSchema,TT extends org.gcube.informationsystem.types.reference.entities.EntitySchema>>
      Returns:
      JSON array string of all elements
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException - on database traversal or serialization error
    • getSpecificNotFoundException

      protected org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException getSpecificNotFoundException(org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException e)
      Description copied from class: ElementManagement
      Converts a generic NotFoundException into a subclass-specific NotFoundException.
      Specified by:
      getSpecificNotFoundException in class ElementManagement<com.orientechnologies.orient.core.record.OEdge,org.gcube.informationsystem.types.reference.relations.RelationSchema<org.gcube.informationsystem.types.reference.entities.ResourceSchema,TT extends org.gcube.informationsystem.types.reference.entities.EntitySchema>>
      Parameters:
      e - the generic exception
      Returns:
      the specific NotFoundException
    • getSpecificAlreadyPresentException

      protected org.gcube.informationsystem.resourceregistry.api.exceptions.AlreadyPresentException getSpecificAlreadyPresentException(String message)
      Description copied from class: ElementManagement
      Converts a generic AlreadyPresentException into a subclass-specific AlreadyPresentException.
      Specified by:
      getSpecificAlreadyPresentException in class ElementManagement<com.orientechnologies.orient.core.record.OEdge,org.gcube.informationsystem.types.reference.relations.RelationSchema<org.gcube.informationsystem.types.reference.entities.ResourceSchema,TT extends org.gcube.informationsystem.types.reference.entities.EntitySchema>>
      Parameters:
      message - the exception message
      Returns:
      the specific AlreadyPresentException
    • newSourceEntityManagement

      protected ResourceSchemaManagement newSourceEntityManagement() throws org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Description copied from class: RelationElementManagement
      Creates a new management instance for the source entity of the relation (subclass hook).
      Specified by:
      newSourceEntityManagement in class RelationElementManagement<ResourceSchemaManagement,T extends AbstractEntitySchemaManagement<TT>,org.gcube.informationsystem.types.reference.entities.ResourceSchema,TT extends org.gcube.informationsystem.types.reference.entities.EntitySchema>
      Returns:
      the source entity management instance
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException - on database or lookup error
    • checksourceAndTargetEntityCompliancy

      protected void checksourceAndTargetEntityCompliancy() throws org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException, org.gcube.informationsystem.resourceregistry.api.exceptions.types.SchemaViolationException, org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException
      Description copied from class: RelationElementManagement
      Validates that both source and target entities comply with relation constraints and schema rules.
      Specified by:
      checksourceAndTargetEntityCompliancy in class RelationElementManagement<ResourceSchemaManagement,T extends AbstractEntitySchemaManagement<TT>,org.gcube.informationsystem.types.reference.entities.ResourceSchema,TT extends org.gcube.informationsystem.types.reference.entities.EntitySchema>
      Throws:
      org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException - if either the source or target entity is missing
      org.gcube.informationsystem.resourceregistry.api.exceptions.types.SchemaViolationException - if any database/model schema constraints are violated
      org.gcube.informationsystem.resourceregistry.api.exceptions.instances.AvailableInAnotherContextException - if any context boundary violations are found
      org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException - if any other database error occurs