org.apache.openjpa.jdbc.sql
Interface Select

All Superinterfaces:
SelectExecutor
All Known Implementing Classes:
LogicalUnion.UnionSelect, SelectImpl

public interface Select
extends SelectExecutor

Abstraction of a SQL SELECT statement.

Author:
Abe White

Field Summary
static int EAGER_INNER
          Constant indicating to batch the select using an inner join.
static int EAGER_OUTER
          Constant indicating to batch the select using an outer join.
static int EAGER_PARALLEL
          Constant indicating to use a separate select executed in parallel.
static String FROM_SELECT_ALIAS
          The alias to use for the from select, if any.
static int SUBS_ANY_JOINABLE
          Constant indicating to select subclasses but without adding any class conditions to the select.
static int SUBS_EXACT
          Constant indicating to select this class but without adding any class conditions to the select.
static int SUBS_JOINABLE
          Constant indicating to add conditions to the selcet to select this class and joinable subclasses only.
static int SUBS_NONE
          Constant indicating to add conditions to the select to select this class only.
static int TYPE_JOINLESS
          Constant indicating a select can be made without joins.
static int TYPE_TWO_PART
          Constant indicating a two-part select and load.
 
Method Summary
 void addJoinClassConditions()
          Apply class conditions from relation joins.
 Joins and(Joins joins1, Joins joins2)
          AND the given joins together.
 void append(SQLBuffer buf, Joins joins)
          Append the given joins to the given buffer.
 void clearOrdering()
          Clear odering conditions.
 void clearSelects()
          Clear the existing column selects.
 SelectExecutor eagerClone(FieldMapping key, int eagerType, boolean toMany, int sels)
          Return a select that will be eagerly executed with this one, or null if the select cannot be created for the given key and join type.
 SelectExecutor fullClone(int sels)
          Return a SELECT that is a complete clone of this one.
 String getColumnAlias(Column col)
          Return the alias for the given column.
 String getColumnAlias(Column col, Joins joins)
          Return the alias for the given column.
 String getColumnAlias(String col, Table table)
          Return the alias for the given column.
 String getColumnAlias(String col, Table table, Joins joins)
          Return the alias for the given column.
 SelectExecutor getEager(FieldMapping key)
          Return the eager select for the given key.
 long getEndIndex()
          The result end index.
 Select getFromSelect()
          Another select instance that creates a temporary table from which this select pulls data.
 SQLBuffer getGrouping()
          Return the grouping SQL for this select.
 SQLBuffer getHaving()
          Return the HAVING clause, or null if none.
 List getIdentifierAliases()
          Get the aliases for identifier columns that can be used in COUNT selects to find the number of matches.
 Iterator getJoinIterator()
          Return the top-level Join elements for this select.
 Joins getJoins()
          Return the top-level joins for this select.
 SQLBuffer getOrdering()
          Return the ordering SQL for this select.
 Select getParent()
          Return the parent of this select, if it is a subselect.
 List getSelectAliases()
          Return the aliases of all selected columns and all selected buffers, in the order they were selected.
 long getStartIndex()
          The result start index.
 String getSubselectPath()
          Return the subselect path for this select, if it is a subselect.
 List getSubselects()
          Return this select's subselects, or empty collection if none.
 Collection getTableAliases()
          Return the set of all used table aliases.
 SQLBuffer getWhere()
          Return the WHERE clause, minus any necessary end joins.
 void groupBy(ClassMapping mapping, int subclasses, JDBCStore store, JDBCFetchConfiguration fetch)
          Group by the columns of the given mapping, possibly including subclasses.
 void groupBy(ClassMapping mapping, int subclasses, JDBCStore store, JDBCFetchConfiguration fetch, Joins joins)
          Group by the columns of the given mapping, possibly including subclasses.
 void groupBy(Column col)
          Group by the given column.
 void groupBy(Column[] cols)
          Group by the given columns.
 void groupBy(Column[] cols, Joins joins)
          Group by the given columns.
 void groupBy(Column col, Joins joins)
          Group by the given column.
 void groupBy(SQLBuffer sql)
          Add a GROUP BY clause.
 void groupBy(SQLBuffer sql, Joins joins)
          Add a GROUP BY clause.
 void groupBy(String sql)
          Add a GROUP BY clause.
 void groupBy(String sql, Joins joins)
          Add a GROUP BY clause.
 boolean hasEagerJoin(boolean toMany)
          Whether this select has an eager join of the specified type.
 boolean hasJoin(boolean toMany)
          Whether this select has a join of the specified type.
 void having(SQLBuffer sql)
          Add the given having conditions.
 void having(SQLBuffer sql, Joins joins)
          Add the given having conditions.
 void having(String sql)
          Add the given having conditions.
 void having(String sql, Joins joins)
          Add the given having conditions.
 int indexOf()
          The index of this select within the UNION, or 0.
 boolean isAggregate()
          Return true if this is an aggregate select.
 boolean isLob()
          Return true if this select includes a LOB.
 boolean isSelected(Table table)
          Return whether the given table is being used in this select.
 Joins newJoins()
          Return a new instance to use for joining.
 Joins newOuterJoins()
          Return a new instance to use for outer joining.
 Joins or(Joins joins1, Joins joins2)
          OR the given joins together.
 int orderBy(Column[] cols, boolean asc, boolean sel)
          Order by the given columns.
 int orderBy(Column[] cols, boolean asc, Joins joins, boolean sel)
          Order by the given columns.
 boolean orderBy(Column col, boolean asc, boolean sel)
          Order by the given column.
 boolean orderBy(Column col, boolean asc, Joins joins, boolean sel)
          Order by the given column.
 boolean orderBy(SQLBuffer sql, boolean asc, boolean sel)
          Add an ORDER BY clause.
 boolean orderBy(SQLBuffer sql, boolean asc, Joins joins, boolean sel)
          Add an ORDER BY clause.
 boolean orderBy(String sql, boolean asc, boolean sel)
          Add an ORDER BY clause.
 boolean orderBy(String sql, boolean asc, Joins joins, boolean sel)
          Add an ORDER BY clause.
 int orderByPrimaryKey(ClassMapping mapping, boolean asc, boolean sel)
          Order on the primary key columns of the given mapping, joining to superclasses as necessary to get all columns needed to construct an object id.
 int orderByPrimaryKey(ClassMapping mapping, boolean asc, Joins joins, boolean sel)
          Select and order on the primary key columns of the given mapping, joining to superclasses as necessary to get all columns needed to construct an object id.
 Joins outer(Joins joins)
          Return a join set making the given joins outer joins.
 void select(ClassMapping mapping, int subclasses, JDBCStore store, JDBCFetchConfiguration fetch, int eager)
          Select the columns of the given mapping, possibly including subclasses.
 void select(ClassMapping mapping, int subclasses, JDBCStore store, JDBCFetchConfiguration fetch, int eager, Joins joins)
          Select the columns of the given mapping, possibly including subclasses.
 boolean select(Column col)
          Select the given column.
 int select(Column[] cols)
          Select the given columns.
 int select(Column[] cols, Joins joins)
          Select the given columns.
 boolean select(Column col, Joins joins)
          Select the given column.
 boolean select(SQLBuffer sql, Object id)
          Select the given SQL; the given id object is an identifier to use when retrieving the corresponding value from a Result.
 boolean select(SQLBuffer sql, Object id, Joins joins)
          Select the given SQL; the given id object is an identifier to use when retrieving the corresponding value from a Result.
 boolean select(String sql, Object id)
          Select the given SQL; the given id object is an identifier to use when retrieving the corresponding value from a Result.
 boolean select(String sql, Object id, Joins joins)
          Select the given SQL; the given id object is an identifier to use when retrieving the corresponding value from a Result.
 void selectIdentifier(ClassMapping mapping, int subclasses, JDBCStore store, JDBCFetchConfiguration fetch, int eager)
          Select the columns of the given mapping, possibly including subclasses.
 void selectIdentifier(ClassMapping mapping, int subclasses, JDBCStore store, JDBCFetchConfiguration fetch, int eager, Joins joins)
          Select the columns of the given mapping, possibly including subclasses.
 boolean selectIdentifier(Column col)
          Select the given column as one that can be used to get a count of distinct matches.
 int selectIdentifier(Column[] cols)
          Select the given columns as ones that can be used to get a count of distinct matches.
 int selectIdentifier(Column[] cols, Joins joins)
          Select the given columns as ones that can be used to get a count of distinct matches.
 boolean selectIdentifier(Column col, Joins joins)
          Select the given column as one that can be used to get a count of distinct matches.
 void selectPlaceholder(String sql)
          Select the given SQL as a placeholder for a UNION element.
 int selectPrimaryKey(ClassMapping mapping)
          Select the primary key columns of the given mapping, joining to superclasses as necessary to get all columns needed to construct an object id.
 int selectPrimaryKey(ClassMapping mapping, Joins joins)
          Select the primary key columns of the given mapping, joining to superclasses as necessary to get all columns needed to construct an object id.
 void setAggregate(boolean agg)
          Set to true for aggregate selects.
 void setFromSelect(Select sel)
          Another select instance that creates a temporary table from which this select pulls data.
 void setLob(boolean lob)
          Set to true for selects that include LOB columns.
 void setParent(Select parent, String path)
          Turn this select into a subselect of the given instance.
 void setRange(long start, long end)
          Set the result range for this select.
 String toString()
          Implement toString to generate SQL string for profiling/debuggging.
 void where(Joins joins)
          Add the given where conditions.
 void where(SQLBuffer sql)
          Add the given where conditions.
 void where(SQLBuffer sql, Joins joins)
          Add the given where conditions.
 void where(String sql)
          Add the given where conditions.
 void where(String sql, Joins joins)
          Add the given where conditions.
 SelectExecutor whereClone(int sels)
          Return a SELECT with the same joins and where conditions as this one.
 void whereForeignKey(ForeignKey fk, Object oid, ClassMapping mapping, JDBCStore store)
          Add where conditions setting the given foreign key to the given oid values.
 void wherePrimaryKey(Object oid, ClassMapping mapping, JDBCStore store)
          Add where conditions setting the mapping's primary key to the given oid values.
 
