Class AbstractStateObject

    • Constructor Detail

      • AbstractStateObject

        protected AbstractStateObject​(StateObject parent)
        Creates a new AbstractStateObject.
        Parameters:
        parent - The parent of this state object, which cannot be null
        Throws:
        java.lang.NullPointerException - The given parent cannot be null, unless changeSupport is overridden and does not throw the exception
    • Method Detail

      • acceptUnknownVisitor

        protected boolean acceptUnknownVisitor​(StateObjectVisitor visitor)
        The given StateObjectVisitor needs to visit this class but it is defined by a third-party provider. This method will programmatically invoke the visit method defined on the given visitor which signature should be.
        {public|protected|private} void visit(ThirdPartyStateObject stateObject)

        or

        {public|protected|private} void visit(StateObject stateObject)

        Parameters:
        visitor - The StateObjectVisitor to visit this StateObject programmatically
        Returns:
        true if the call was successfully executed; false otherwise
        Since:
        2.4
      • acceptUnknownVisitor

        protected void acceptUnknownVisitor​(StateObjectVisitor visitor,
                                            java.lang.Class<?> type,
                                            java.lang.Class<?> parameterType)
                                     throws java.lang.NoSuchMethodException,
                                            java.lang.IllegalAccessException,
                                            java.lang.reflect.InvocationTargetException
        The given StateObjectVisitor needs to visit this class but it is defined by a third-party provider. This method will programmatically invoke the visit method defined on the given visitor which signature should be.
        {public|protected|private} void visit(ThirdPartyStateObject stateObject)

        or

        {public|protected|private} void visit(StateObject stateObject)

        Parameters:
        visitor - The StateObjectVisitor to visit this StateObject programmatically
        type - The type found in the hierarchy of the given StateObjectVisitor that will be used to retrieve the visit method
        parameterType - The parameter type of the visit method
        Throws:
        java.lang.NoSuchMethodException
        java.lang.IllegalAccessException
        java.lang.reflect.InvocationTargetException
        See Also:
        acceptUnknownVisitor(StateObjectVisitor)
        Since:
        2.4
      • addChildren

        protected void addChildren​(java.util.List<StateObject> children)
        Adds the children of this StateObject to the given list.
        Parameters:
        children - The list used to store the children
      • addProblems

        protected void addProblems​(java.util.List<Problem> problems)
        Adds to the given list the problems that were found with the current state of this StateObject, which means there are validation issues.
        Parameters:
        problems - The list to which the problems are added
      • addPropertyChangeListener

        public final void addPropertyChangeListener​(java.lang.String propertyName,
                                                    IPropertyChangeListener<?> listener)
        Registers the given IPropertyChangeListener for the specified property. The listener will be notified only for changes to the specified property.
        Specified by:
        addPropertyChangeListener in interface StateObject
        Parameters:
        propertyName - The name of the property for which the listener was registered
        listener - The listener to be notified upon changes
      • areEquivalent

        protected final boolean areEquivalent​(StateObject stateObject1,
                                              StateObject stateObject2)
        Determines whether the given two StateObject are equivalent, i.e. the information of both StateObject is the same.
        Parameters:
        stateObject1 - The first StateObject to compare its content with the other one
        stateObject2 - The second StateObject to compare its content with the other one
        Returns:
        true if both objects are equivalent; false otherwise
      • buildProblem

        protected final Problem buildProblem​(java.lang.String messageKey)
        Creates a new Problem describing a single issue found with the information contained in this StateObject.
        Parameters:
        messageKey - The key used to retrieve the localized message describing the problem found with the current state of this StateObject
        Returns:
        The new Problem
      • buildProblem

        protected final Problem buildProblem​(java.lang.String messageKey,
                                             java.lang.String... arguments)
        Creates a new Problem describing a single issue found with the information contained in this StateObject.
        Parameters:
        messageKey - The key used to retrieve the localized message describing the problem found with the current state of this StateObject
        arguments - A list of arguments that can be used to complete the message or an empty list if no additional information is necessary
        Returns:
        The new Problem
      • buildStateObject

        protected <T extends StateObject> T buildStateObject​(java.lang.CharSequence jpqlFragment,
                                                             java.lang.String queryBNFId)
        Parses the given JPQL fragment using the given JPQL query BNF.
        Parameters:
        jpqlFragment - A portion of a JPQL query that will be parsed and converted into a StateObject
        queryBNFId - The unique identifier of the BNF that determines how to parse the fragment
        Returns:
        A StateObject representation of the given JPQL fragment
      • buildStateObjects

        protected <T extends StateObject> java.util.List<T> buildStateObjects​(java.lang.CharSequence jpqlFragment,
                                                                              java.lang.String queryBNFId)
        Parses the given JPQL fragment using the given JPQL query BNF.
        Parameters:
        jpqlFragment - A portion of a JPQL query that will be parsed and converted into either a single StateObject or a list of StateObject, which happens when the fragment contains a collection of items separated by either a comma or a space
        queryBNFId - The unique identifier of the BNF that will be used to parse the fragment
        Returns:
        A list of StateObjects representing the given JPQL fragment, which means the list may contain a single StateObject or a multiple StateObjects if the fragment contains more than one expression of the same type. Example: "JOIN e.employees e LEFT JOIN e.address a", this would be parsed in two state objects
      • checkParent

        protected StateObject checkParent​(StateObject parent)
        Checks whether the given parent is null or not. If it's null then throw a NullPointerException.
        Parameters:
        parent - The parent of this state object
        Returns:
        The given object
      • children

        public final java.lang.Iterable<StateObject> children()
        Returns the ordered children of this StateObject.
        Specified by:
        children in interface StateObject
        Returns:
        The children of this StateObject or an empty iterable this state object does not have children
      • equals

        public final boolean equals​(java.lang.Object object)
        Overrides:
        equals in class java.lang.Object
      • firePropertyChanged

        protected final void firePropertyChanged​(java.lang.String propertyName,
                                                 java.lang.Object oldValue,
                                                 java.lang.Object newValue)
        Notifies the IPropertyChangeListeners that have been registered with the given property name that the property has changed.
        Parameters:
        propertyName - The name of the property associated with the property change
        oldValue - The old value of the property that changed
        newValue - The new value of the property that changed
      • getChangeSupport

        protected final ChangeSupport getChangeSupport()
        Returns the object responsible to actually register the listeners and to notify them upon changes made to this StateObject.
        Returns:
        The manager of listeners and notification
      • getDeclaration

        public DeclarationStateObject getDeclaration()
        Returns the declaration clause which defines the domain of the query by declaring identification variables.
        Specified by:
        getDeclaration in interface StateObject
        Returns:
        The declaration clause of which this StateObject is a child; i.e. either the top-level declaration if this is part of the top query or the sub-level declaration if this is part of a subquery
      • getExpression

        public Expression getExpression()
        Returns the actual parsed object if this StateObject representation of the JPQL query was created by parsing an existing JPQL query.
        Specified by:
        getExpression in interface StateObject
        Returns:
        The parsed object when a JPQL query is parsed and converted into a StateObject or null when the JPQL query is manually created (i.e. not from a string)
      • getGrammar

        public JPQLGrammar getGrammar()
        Returns the grammar that defines how to parse a JPQL query.
        Specified by:
        getGrammar in interface StateObject
        Returns:
        The grammar that was used to parse the JPQL query
      • getType

        public IType getType​(java.lang.Class<?> type)
        Retrieves the external type for the given Java type.
        Parameters:
        type - The Java type to wrap with an external form
        Returns:
        The external form of the given type
      • getType

        public IType getType​(java.lang.String typeName)
        Retrieves the external class for the given fully qualified class name.
        Parameters:
        typeName - The fully qualified class name of the class to retrieve
        Returns:
        The external form of the class to retrieve
      • getTypeHelper

        public TypeHelper getTypeHelper()
        Returns a helper that gives access to the most common types.
        Returns:
        A helper containing a collection of methods related to IType
      • getTypeRepository

        public ITypeRepository getTypeRepository()
        Returns the type repository for the application.
        Returns:
        The repository of ITypes
      • hashCode

        public final int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • initialize

        protected void initialize()
        Initializes this state object.
      • isDecorated

        public boolean isDecorated()
        Determines whether this StateObject is being decorated by another StateObject, which means the behavior is modified by the given one. return true if this StateObject is being decorated; false otherwise
        Specified by:
        isDecorated in interface StateObject
      • isEquivalent

        public boolean isEquivalent​(StateObject stateObject)
        Determines whether the given StateObject is equivalent to this one, i.e. the information of both StateObject is the same.
        Specified by:
        isEquivalent in interface StateObject
        Parameters:
        stateObject - The StateObject to compare its content to this one
        Returns:
        true if both object are equivalent; false otherwise
      • parent

        protected <T extends StateObject> java.util.List<T> parent​(java.util.List<T> stateObjects)
        Makes sure the given list of StateObject has this one as its parent.
        Parameters:
        stateObjects - The list of StateObject to have this one as its parent
        Returns:
        The given list of StateObject
      • parent

        protected <T extends StateObject> T[] parent​(T... stateObjects)
        Makes sure the given list of StateObject has this one as its parent.
        Parameters:
        stateObjects - The list of StateObject to have this one as its parent
        Returns:
        The given list of StateObject
      • parent

        protected <T extends StateObject> T parent​(T stateObject)
        Makes sure the given StateObject has this one as its parent.
        Parameters:
        stateObject - The StateObject to have this one as its parent
        Returns:
        The given StateObject
      • removePropertyChangeListener

        public final void removePropertyChangeListener​(java.lang.String propertyName,
                                                       IPropertyChangeListener<?> listener)
        Unregisters the given IPropertyChangeListener that was registered for the specified property. The listener will no longer be notified when the property changes.
        Specified by:
        removePropertyChangeListener in interface StateObject
        Parameters:
        propertyName - The name of the property for which the listener was registered
        listener - The listener to unregister
      • setExpression

        public void setExpression​(Expression expression)
        Sets the actual parsed object if this StateObject representation of the JPQL query is created by converting the parsed representation of the JPQL query.
        Parameters:
        expression - The parsed object when a JPQL query is parsed
      • toString

        public final java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • toString

        public final void toString​(java.lang.Appendable writer)
        Prints out a string representation of this StateObject, which should not be used to define a true string representation of a JPQL query but should be used for debugging purposes.

        Important: If this StateObject is decorated by another one, then StateObject.toString(Appendable) from that decorator is invoked, otherwise the information contained in this one will be printed out.

        Specified by:
        toString in interface StateObject
        Parameters:
        writer - The writer used to print out the string representation
        See Also:
        StateObject.toText(Appendable)
      • toStringInternal

        protected final void toStringInternal​(java.lang.Appendable writer)
                                       throws java.io.IOException
        Prints out a string representation of this StateObject.

        Important: If this StateObject is decorated by another one, then toString(Appendable) from that decorator is invoked, otherwise toTextInternal(Appendable) from this one is invoked.

        Parameters:
        writer - The writer used to print out the string representation
        Throws:
        java.io.IOException - This should never happens, it is only required because Appendable.append(CharSequence) throws an IOException
      • toStringItems

        protected void toStringItems​(java.lang.Appendable writer,
                                     java.util.List<? extends StateObject> items,
                                     boolean useComma)
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • toText

        public final void toText​(java.lang.Appendable writer)
        Prints out a string representation of this StateObject, which should not be used to define a true string representation of a JPQL query but should be used for debugging purposes.

        Important: Even if this StateObject is decorated by another one, the decorator will not be used to print out a string representation of this one.

        Specified by:
        toText in interface StateObject
        Parameters:
        writer - The writer used to print out the string representation
        See Also:
        StateObject.toString(Appendable)
      • toTextInternal

        protected abstract void toTextInternal​(java.lang.Appendable writer)
                                        throws java.io.IOException
        Prints out a string representation of this StateObject, which should not be used to define a true string representation of a JPQL query but should be used for debugging purposes.
        Parameters:
        writer - The writer used to print out the string representation
        Throws:
        java.io.IOException - This should never happens, it is only required because Appendable is used instead of any concrete class