org.apache.openjpa.kernel.exps
Class AbstractExpressionBuilder

java.lang.Object
  extended by org.apache.openjpa.kernel.exps.AbstractExpressionBuilder
Direct Known Subclasses:
JPQLExpressionBuilder

public abstract class AbstractExpressionBuilder
extends Object

Abstract base class to help build expressions. Provides generic language-independent support for variable resolution, path traversal, and error messages.

Author:
Marc Prud'hommeaux

Field Summary
protected static int CONTAINS_TYPE_ELEMENT
           
protected static int CONTAINS_TYPE_KEY
           
protected static int CONTAINS_TYPE_VALUE
           
protected static int EX_FATAL
           
protected static int EX_UNSUPPORTED
           
protected static int EX_USER
           
protected  ExpressionFactory factory
           
protected  Resolver resolver
           
protected static Class TYPE_CHAR_OBJ
           
protected static Class TYPE_COLLECTION
           
protected static Class TYPE_MAP
           
protected static Class TYPE_NUMBER
           
protected static Class TYPE_OBJECT
           
protected static Class TYPE_STRING
           
 
Constructor Summary
AbstractExpressionBuilder(ExpressionFactory factory, Resolver resolver)
          Constructor.
 
Method Summary
protected  ClassMetaData addAccessPath(ClassMetaData meta)
          Register the specified metadata as being in the query's access path.
protected  void assertUnboundVariablesValid()
          Validate that all unbound variables are of a PC type.
protected  void bind(Value var)
          Record that the given variable is bound.
protected abstract  String currentQuery()
          Returns the current string being parsed; used for error messages.
protected  ClassMetaData[] getAccessPath()
          Return the recorded query access path.
protected abstract  ClassLoader getClassLoader()
          Returns the class loader that should be used for resolving class names (in addition to the resolver in the query).
protected abstract  Class getDeclaredVariableType(String name)
          Returns the type of the named variabe if it has been declared.
protected abstract  Localizer getLocalizer()
          Used for obtaining the Localizer to use for translating error messages.
protected  ClassMetaData getMetaData(Class c, boolean required)
          Convenience method to get metadata for the given type.
protected  ClassMetaData getMetaData(Class c, boolean required, ClassLoader loader)
          Convenience method to get metadata for the given type.
protected  Value getVariable(String id, boolean bind)
          Returns a value for the given id.
protected  boolean isBound(Value var)
          Return true if the given variable has been bound.
protected abstract  boolean isDeclaredVariable(String id)
          Returns whether the specified variable name has been explicitly declared.
protected  boolean isSeenVariable(String id)
          Return whether the given id has been used as a variable.
protected  OpenJPAException parseException(int e, String token, Object[] args, Exception nest)
          Create a proper parse exception for the given reason.
protected  void setImplicitContainsTypes(Value val1, Value val2, int op)
          Set the implicit types of the given values based on the fact that the first is supposed to contain the second.
protected static void setImplicitType(Value val, Class expected)
          Set the implicit type of the given value to the given class.
protected  void setImplicitTypes(Value val1, Value val2, Class expected)
          Set the implicit types of the given values based on the fact that they're used together, and based on the operator type.
protected  Value traversePath(Path path, String field)
          Traverse the given field in the given path.
protected  Value traversePath(Path path, String field, boolean pcOnly, boolean allowNull)
          Traverse the given field in the given path.
protected  Object traverseStaticField(Class cls, String field)
          Return a constant containing the value of the given static field.
protected  Value traverseXPath(Path path, String field)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

EX_USER

protected static final int EX_USER
See Also:
Constant Field Values

EX_FATAL

protected static final int EX_FATAL
See Also:
Constant Field Values

EX_UNSUPPORTED

protected static final int EX_UNSUPPORTED
See Also:
Constant Field Values

TYPE_OBJECT

protected static final Class TYPE_OBJECT

TYPE_STRING

protected static final Class TYPE_STRING

TYPE_CHAR_OBJ

