Interface SemanticValidatorHelper

  • All Known Implementing Classes:
    GenericSemanticValidatorHelper

    public interface SemanticValidatorHelper
    This helper is used by AbstractSemanticValidator in order to retrieve JPA information. This helper allows third party adopter to write an instance of this helper that directly access the JPA information without having to implement Hermes SPI, which can improve performance.

    GenericSemanticValidatorHelper is a default implementation that uses Hermes SPI.

    Provisional API: This interface is part of an interim API that is still under development and expected to change significantly before reaching stability. It is available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.

    Version:
    2.5
    Author:
    Pascal Filion
    Since:
    2.4
    • Method Summary

      All Methods Instance Methods Abstract Methods 
      Modifier and Type Method Description
      void collectAllDeclarationIdentificationVariables​(java.util.Map<java.lang.String,​java.util.List<IdentificationVariable>> identificationVariables)
      Collects the identification variables that are defined in the FROM clause of the current query and from the parent queries.
      void collectLocalDeclarationIdentificationVariables​(java.util.Map<java.lang.String,​java.util.List<IdentificationVariable>> identificationVariables)
      Collects the identification variables that are defined in the FROM clause of the current query.
      void disposeSubqueryContext()
      Disposes this context, which is the current context being used by a subquery.
      java.lang.String[] entityNames()
      Returns the name of the all entities that are present in the context of a persistence unit.
      java.util.List<JPQLQueryDeclaration> getAllDeclarations()
      Returns the ordered list of JPQLQueryDeclaration, which contain the information contained in the query's FROM clause.
      java.lang.Object[] getConstructors​(java.lang.Object type)
      Returns the constructors for the given type.
      java.util.List<JPQLQueryDeclaration> getDeclarations()
      Returns the ordered list of JPQLQueryDeclaration, which contain the information contained in the query's FROM clause.
      java.lang.Object getEmbeddable​(java.lang.Object type)
      Retrieves the embeddable with the given type.
      java.lang.Object getEntityNamed​(java.lang.String entityName)
      Retrieves the entity with the given entity name.
      java.lang.String[] getEnumConstants​(java.lang.Object type)
      Returns the constant names for the given Enum type.
      JPQLGrammar getGrammar()
      Returns the JPQLGrammar that defines how the JPQL query was parsed.
      java.lang.Object getManagedType​(Expression expression)
      Returns the managed type by resolving the given Expression.
      java.lang.Object getMappingNamed​(java.lang.Object managedType, java.lang.String name)
      Returns the mapping with the given name.
      java.lang.Object getMappingType​(java.lang.Object mapping)
      Returns the type of the given mapping object.
      java.lang.Object[] getMethodParameterTypeDeclarations​(java.lang.Object constructor)
      Returns the list of type declarations representing the given constructor's parameter types.
      java.lang.Object getReferenceManagedType​(java.lang.Object relationshipMapping)
      Returns the reference managed type from the given relationship mapping.
      java.lang.Object getType​(java.lang.Object typeDeclaration)
      Returns the type defined for the Java member.
      java.lang.Object getType​(java.lang.String typeName)
      Retrieves the class with the given fully qualified name.
      java.lang.Object getType​(Expression expression)
      Returns the type by resolving the given Expression.
      java.lang.Object getTypeDeclaration​(Expression expression)
      Returns the type declaration for the given Expression's type.
      ITypeHelper getTypeHelper()
      Returns the helper that gives access to the most common class metadata.
      java.lang.String getTypeName​(java.lang.Object type)
      Returns the fully qualified class name of the given type.
      boolean isAssignableTo​(java.lang.Object type1, java.lang.Object type2)
      Determines whether type 1 is an instance of type 2.
      boolean isCollectionIdentificationVariable​(java.lang.String variableName)
      Determines whether the given identification variable is defining a join or a collection member declaration expressions.
      boolean isCollectionMapping​(java.lang.Object mapping)
      Determines whether the given mapping is a collection type mapping.
      boolean isEmbeddableMapping​(java.lang.Object mapping)
      Determines whether the given mapping is an embeddable type mapping.
      boolean isEnumType​(java.lang.Object type)
      Determines whether the given type represents an Enum.
      boolean isIdentificationVariableValidInComparison​(IdentificationVariable expression)
      Determines whether an identification variable can be used in a comparison expression when the operator is either '<', '<=', '>', '>='.
      boolean isManagedTypeResolvable​(java.lang.Object managedType)
      Determines whether the given managed type actually exists.
      boolean isPropertyMapping​(java.lang.Object mapping)
      Determines whether the given mapping is a property type mapping.
      boolean isRelationshipMapping​(java.lang.Object mapping)
      Determines whether the given mapping is a relationship type mapping.
      boolean isResultVariable​(java.lang.String variableName)
      Determines if the given variable is a result variable.
      boolean isTransient​(java.lang.Object mapping)
      Determines whether the given mapping is a transient attribute.
      boolean isTypeDeclarationAssignableTo​(java.lang.Object typeDeclaration1, java.lang.Object typeDeclaration2)
      Determines whether type declaration 1 is an instance of type declaration 2.
      boolean isTypeResolvable​(java.lang.Object type)
      Determines whether the given type actually exists.
      void newSubqueryContext​(SimpleSelectStatement expression)
      Changes the state of this helper to use the given subquery.
      java.lang.Object resolveMapping​(java.lang.String identificationVariable, java.lang.String name)
      Returns the mapping that should be a persistence field from the entity defined by the given identification variable.
      java.lang.Object resolveMapping​(Expression expression)
      Returns the mapping for the field represented by the given Expression.
    • Method Detail

      • collectAllDeclarationIdentificationVariables

        void collectAllDeclarationIdentificationVariables​(java.util.Map<java.lang.String,​java.util.List<IdentificationVariable>> identificationVariables)
        Collects the identification variables that are defined in the FROM clause of the current query and from the parent queries.
        Parameters:
        identificationVariables - The Map used to store the variables
      • collectLocalDeclarationIdentificationVariables

        void collectLocalDeclarationIdentificationVariables​(java.util.Map<java.lang.String,​java.util.List<IdentificationVariable>> identificationVariables)
        Collects the identification variables that are defined in the FROM clause of the current query.
        Parameters:
        identificationVariables - The Map used to store the variables
      • disposeSubqueryContext

        void disposeSubqueryContext()
        Disposes this context, which is the current context being used by a subquery. Once it is disposed, any information retrieved will be for the subquery's parent query.
      • entityNames

        java.lang.String[] entityNames()
        Returns the name of the all entities that are present in the context of a persistence unit.
        Returns:
        The list of entity names
      • getAllDeclarations

        java.util.List<JPQLQueryDeclaration> getAllDeclarations()
        Returns the ordered list of JPQLQueryDeclaration, which contain the information contained in the query's FROM clause.
        Returns:
        The list of JPQLQueryDeclaration of the current query that was parsed and from the parent queries
      • getConstructors

        java.lang.Object[] getConstructors​(java.lang.Object type)
        Returns the constructors for the given type. All public, protected, default (package) access, and private constructors should be included.

        If it was going through Hermes SPI, the type of the argument would be IType and the return type would be IConstructor.

        Returns:
        The declared constructors
      • getEmbeddable

        java.lang.Object getEmbeddable​(java.lang.Object type)
        Retrieves the embeddable with the given type.
        Parameters:
        type - The Java type of the embeddable to retrieve
        Returns:
        The embeddable for the given type if it's representing an embeddable; null otherwise
      • getEntityNamed

        java.lang.Object getEntityNamed​(java.lang.String entityName)
        Retrieves the entity with the given entity name.
        Parameters:
        entityName - The abstract schema name of the entity to retrieve
        Returns:
        The entity with the given name; null otherwise
      • getEnumConstants

        java.lang.String[] getEnumConstants​(java.lang.Object type)
        Returns the constant names for the given Enum type.

        If it was going through Hermes SPI, the type of the argument would be IType.

        Parameters:
        type - The Enum type
        Returns:
        The list of constant names
      • getGrammar

        JPQLGrammar getGrammar()
        Returns the JPQLGrammar that defines how the JPQL query was parsed.
        Returns:
        The JPQLGrammar that was used to parse the JPQL query
      • getManagedType

        java.lang.Object getManagedType​(Expression expression)
        Returns the managed type by resolving the given Expression.

        If it was going through Hermes SPI, the return type would be IManagedType.

      • getMappingNamed

        java.lang.Object getMappingNamed​(java.lang.Object managedType,
                                         java.lang.String name)
        Returns the mapping with the given name.

        If it was going through Hermes SPI, the type of the argument would be IManagedType and the return type would be IMapping.

        Parameters:
        managedType - The managed type that has a mapping with the given name
        name - The name of the mapping to retrieve
        Returns:
        Either the mapping or null if it could not be found
      • getMappingType

        java.lang.Object getMappingType​(java.lang.Object mapping)
        Returns the type of the given mapping object.

        If it was going through Hermes SPI, the type of the argument would be IMapping and the return type would be IType.

        Parameters:
        mapping - The mapping object
        Returns:
        The type of the given mapping
      • getMethodParameterTypeDeclarations

        java.lang.Object[] getMethodParameterTypeDeclarations​(java.lang.Object constructor)
        Returns the list of type declarations representing the given constructor's parameter types. If this is the default constructor, then an empty array should be returned.

        If it was going through Hermes SPI, the type of the argument would be IConstructor and the return type would be ITypeDeclaration.

        Parameters:
        constructor - The constructor to return its parameter types
        Returns:
        The list of parameter types or an empty list
      • getReferenceManagedType

        java.lang.Object getReferenceManagedType​(java.lang.Object relationshipMapping)
        Returns the reference managed type from the given relationship mapping.

        If it was going through Hermes SPI, the type of the argument would be IMapping and the return type would be IManagedType.

        Parameters:
        relationshipMapping - The relationship mapping
        Returns:
        The managed type referenced by the given relationship mapping
      • getType

        java.lang.Object getType​(Expression expression)
        Returns the type by resolving the given Expression.

        If it was going through Hermes SPI, the return type would be IType.

        Parameters:
        expression - The Expression to resolve
        Returns:
        The type of the given Expression or null if it could not be validated
      • getType

        java.lang.Object getType​(java.lang.Object typeDeclaration)
        Returns the type defined for the Java member.

        If it was going through Hermes SPI, the type of the argument would be ITypeDeclaration and the return type would be IType.

        Returns:
        The type defined for the Java member
      • getType

        java.lang.Object getType​(java.lang.String typeName)
        Retrieves the class with the given fully qualified name.

        If it was going through Hermes SPI, an IType would be returned.

        Parameters:
        typeName - The fully qualified name of the class to retrieve
        Returns:
        The class to retrieve
      • getTypeDeclaration

        java.lang.Object getTypeDeclaration​(Expression expression)
        Returns the type declaration for the given Expression's type.

        If it was going through Hermes SPI, the type of the argument would be ITypeDeclaration.

        Parameters:
        expression - The Expression to resolve
        Returns:
        Either the type declaration that was resolved for the given Expression
      • getTypeHelper

        ITypeHelper getTypeHelper()
        Returns the helper that gives access to the most common class metadata.
        Returns:
        A helper containing a collection of methods related to class metadata
      • getTypeName

        java.lang.String getTypeName​(java.lang.Object type)
        Returns the fully qualified class name of the given type.

        If it was going through Hermes SPI, the type of the argument would be IType.

        Parameters:
        type - The type to retrieve its name
        Returns:
        The name of the class represented by this one
      • isAssignableTo

        boolean isAssignableTo​(java.lang.Object type1,
                               java.lang.Object type2)
        Determines whether type 1 is an instance of type 2.

        If it was going through Hermes SPI, the type of the arguments would be IType.

        Parameters:
        type1 - The type to check if it is an instance of type 2
        type2 - The type used to determine if the class represented by type 1 is an instance of with one
        Returns:
        true if type 1 is an instance of the type 2; false otherwise
      • isCollectionIdentificationVariable

        boolean isCollectionIdentificationVariable​(java.lang.String variableName)
        Determines whether the given identification variable is defining a join or a collection member declaration expressions.
        Parameters:
        variableName - The identification variable to check for what it maps
        Returns:
        true if the given identification variable maps a collection-valued field defined in a JOIN or IN expression; false if it's not defined or it's mapping an abstract schema name
      • isCollectionMapping

        boolean isCollectionMapping​(java.lang.Object mapping)
        Determines whether the given mapping is a collection type mapping.

        If it was going through Hermes SPI, the type of the arguments would be IMapping.

        Parameters:
        mapping - The mapping object to verify if it represents a collection mapping
        Returns:
        true if the given mapping is a collection mapping; false otherwise
      • isEmbeddableMapping

        boolean isEmbeddableMapping​(java.lang.Object mapping)
        Determines whether the given mapping is an embeddable type mapping.

        If it was going through Hermes SPI, the type of the arguments would be IMapping.

        Parameters:
        mapping - The mapping object to verify if it represents an embeddable mapping
        Returns:
        true if the given mapping is an embeddable mapping; false otherwise
      • isEnumType

        boolean isEnumType​(java.lang.Object type)
        Determines whether the given type represents an Enum.

        If it was going through Hermes SPI, the type of the argument would be IType.

        Returns:
        true if the given type is an Enum; false otherwise
      • isIdentificationVariableValidInComparison

        boolean isIdentificationVariableValidInComparison​(IdentificationVariable expression)
        Determines whether an identification variable can be used in a comparison expression when the operator is either '<', '<=', '>', '>='.
        Parameters:
        expression - The IdentificationVariable that is mapped to either an entity, a singled-object value field, a collection-valued object field
        Returns:
        true if it can be used in a ordering comparison expression; false if it can't
      • isManagedTypeResolvable

        boolean isManagedTypeResolvable​(java.lang.Object managedType)
        Determines whether the given managed type actually exists.

        If it was going through Hermes SPI, the type of the argument would be IManagedType.

        Returns:
        true if the given managed type can be located; false if it could not be found
      • isPropertyMapping

        boolean isPropertyMapping​(java.lang.Object mapping)
        Determines whether the given mapping is a property type mapping.

        If it was going through Hermes SPI, the type of the arguments would be IMapping.

        Parameters:
        mapping - The mapping object to verify if it represents a property mapping
        Returns:
        true if the given mapping is a property mapping; false otherwise
      • isRelationshipMapping

        boolean isRelationshipMapping​(java.lang.Object mapping)
        Determines whether the given mapping is a relationship type mapping.

        If it was going through Hermes SPI, the type of the arguments would be IMapping.

        Parameters:
        mapping - The mapping object to verify if it represents a relationship mapping
        Returns:
        true if the given mapping is a relationship mapping; false otherwise
      • isResultVariable

        boolean isResultVariable​(java.lang.String variableName)
        Determines if the given variable is a result variable.
        Parameters:
        variableName - The variable to check if it's a result variable
        Returns:
        true if the given variable is defined as a result variable; false otherwise
      • isTransient

        boolean isTransient​(java.lang.Object mapping)
        Determines whether the given mapping is a transient attribute.

        If it was going through Hermes SPI, the type of the arguments would be IMapping.

        Parameters:
        mapping - The mapping object to verify if it represents a transient attribute
        Returns:
        true if the given attribute is a transient mapping; false otherwise
      • isTypeDeclarationAssignableTo

        boolean isTypeDeclarationAssignableTo​(java.lang.Object typeDeclaration1,
                                              java.lang.Object typeDeclaration2)
        Determines whether type declaration 1 is an instance of type declaration 2.

        If it was going through Hermes SPI, the type of the arguments would be ITypeDeclaration.

        Parameters:
        typeDeclaration1 - The type declaration to check if it is an instance of type declaration 2
        typeDeclaration2 - The type used to determine if the class represented by type declaration 1 is an instance of with one
        Returns:
        true if type declaration 1 is an instance of the type declaration 2; false otherwise
      • isTypeResolvable

        boolean isTypeResolvable​(java.lang.Object type)
        Determines whether the given type actually exists.

        If it was going through Hermes SPI, the type of the argument would be IType.

        Returns:
        true if the actual class exists; false otherwise
      • newSubqueryContext

        void newSubqueryContext​(SimpleSelectStatement expression)
        Changes the state of this helper to use the given subquery.
        Parameters:
        expression - The parsed tree representation of the subquery that will become the current query
        See Also:
        disposeSubqueryContext()
      • resolveMapping

        java.lang.Object resolveMapping​(Expression expression)
        Returns the mapping for the field represented by the given Expression.

        If it was going through Hermes SPI, the return type would be IMapping.

        Parameters:
        expression - The Expression representing a state field path expression or a collection-valued path expression
        Returns:
        Either the mapping or null if none exists
      • resolveMapping

        java.lang.Object resolveMapping​(java.lang.String identificationVariable,
                                        java.lang.String name)
        Returns the mapping that should be a persistence field from the entity defined by the given identification variable.

        If it was going through Hermes SPI, the return type would be IMapping.

        Parameters:
        identificationVariable - The identification variable that is defined in the FROM clause of the query (which can be in the current subquery) or in one of the parent queries.
        name - The name of the persistent field to retrieve
        Returns:
        The persistence field with the given name or null if it could not be found