Methods inherited from interface org.apache.openjpa.jdbc.sql.SelectExecutor
execute, execute, getAutoDistinct, getConfiguration, getCount, getExpectedResultCount, getJoinSyntax, isDistinct, isLRS, setAutoDistinct, setDistinct, setExpectedResultCount, setJoinSyntax, setLRS, supportsLocking, supportsRandomAccess, toSelect, toSelectCount
 

Field Detail

EAGER_INNER

static final int EAGER_INNER
Constant indicating to batch the select using an inner join.

See Also:
Constant Field Values

EAGER_OUTER

static final int EAGER_OUTER
Constant indicating to batch the select using an outer join.

See Also:
Constant Field Values

EAGER_PARALLEL

static final int EAGER_PARALLEL
Constant indicating to use a separate select executed in parallel.

See Also:
Constant Field Values

TYPE_JOINLESS

static final int TYPE_JOINLESS
Constant indicating a select can be made without joins.

See Also:
Constant Field Values

TYPE_TWO_PART

static final int TYPE_TWO_PART
Constant indicating a two-part select and load.

See Also:
Constant Field Values

SUBS_JOINABLE

static final int SUBS_JOINABLE
Constant indicating to add conditions to the selcet to select this class and joinable subclasses only.

See Also:
Constant Field Values