protected static final Class TYPE_CHAR_OBJ

TYPE_NUMBER

protected static final Class TYPE_NUMBER

TYPE_COLLECTION

protected static final Class TYPE_COLLECTION

TYPE_MAP

protected static final Class TYPE_MAP

CONTAINS_TYPE_ELEMENT

protected static final int CONTAINS_TYPE_ELEMENT
See Also:
Constant Field Values

CONTAINS_TYPE_KEY

protected static final int CONTAINS_TYPE_KEY
See Also:
Constant Field Values

CONTAINS_TYPE_VALUE

protected static final int CONTAINS_TYPE_VALUE
See Also:
Constant Field Values

resolver

protected final Resolver resolver

factory

protected ExpressionFactory factory
Constructor Detail

AbstractExpressionBuilder

public AbstractExpressionBuilder(ExpressionFactory factory,
                                 Resolver resolver)
Constructor.

Parameters:
factory - the expression factory to use
resolver - used to resolve variables, parameters, and class names used in the query
Method Detail

getClassLoader

protected abstract ClassLoader getClassLoader()
Returns the class loader that should be used for resolving class names (in addition to the resolver in the query).


parseException

protected OpenJPAException parseException(int e,
                                          String token,
                                          Object[] args,
                                          Exception nest)
Create a proper parse exception for the given reason.


addAccessPath

protected ClassMetaData addAccessPath(ClassMetaData meta)
Register the specified metadata as being in the query's access path.


getAccessPath

protected ClassMetaData[] getAccessPath()
Return the recorded query access path.


isBound

protected boolean isBound(Value var)
Return true if the given variable has been bound.


bind

protected void bind(Value var)
Record that the given variable is bound.


getVariable

protected Value getVariable(String id,
                            boolean bind)
Returns a value for the given id.


assertUnboundVariablesValid

protected void assertUnboundVariablesValid()
Validate that all unbound variables are of a PC type. If not, assume that the user actually made a typo that we took for an implicit unbound variable.


isDeclaredVariable

protected abstract boolean isDeclaredVariable(String id)
Returns whether the specified variable name has been explicitly declared. Note all query languages necessarily support declaring variables.

Parameters:
id - the variable to check
Returns:
true if the variabe has been explicitely declared

isSeenVariable

protected boolean isSeenVariable(String id)
Return whether the given id has been used as a variable.


getMetaData

protected ClassMetaData getMetaData(Class c,
                                    boolean required)
Convenience method to get metadata for the given type.


getMetaData

protected ClassMetaData getMetaData(Class c,
                                    boolean required,
                                    ClassLoader loader)
Convenience method to get metadata for the given type.


traversePath

protected Value traversePath(Path path,
                             String field)
Traverse the given field in the given path.


traverseXPath

protected Value traverseXPath(Path path,
                              String field)

traversePath

protected Value traversePath(Path path,
                             String field,
                             boolean pcOnly,
                             boolean allowNull)
Traverse the given field in the given path.


traverseStaticField

protected Object traverseStaticField(Class cls,
                                     String field)
Return a constant containing the value of the given static field.


getDeclaredVariableType

protected abstract Class getDeclaredVariableType(String name)
Returns the type of the named variabe if it has been declared.


setImplicitTypes

protected void setImplicitTypes(Value val1,
                                Value val2,
                                Class expected)
Set the implicit types of the given values based on the fact that they're used together, and based on the operator type.


setImplicitContainsTypes

protected void setImplicitContainsTypes(Value val1,
                                        Value val2,
                                        int op)
Set the implicit types of the given values based on the fact that the first is supposed to contain the second.


setImplicitType

protected static void setImplicitType(Value val,
                                      Class expected)
Set the implicit type of the given value to the given class.


getLocalizer

protected abstract Localizer getLocalizer()
Used for obtaining the Localizer to use for translating error messages.


currentQuery

protected abstract String currentQuery()
Returns the current string being parsed; used for error messages.



Copyright © 2006-2008 Apache Software Foundation. All Rights Reserved.