SUBS_NONE

static final int SUBS_NONE
Constant indicating to add conditions to the select to select this class only.

See Also:
Constant Field Values

SUBS_ANY_JOINABLE

static final int SUBS_ANY_JOINABLE
Constant indicating to select subclasses but without adding any class conditions to the select.

See Also:
Constant Field Values

SUBS_EXACT

static final int SUBS_EXACT
Constant indicating to select this class but without adding any class conditions to the select.

See Also:
Constant Field Values

FROM_SELECT_ALIAS

static final String FROM_SELECT_ALIAS
The alias to use for the from select, if any.

See Also:
Constant Field Values
Method Detail

indexOf

int indexOf()
The index of this select within the UNION, or 0.


getSubselects

List getSubselects()
Return this select's subselects, or empty collection if none.


getParent

Select getParent()
Return the parent of this select, if it is a subselect.


getSubselectPath

String getSubselectPath()
Return the subselect path for this select, if it is a subselect.


setParent

void setParent(Select parent,
               String path)
Turn this select into a subselect of the given instance.


getFromSelect

Select getFromSelect()
Another select instance that creates a temporary table from which this select pulls data.


setFromSelect

void setFromSelect(Select sel)
Another select instance that creates a temporary table from which this select pulls data.


hasEagerJoin

boolean hasEagerJoin(boolean toMany)
Whether this select has an eager join of the specified type.


hasJoin

boolean hasJoin(boolean toMany)
Whether this select has a join of the specified type.


isSelected

boolean isSelected(Table table)
Return whether the given table is being used in this select.


getTableAliases

Collection getTableAliases()
Return the set of all used table aliases.


getSelectAliases

List getSelectAliases()
Return the aliases of all selected columns and all selected buffers, in the order they were selected. Each alias may be either a string or a SQLBuffer.


getIdentifierAliases

List getIdentifierAliases()
Get the aliases for identifier columns that can be used in COUNT selects to find the number of matches. Each alias will be a string. If no identifier columns have been nominated, then all column alises are returned.


getOrdering

SQLBuffer getOrdering()
Return the ordering SQL for this select.


getGrouping

SQLBuffer getGrouping()
Return the grouping SQL for this select.


getWhere

SQLBuffer getWhere()
Return the WHERE clause, minus any necessary end joins.


getHaving

SQLBuffer getHaving()
Return the HAVING clause, or null if none.


addJoinClassConditions

void addJoinClassConditions()
Apply class conditions from relation joins. This may affect the return values of getJoins(), getJoinIterator(), and getWhere().


getJoins

Joins getJoins()
Return the top-level joins for this select.


getJoinIterator

Iterator getJoinIterator()
Return the top-level Join elements for this select.


getStartIndex

long getStartIndex()
The result start index.


getEndIndex

long getEndIndex()
The result end index.


setRange

void setRange(long start,
              long end)
Set the result range for this select.


getColumnAlias

String getColumnAlias(Column col)
Return the alias for the given column.


getColumnAlias

String getColumnAlias(Column col,
                      Joins joins)
Return the alias for the given column.


getColumnAlias

String getColumnAlias(String col,
                      Table table)
Return the alias for the given column.


getColumnAlias

String getColumnAlias(String col,
                      Table table,
                      Joins joins)
Return the alias for the given column.


isAggregate

boolean isAggregate()
Return true if this is an aggregate select.


setAggregate

void setAggregate(boolean agg)
Set to true for aggregate selects.


isLob

boolean isLob()
Return true if this select includes a LOB.


setLob

void setLob(boolean lob)
Set to true for selects that include LOB columns.


clearSelects

void clearSelects()
Clear the existing column selects.


selectPlaceholder

void selectPlaceholder(String sql)
Select the given SQL as a placeholder for a UNION element.


select

boolean select(SQLBuffer sql,
               Object id)
Select the given SQL; the given id object is an identifier to use when retrieving the corresponding value from a Result.

Returns:
true if selected

select

boolean select(SQLBuffer sql,
               Object id,
               Joins joins)
Select the given SQL; the given id object is an identifier to use when retrieving the corresponding value from a Result.

Returns:
true if selected

select

boolean select(String sql,
               Object id)
Select the given SQL; the given id object is an identifier to use when retrieving the corresponding value from a Result.

Returns:
true if selected

select

boolean select(String sql,
               Object id,
               Joins joins)
Select the given SQL; the given id object is an identifier to use when retrieving the corresponding value from a Result.

Returns:
true if selected

select

boolean select(Column col)
Select the given column.

Returns:
true if selected

select

boolean select(Column col,
               Joins joins)
Select the given column.

Returns:
true if selected

select

int select(Column[] cols)
Select the given columns.

Returns:
bit set of indexes of columns that were selected

select

int select(Column[] cols,
           Joins joins)
Select the given columns.

Returns:
bit set of indexes of columns that were selected

select

void select(ClassMapping mapping,
            int subclasses,
            JDBCStore store,
            JDBCFetchConfiguration fetch,
            int eager)
Select the columns of the given mapping, possibly including subclasses. This method should be called after all where conditions are added in case the given mapping batches other selects.


select

void select(ClassMapping mapping,
            int subclasses,
            JDBCStore store,
            JDBCFetchConfiguration fetch,
            int eager,
            Joins joins)
Select the columns of the given mapping, possibly including subclasses. This method should be called after all where conditions are added in case the given mapping batches other selects.


selectIdentifier

boolean selectIdentifier(Column col)
Select the given column as one that can be used to get a count of distinct matches. It is not necessary to designate distinct identifiers when eagerly traversing the entire result of the select or when not using an LRSSize setting of count.

Returns:
true if selected

selectIdentifier

boolean selectIdentifier(Column col,
                         Joins joins)
Select the given column as one that can be used to get a count of distinct matches. It is not necessary to designate distinct identifiers when eagerly traversing the entire result of the select or when not using an LRSSize setting of count.

Returns:
true if selected

selectIdentifier

int selectIdentifier(Column[] cols)
Select the given columns as ones that can be used to get a count of distinct matches. It is not necessary to designate distinct identifiers when eagerly traversing the entire result of the select or when not using an LRSSize setting of count.

Returns:
bit set of indexes of columns that were selected

selectIdentifier

int selectIdentifier(Column[] cols,
                     Joins joins)
Select the given columns as ones that can be used to get a count of distinct matches. It is not necessary to designate distinct identifiers when eagerly traversing the entire result of the select or when not using an LRSSize setting of count.

Returns:
bit set of indexes of columns that were selected

selectIdentifier

void selectIdentifier(ClassMapping mapping,
                      int subclasses,
                      JDBCStore store,
                      JDBCFetchConfiguration fetch,
                      int eager)
Select the columns of the given mapping, possibly including subclasses. This method should be called after all where conditions are added in case the given mapping batches other selects. The primary key columns of the mapping can be used to get a count of distinct matches. It is not necessary to designate distinct identifiers when eagerly traversing the entire result of the select or when not using an LRSSize setting of count.


selectIdentifier

void selectIdentifier(ClassMapping mapping,
                      int subclasses,
                      JDBCStore store,
                      JDBCFetchConfiguration fetch,
                      int eager,
                      Joins joins)
Select the columns of the given mapping, possibly including subclasses. This method should be called after all where conditions are added in case the given mapping batches other selects. The primary key columns of the mapping can be used to get a count of distinct matches. It is not necessary to designate distinct identifiers when eagerly traversing the entire result of the select or when not using an LRSSize setting of count.


selectPrimaryKey

int selectPrimaryKey(ClassMapping mapping)
Select the primary key columns of the given mapping, joining to superclasses as necessary to get all columns needed to construct an object id.

Returns:
bit set of indexes of pk columns that were selected

selectPrimaryKey

int selectPrimaryKey(ClassMapping mapping,
                     Joins joins)
Select the primary key columns of the given mapping, joining to superclasses as necessary to get all columns needed to construct an object id.

Returns:
bit set of indexes of pk columns that were selected

clearOrdering

void clearOrdering()
Clear odering conditions.


orderByPrimaryKey

int orderByPrimaryKey(ClassMapping mapping,
                      boolean asc,
                      boolean sel)
Order on the primary key columns of the given mapping, joining to superclasses as necessary to get all columns needed to construct an object id. Optionally selects ordering data if not already selected.


orderByPrimaryKey

int orderByPrimaryKey(ClassMapping mapping,
                      boolean asc,
                      Joins joins,
                      boolean sel)
Select and order on the primary key columns of the given mapping, joining to superclasses as necessary to get all columns needed to construct an object id. Optionally selects ordering data if not already selected.


orderBy

boolean orderBy(Column col,
                boolean asc,
                boolean sel)
Order by the given column. Optionally selects ordering data if not already selected.


orderBy

boolean orderBy(Column col,
                boolean asc,
                Joins joins,
                boolean sel)
Order by the given column. Optionally selects ordering data if not already selected.


orderBy

int orderBy(Column[] cols,
            boolean asc,
            boolean sel)
Order by the given columns. Optionally selects ordering data if not already selected.


orderBy

int orderBy(Column[] cols,
            boolean asc,
            Joins joins,
            boolean sel)
Order by the given columns. Optionally selects ordering data if not already selected.


orderBy

boolean orderBy(SQLBuffer sql,
                boolean asc,
                boolean sel)
Add an ORDER BY clause. Optionally selects ordering data if not already selected.


orderBy

boolean orderBy(SQLBuffer sql,
                boolean asc,
                Joins joins,
                boolean sel)
Add an ORDER BY clause. Optionally selects ordering data if not already selected.


orderBy

boolean orderBy(String sql,
                boolean asc,
                boolean sel)
Add an ORDER BY clause. Optionally selects ordering data if not already selected.


orderBy

boolean orderBy(String sql,
                boolean asc,
                Joins joins,
                boolean sel)
Add an ORDER BY clause. Optionally selects ordering data if not already selected.


wherePrimaryKey

void wherePrimaryKey(Object oid,
                     ClassMapping mapping,
                     JDBCStore store)
Add where conditions setting the mapping's primary key to the given oid values. If the given mapping does not use oid values for its primary key, we will recursively join to its superclass until we find an ancestor that does.


whereForeignKey

void whereForeignKey(ForeignKey fk,
                     Object oid,
                     ClassMapping mapping,
                     JDBCStore store)
Add where conditions setting the given foreign key to the given oid values.

See Also:
wherePrimaryKey(java.lang.Object, org.apache.openjpa.jdbc.meta.ClassMapping, org.apache.openjpa.jdbc.kernel.JDBCStore)

where

void where(Joins joins)
Add the given where conditions.


where

void where(SQLBuffer sql)
Add the given where conditions.


where

void where(SQLBuffer sql,
           Joins joins)
Add the given where conditions.


where

void where(String sql)
Add the given where conditions.


where

void where(String sql,
           Joins joins)
Add the given where conditions.


having

void having(SQLBuffer sql)
Add the given having conditions.


having

void having(SQLBuffer sql,
            Joins joins)
Add the given having conditions.


having

void having(String sql)
Add the given having conditions.


having

void having(String sql,
            Joins joins)
Add the given having conditions.


groupBy

void groupBy(Column col)
Group by the given column.


groupBy

void groupBy(Column col,
             Joins joins)
Group by the given column.


groupBy

void groupBy(Column[] cols)
Group by the given columns.


groupBy

void groupBy(Column[] cols,
             Joins joins)
Group by the given columns.


groupBy

void groupBy(SQLBuffer sql)
Add a GROUP BY clause.


groupBy

void groupBy(SQLBuffer sql,
             Joins joins)
Add a GROUP BY clause.


groupBy

void groupBy(String sql)
Add a GROUP BY clause.


groupBy

void groupBy(String sql,
             Joins joins)
Add a GROUP BY clause.


groupBy

void groupBy(ClassMapping mapping,
             int subclasses,
             JDBCStore store,
             JDBCFetchConfiguration fetch)
Group by the columns of the given mapping, possibly including subclasses. Assumes EAGER_NONE.


groupBy

void groupBy(ClassMapping mapping,
             int subclasses,
             JDBCStore store,
             JDBCFetchConfiguration fetch,
             Joins joins)
Group by the columns of the given mapping, possibly including subclasses. Assumes EAGER_NONE.


whereClone

SelectExecutor whereClone(int sels)
Return a SELECT with the same joins and where conditions as this one.

Parameters:
sels - number of selects to UNION together; ignored if <= 1

fullClone

SelectExecutor fullClone(int sels)
Return a SELECT that is a complete clone of this one.

Parameters:
sels - number of selects to UNION together; ignored if <= 1

eagerClone

SelectExecutor eagerClone(FieldMapping key,
                          int eagerType,
                          boolean toMany,
                          int sels)
Return a select that will be eagerly executed with this one, or null if the select cannot be created for the given key and join type. If the join type is inner or outer, then this select instance will be returned. Otherwise, the returned select will have a clone of this select's where conditions and joins but will be independent.

Parameters:
key - the key for the eager select
eagerType - one of the EAGER_* constants
toMany - whether the eager join is to-many
sels - number of selects to UNION together; ignored if <= 1

getEager

SelectExecutor getEager(FieldMapping key)
Return the eager select for the given key.


newJoins

Joins newJoins()
Return a new instance to use for joining.


newOuterJoins

Joins newOuterJoins()
Return a new instance to use for outer joining.


append

void append(SQLBuffer buf,
            Joins joins)
Append the given joins to the given buffer.


and

Joins and(Joins joins1,
          Joins joins2)
AND the given joins together. The given joins will be hollowed in the process.


or

Joins or(Joins joins1,
         Joins joins2)
OR the given joins together. The common joins will be removed in the process.


outer

Joins outer(Joins joins)
Return a join set making the given joins outer joins.


toString

String toString()
Implement toString to generate SQL string for profiling/debuggging.

Overrides:
toString in class Object


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