Author: mbo Date: Thu May 5 13:38:26 2005 New Revision: 168400 URL: http://svn.apache.org/viewcvs?rev=168400&view=rev Log: JDO-36 Implement JDOQLQueryFactory proposal. Code provided by Michael Watzek
Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/fostore/FOStorePM.java incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/JDOQLQueryFactoryImpl.java incubator/jdo/trunk/ri11/src/java/org/apache/jdo/jdoql/JDOQLQueryFactory.java Modified: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/fostore/Bundle.properties incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/fostore/FOStorePMF.java incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/pm/PersistenceManagerFactoryImpl.java incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/pm/PersistenceManagerImpl.java incubator/jdo/trunk/ri11/test/java/org/apache/jdo/test/query/NegativeTest.java incubator/jdo/trunk/ri11/test/java/org/apache/jdo/test/query/PositiveTest.java Modified: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/fostore/Bundle.properties URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/fostore/Bundle.properties?rev=168400&r1=168399&r2=168400&view=diff ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/fostore/Bundle.properties (original) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/fostore/Bundle.properties Thu May 5 13:38:26 2005 @@ -221,6 +221,7 @@ ERR_OIDNotProv=given OID is not provisional: {0}. #NOI18N ERR_DuplicateProvOID=duplicate provisional OID: {0}. +EXC_CannotCreateJDOQLQueryFactory=Cannot create JDOQLQueryFactory of class ''{0}''. # # FOStoreSchemaUID Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/fostore/FOStorePM.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/fostore/FOStorePM.java?rev=168400&view=auto ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/fostore/FOStorePM.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/fostore/FOStorePM.java Thu May 5 13:38:26 2005 @@ -0,0 +1,160 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jdo.impl.fostore; + +import java.util.Collection; + +import javax.jdo.Extent; +import javax.jdo.JDOUserException; +import javax.jdo.Query; + +import org.apache.jdo.jdoql.JDOQLQueryFactory; + +import org.apache.jdo.impl.pm.PersistenceManagerImpl; + +/** + * Subclass of [EMAIL PROTECTED] #PersistenceManagerImpl} implementing + * abstract methods <code>newQuery</code>. + * + * @author Michael Watzek + */ +public class FOStorePM extends PersistenceManagerImpl +{ + /** The JDOQLQueryFactory. */ + private JDOQLQueryFactory jdoqlQueryFactory; + + /** + * Constructs new instance of PersistenceManagerImpl for this + * PersistenceManagerFactoryInternal and particular combination of + * username and password. + * @param pmf calling PersistenceManagerFactory as + * PersistenceManagerFactoryInternal + * @param username user name used for accessing Connector or null if none + * is provided. + * @param password user password used for accessing Connector or null if + * none is provided. + */ + FOStorePM(FOStorePMF pmf, String username, String password) + { + super(pmf, username, password); + this.jdoqlQueryFactory = pmf.getJDOQLQueryFactory(); + } + + /** Create a new Query with no elements. + * @return a new Query instance with no elements. + */ + public Query newQuery() + { + assertIsOpen(); + return this.jdoqlQueryFactory.newQuery(this); + } + + /** Create a new Query using elements from another Query. The other Query + * must have been created by the same JDO implementation. It might be active + * in a different PersistenceManager or might have been serialized and + * restored. + * @return the new Query + * @param compiled another Query from the same JDO implementation + */ + public Query newQuery(Object compiled) + { + assertIsOpen(); + return this.jdoqlQueryFactory.newQuery(this, compiled); + } + + /** Create a new Query using the specified language. + * @param language the language of the query parameter + * @param query the query, which is of a form determined by the language + * @return the new Query + */ + public Query newQuery(String language, Object query) + { + assertIsOpen(); + if ("javax.jdo.query.JDOQL".equals(language)) //NOI18N + return this.jdoqlQueryFactory.newQuery(this, query); + throw new JDOUserException(msg.msg( + "EXC_UnsupportedQueryLanguage", language)); // NOI18N + } + + /** Create a new Query specifying the Class of the results. + * @param cls the Class of the results + * @return the new Query + */ + public Query newQuery(Class cls) + { + assertIsOpen(); + return this.jdoqlQueryFactory.newQuery(this, cls); + } + + /** Create a new Query with the candidate Extent; the class is taken + * from the Extent. + * @return the new Query + * @param cln the Extent of candidate instances */ + public Query newQuery(Extent cln) + { + assertIsOpen(); + return this.jdoqlQueryFactory.newQuery(this, cln); + } + + /** Create a new Query with the Class of the results and candidate + * Collection. + * @param cls the Class of results + * @param cln the Collection of candidate instances + * @return the new Query + */ + public Query newQuery(Class cls, Collection cln) + { + assertIsOpen(); + return this.jdoqlQueryFactory.newQuery(this, cls, cln); + } + + /** Create a new Query with the Class of the results and Filter. + * @param cls the Class of results + * @param filter the Filter for candidate instances + * @return the new Query + */ + public Query newQuery(Class cls, String filter) + { + assertIsOpen(); + return this.jdoqlQueryFactory.newQuery(this, cls, filter); + } + + /** Create a new Query with the Class of the results, candidate Collection, + * and Filter. + * @param cls the Class of results + * @param cln the Collection of candidate instances + * @param filter the Filter for candidate instances + * @return the new Query + */ + public Query newQuery(Class cls, Collection cln, String filter) + { + assertIsOpen(); + return this.jdoqlQueryFactory.newQuery(this, cls, cln, filter); + } + + /** Create a new Query with the candidate Extent and Filter. + * The class is taken from the Extent. + * @return the new Query + * @param cln the Extent of candidate instances + * @param filter the Filter for candidate instances */ + public Query newQuery(Extent cln, String filter) + { + assertIsOpen(); + return this.jdoqlQueryFactory.newQuery(this, cln, filter); + } + +} Modified: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/fostore/FOStorePMF.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/fostore/FOStorePMF.java?rev=168400&r1=168399&r2=168400&view=diff ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/fostore/FOStorePMF.java (original) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/fostore/FOStorePMF.java Thu May 5 13:38:26 2005 @@ -16,40 +16,30 @@ package org.apache.jdo.impl.fostore; -import java.io.ByteArrayOutputStream; -import java.io.PrintWriter; import java.io.Externalizable; -import java.io.IOException; -import java.io.ObjectOutputStream; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.Enumeration; import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; import java.util.Properties; -import java.util.Set; import java.util.WeakHashMap; -import java.security.AccessController; -import java.security.PrivilegedAction; - -import javax.naming.NamingException; -import javax.naming.Reference; -import javax.naming.Referenceable; -import javax.naming.StringRefAddr; import javax.jdo.JDOException; import javax.jdo.JDOFatalException; import javax.jdo.PersistenceManager; import javax.jdo.spi.PersistenceCapable; +import javax.naming.NamingException; +import javax.naming.Reference; +import javax.naming.Referenceable; +import javax.naming.StringRefAddr; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; - import org.apache.jdo.impl.model.java.runtime.RuntimeJavaModelFactory; import org.apache.jdo.impl.pm.PersistenceManagerFactoryImpl; -import org.apache.jdo.impl.pm.PersistenceManagerImpl; +import org.apache.jdo.jdoql.JDOQLQueryFactory; +import org.apache.jdo.jdoql.tree.QueryTree; import org.apache.jdo.model.jdo.JDOClass; -import org.apache.jdo.pm.PersistenceManagerFactoryInternal; -import org.apache.jdo.pm.PersistenceManagerInternal; import org.apache.jdo.store.StoreManager; import org.apache.jdo.store.TranscriberFactory; import org.apache.jdo.util.I18NHelper; @@ -102,6 +92,13 @@ */ private Properties configuredFrom = null; + /** The name of the JDOQLQueryFactory class */ + private String jdoqlQueryFactoryClassName = + "org.apache.jdo.impl.jdoql.JDOQLQueryFactoryImpl"; + + /** The query factory for JDOQL. */ + private JDOQLQueryFactory jdoqlQueryFactory; + /** RuntimeJavaModelFactory. */ private static final RuntimeJavaModelFactory javaModelFactory = (RuntimeJavaModelFactory) AccessController.doPrivileged( @@ -202,6 +199,45 @@ } } + /** Sets the JDOQLQueryFactory class name used by getJDOQLQueryFactory. + * @param jdoqlQueryFactoryClassName the name of the JDOQLQueryFactory + * class. + */ + public void setJDOQLQueryFactoryClassName(String jdoqlQueryFactoryClassName) + { + this.jdoqlQueryFactoryClassName = jdoqlQueryFactoryClassName; + } + + /** + * Returns the JDOQLQueryFactory bound to this FOStorePMF. + * @return JDOQLQueryFactory + */ + public synchronized JDOQLQueryFactory getJDOQLQueryFactory() { + if (this.jdoqlQueryFactory == null) { + try { + Class clazz = Class.forName(jdoqlQueryFactoryClassName); + this.jdoqlQueryFactory = (JDOQLQueryFactory) clazz.newInstance(); + } catch (Exception ex) { + throw new JDOFatalException( + msg.msg("EXC_CannotCreateJDOQLQueryFactory", //NOI18N + jdoqlQueryFactoryClassName), ex); + } + } + return this.jdoqlQueryFactory; + } + + /** Returns a new QueryTree instance. This instance allows to specify a + * query with an API (see [EMAIL PROTECTED] org.apache.jdo.jdoql.tree.QueryTree} and + * [EMAIL PROTECTED] org.apache.jdo.jdoql.tree.ExpressionFactory}) rather than as JDOQL + * strings. To run you create a query object from the QueryTree (see + * [EMAIL PROTECTED] javax.jdo.PersistenceManager#newQuery(Object compiled)}) + * and call the execute method on the Query object. + * @return new QueryTree instance. + */ + public QueryTree newQueryTree() { + return getJDOQLQueryFactory().newTree(); + } + /** Return the FOStore-specific accessors (the * properties that are not in the JDO specification). * @return the hash map of FOStore accessors @@ -332,7 +368,7 @@ PersistenceManager rc = null; try { - rc = new PersistenceManagerImpl(this, userid, password); + rc = new FOStorePM(this, userid, password); setConfigured(); } catch (JDOException ex) { throw ex; Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/JDOQLQueryFactoryImpl.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/JDOQLQueryFactoryImpl.java?rev=168400&view=auto ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/JDOQLQueryFactoryImpl.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/jdoql/JDOQLQueryFactoryImpl.java Thu May 5 13:38:26 2005 @@ -0,0 +1,116 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jdo.impl.jdoql; + +import java.util.Collection; + +import javax.jdo.Extent; +import javax.jdo.Query; + +import org.apache.jdo.impl.jdoql.tree.Tree; +import org.apache.jdo.jdoql.JDOQLQueryFactory; +import org.apache.jdo.jdoql.tree.QueryTree; +import org.apache.jdo.pm.PersistenceManagerInternal; + +/** + * Implements the @link{QueryFactory} interface + * in order to implement a component which is capable + * to run together with JDO runtime. + * + * @author Michael Watzek + */ +public class JDOQLQueryFactoryImpl implements JDOQLQueryFactory +{ + + /** + * Returns a new QueryTree instance. This instance allows to specify a + * query with an API (see [EMAIL PROTECTED] org.apache.jdo.jdoql.tree.QueryTree} and + * [EMAIL PROTECTED] org.apache.jdo.jdoql.tree.ExpressionFactory}) rather than as + * JDOQL strings. To run you create a query object from the QueryTree (see + * [EMAIL PROTECTED] javax.jdo.PersistenceManager#newQuery(Object compiled)}) + * and call the execute method on the Query object. + * @return new QueryTree instance. + */ + public QueryTree newTree() + { + return new Tree(); + } + + /* + * @see org.apache.jdo.jdoql.QueryFactory#newQuery(org.apache.jdo.pm.PersistenceManagerInternal) + */ + public Query newQuery(PersistenceManagerInternal pm) + { + return new QueryImpl(pm); + } + + /* + * @see org.apache.jdo.jdoql.QueryFactory#newQuery(org.apache.jdo.pm.PersistenceManagerInternal, java.lang.Object) + */ + public Query newQuery(PersistenceManagerInternal pm, Object compiled) + { + return new QueryImpl(pm, compiled); + } + + /* + * @see org.apache.jdo.jdoql.QueryFactory#newQuery(org.apache.jdo.pm.PersistenceManagerInternal, java.lang.Class) + */ + public Query newQuery(PersistenceManagerInternal pm, Class cls) + { + return new QueryImpl(pm, cls); + } + + /* + * @see org.apache.jdo.jdoql.QueryFactory#newQuery(org.apache.jdo.pm.PersistenceManagerInternal, javax.jdo.Extent) + */ + public Query newQuery(PersistenceManagerInternal pm, Extent cln) + { + return new QueryImpl(pm, cln); + } + + /* + * @see org.apache.jdo.jdoql.QueryFactory#newQuery(org.apache.jdo.pm.PersistenceManagerInternal, java.lang.Class, java.util.Collection) + */ + public Query newQuery(PersistenceManagerInternal pm, Class cls, Collection cln) + { + return new QueryImpl(pm, cls, cln); + } + + /* + * @see org.apache.jdo.jdoql.QueryFactory#newQuery(org.apache.jdo.pm.PersistenceManagerInternal, java.lang.Class, java.lang.String) + */ + public Query newQuery(PersistenceManagerInternal pm, Class cls, String filter) + { + return new QueryImpl(pm, cls, filter); + } + + /* + * @see org.apache.jdo.jdoql.QueryFactory#newQuery(org.apache.jdo.pm.PersistenceManagerInternal, java.lang.Class, java.util.Collection, java.lang.String) + */ + public Query newQuery(PersistenceManagerInternal pm, Class cls, Collection cln, String filter) + { + return new QueryImpl(pm, cls, cln, filter); + } + + /* + * @see org.apache.jdo.jdoql.QueryFactory#newQuery(org.apache.jdo.pm.PersistenceManagerInternal, javax.jdo.Extent, java.lang.String) + */ + public Query newQuery(PersistenceManagerInternal pm, Extent cln, String filter) + { + return new QueryImpl(pm, cln, filter); + } +} Modified: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/pm/PersistenceManagerFactoryImpl.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/pm/PersistenceManagerFactoryImpl.java?rev=168400&r1=168399&r2=168400&view=diff ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/pm/PersistenceManagerFactoryImpl.java (original) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/pm/PersistenceManagerFactoryImpl.java Thu May 5 13:38:26 2005 @@ -22,21 +22,34 @@ package org.apache.jdo.impl.pm; -import java.util.*; +import java.io.IOException; import java.security.AccessController; import java.security.PrivilegedAction; - -import javax.jdo.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.Set; + +import javax.jdo.JDOException; +import javax.jdo.JDOFatalInternalException; +import javax.jdo.JDOFatalUserException; +import javax.jdo.JDOUserException; +import javax.jdo.PersistenceManager; +import javax.jdo.Transaction; import javax.jdo.spi.JDOPermission; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; - import org.apache.jdo.ejb.EJBImplHelper; -import org.apache.jdo.impl.jdoql.tree.Tree; import org.apache.jdo.impl.model.java.runtime.RuntimeJavaModelFactory; -import org.apache.jdo.jdoql.tree.QueryTree; -import org.apache.jdo.model.jdo.JDOClass; import org.apache.jdo.pm.Accessor; import org.apache.jdo.pm.PersistenceManagerFactoryInternal; import org.apache.jdo.util.I18NHelper; @@ -1523,19 +1536,6 @@ return; } - /** Returns a new QueryTree instance. This instance allows to specify a - * query with an API (see [EMAIL PROTECTED] org.apache.jdo.jdoql.tree.QueryTree} and - * [EMAIL PROTECTED] org.apache.jdo.jdoql.tree.ExpressionFactory}) rather than as JDOQL - * strings. To run you create a query object from the QueryTree (see - * [EMAIL PROTECTED] javax.jdo.PersistenceManager#newQuery(Object compiled)}) - * and call the execute method on the Query object. - * @return new QueryTree instance. - */ - public QueryTree newQueryTree() - { - return new Tree(); - } - public synchronized boolean equals(Object o) { if (o == this) return true; Modified: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/pm/PersistenceManagerImpl.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/pm/PersistenceManagerImpl.java?rev=168400&r1=168399&r2=168400&view=diff ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/pm/PersistenceManagerImpl.java (original) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/impl/pm/PersistenceManagerImpl.java Thu May 5 13:38:26 2005 @@ -22,20 +22,28 @@ package org.apache.jdo.impl.pm; -import java.util.*; +import java.lang.reflect.Constructor; import java.security.AccessController; import java.security.PrivilegedAction; - -import java.lang.reflect.Constructor; +import java.util.Collection; +import java.util.Comparator; +import java.util.Iterator; +import java.util.Map; +import java.util.Properties; + +import javax.jdo.Extent; +import javax.jdo.JDOFatalInternalException; +import javax.jdo.JDOFatalUserException; +import javax.jdo.JDOUserException; +import javax.jdo.PersistenceManager; +import javax.jdo.PersistenceManagerFactory; +import javax.jdo.Query; +import javax.jdo.Transaction; +import javax.jdo.spi.PersistenceCapable; import javax.transaction.Status; -import javax.jdo.*; -import javax.jdo.spi.*; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; - -import org.apache.jdo.impl.jdoql.QueryImpl; import org.apache.jdo.impl.model.java.runtime.RuntimeJavaModelFactory; import org.apache.jdo.model.java.JavaModel; import org.apache.jdo.model.java.JavaType; @@ -56,8 +64,7 @@ * * @author Marina Vatkina */ -public class PersistenceManagerImpl implements PersistenceManagerInternal { - private final boolean DEBUG = true; +public abstract class PersistenceManagerImpl implements PersistenceManagerInternal { /** * True if this PersistenceManager is closed @@ -206,7 +213,7 @@ /** * I18N message handler */ - private final static I18NHelper msg = + protected final static I18NHelper msg = I18NHelper.getInstance(PersistenceManagerImpl.class); /** @@ -534,101 +541,68 @@ // /** Create a new Query with no elements. - * @return a new Query instance with no elements. - */ - public Query newQuery() { - assertIsOpen(); - return new QueryImpl(this); - } - - /** Create a new Query using elements from another Query. The other Query - * must have been created by the same JDO implementation. It might be active - * in a different PersistenceManager or might have been serialized and - * restored. - * @return the new Query - * @param compiled another Query from the same JDO implementation - */ - public Query newQuery (Object compiled) { - assertIsOpen(); - return new QueryImpl(this, compiled); - } - - /** Create a new Query using the specified language. - * @param language the language of the query parameter - * @param query the query, which is of a form determined by the language + * @return a new Query instance with no elements. + */ + public abstract Query newQuery(); + + /** Create a new Query using elements from another Query. The other Query + * must have been created by the same JDO implementation. It might be active + * in a different PersistenceManager or might have been serialized and + * restored. * @return the new Query - */ - public Query newQuery (String language, Object query) { - assertIsOpen(); - if ("javax.jdo.query.JDOQL".equals(language)) //NOI18N - return new QueryImpl(this, query); - throw new JDOUserException(msg.msg( - "EXC_UnsupportedQueryLanguage", language)); // NOI18N - } - - /** Create a new Query specifying the Class of the results. - * @param cls the Class of the results - * @return the new Query - */ - public Query newQuery (Class cls) { - assertIsOpen(); - return new QueryImpl(this, cls); - } - - /** Create a new Query with the candidate Extent; the class is taken - * from the Extent. - * specified. + * @param compiled another Query from the same JDO implementation + */ + public abstract Query newQuery (Object compiled); + + /** Create a new Query using the specified language. + * @param language the language of the query parameter + * @param query the query, which is of a form determined by the language + * @return the new Query + */ + public abstract Query newQuery (String language, Object query); + + /** Create a new Query specifying the Class of the results. + * @param cls the Class of the results * @return the new Query - * @param cln the Extent of candidate instances */ - public Query newQuery(Extent cln) { - assertIsOpen(); - return new QueryImpl(this, cln); - } - - /** Create a new Query with the Class of the results and candidate Collection. - * specified. - * @param cls the Class of results - * @param cln the Collection of candidate instances - * @return the new Query - */ - public Query newQuery (Class cls, Collection cln) { - assertIsOpen(); - return new QueryImpl(this, cls, cln); - } + */ + public abstract Query newQuery (Class cls); - /** Create a new Query with the Class of the results and Filter. - * specified. - * @param cls the Class of results - * @param filter the Filter for candidate instances - * @return the new Query - */ - public Query newQuery (Class cls, String filter) { - assertIsOpen(); - return new QueryImpl(this, cls, filter); - } + /** Create a new Query with the candidate Extent; the class is taken + * from the Extent. + * @return the new Query + * @param cln the Extent of candidate instances */ + public abstract Query newQuery(Extent cln); + + /** Create a new Query with the Class of the results and candidate Collection. + * @param cls the Class of results + * @param cln the Collection of candidate instances + * @return the new Query + */ + public abstract Query newQuery (Class cls, Collection cln); - /** Create a new Query with the Class of the results, candidate Collection, - * and Filter. - * @param cls the Class of results - * @param cln the Collection of candidate instances - * @param filter the Filter for candidate instances - * @return the new Query - */ - public Query newQuery (Class cls, Collection cln, String filter) { - assertIsOpen(); - return new QueryImpl(this, cls, cln, filter); - } + /** Create a new Query with the Class of the results and Filter. + * @param cls the Class of results + * @param filter the Filter for candidate instances + * @return the new Query + */ + public abstract Query newQuery (Class cls, String filter); - /** Create a new Query with the candidate Extent and Filter. - * The class is taken from the Extent. + /** Create a new Query with the Class of the results, candidate Collection, + * and Filter. + * @param cls the Class of results + * @param cln the Collection of candidate instances + * @param filter the Filter for candidate instances * @return the new Query - * @param cln the Extent of candidate instances - * @param filter the Filter for candidate instances */ - public Query newQuery(Extent cln, String filter) { - assertIsOpen(); - return new QueryImpl(this, cln, filter); - } + */ + public abstract Query newQuery (Class cls, Collection cln, String filter); + /** Create a new Query with the candidate Extent and Filter. + * The class is taken from the Extent. + * @return the new Query + * @param cln the Extent of candidate instances + * @param filter the Filter for candidate instances */ + public abstract Query newQuery(Extent cln, String filter); + /** The PersistenceManager may manage a collection of instances in the data * store based on the class of the instances. This method returns an * Extent of instances in the data store that might be iterated or Added: incubator/jdo/trunk/ri11/src/java/org/apache/jdo/jdoql/JDOQLQueryFactory.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/src/java/org/apache/jdo/jdoql/JDOQLQueryFactory.java?rev=168400&view=auto ============================================================================== --- incubator/jdo/trunk/ri11/src/java/org/apache/jdo/jdoql/JDOQLQueryFactory.java (added) +++ incubator/jdo/trunk/ri11/src/java/org/apache/jdo/jdoql/JDOQLQueryFactory.java Thu May 5 13:38:26 2005 @@ -0,0 +1,151 @@ +/* + * Copyright 2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.jdo.jdoql; + +import java.util.Collection; + +import javax.jdo.Extent; +import javax.jdo.Query; + +import org.apache.jdo.pm.PersistenceManagerInternal; +import org.apache.jdo.jdoql.tree.QueryTree; + +/** + * This interface allows for choosing between different + * JDO query implementations. + * Query implementations implementing this interface + * are capable to run together with other components. + * The interface declares methods creating JDO query instances + * and JDO query tree instances. + * All methods creating query instances take persistence manager + * instances as parameters. + * + * @author Michael Watzek + */ +public interface JDOQLQueryFactory +{ + /** + * Returns a new QueryTree instance. This instance allows to specify a + * query with an API (see [EMAIL PROTECTED] org.apache.jdo.jdoql.tree.QueryTree} and + * [EMAIL PROTECTED] org.apache.jdo.jdoql.tree.ExpressionFactory}) rather than as + * JDOQL strings. To run you create a query object from the QueryTree (see + * [EMAIL PROTECTED] javax.jdo.PersistenceManager#newQuery(Object compiled)}) + * and call the execute method on the Query object. + * @return new QueryTree instance. + */ + QueryTree newTree(); + + /** + * Creates a new <code>Query</code> with no elements. + * @param pm the persistence manager for the new query. + * It is the responsibility of the caller to check that the persistence + * manager is valid. + * @return the new <code>Query</code>. + */ + Query newQuery(PersistenceManagerInternal pm); + + /** + * Creates a new <code>Query</code> using elements from another + * <code>Query</code>. The other <code>Query</code> must have been created + * by the same JDO implementation. It might be active in a different + * <code>PersistenceManager</code> or might have been serialized and + * restored. + * <P>All of the settings of the other <code>Query</code> are copied to + * this <code>Query</code>, except for the candidate + * <code>Collection</code> or <code>Extent</code>. + * @return the new <code>Query</code>. + * @param pm the persistence manager for the new query. + * It is the responsibility of the caller to check that the persistence + * manager is valid. + * @param compiled another <code>Query</code> from the same JDO + * implementation. + */ + Query newQuery(PersistenceManagerInternal pm, Object compiled); + + /** + * Creates a new <code>Query</code> specifying the <code>Class</code> of + * the candidate instances. + * @param pm the persistence manager for the new query. + * It is the responsibility of the caller to check that the persistence + * manager is valid. + * @param cls the <code>Class</code> of the candidate instances. + * @return the new <code>Query</code>. + */ + Query newQuery(PersistenceManagerInternal pm, Class cls); + + /** + * Creates a new <code>Query</code> with the <code>Class</code> of the + * candidate instances and candidate <code>Extent</code>. + * @param pm the persistence manager for the new query. + * It is the responsibility of the caller to check that the persistence + * manager is valid. + * @param cln the <code>Extent</code> of candidate instances. + * @return the new <code>Query</code>. + */ + Query newQuery(PersistenceManagerInternal pm, Extent cln); + + /** + * Creates a new <code>Query</code> with the candidate <code>Class</code> + * and <code>Collection</code>. + * @param pm the persistence manager for the new query. + * It is the responsibility of the caller to check that the persistence + * manager is valid. + * @param cls the <code>Class</code> of results. + * @param cln the <code>Collection</code> of candidate instances. + * @return the new <code>Query</code>. + */ + Query newQuery(PersistenceManagerInternal pm, Class cls, Collection cln); + + /** + * Creates a new <code>Query</code> with the <code>Class</code> of the + * candidate instances and filter. + * @param pm the persistence manager for the new query. + * It is the responsibility of the caller to check that the persistence + * manager is valid. + * @param cls the <code>Class</code> of results. + * @param filter the filter for candidate instances. + * @return the new <code>Query</code>. + */ + Query newQuery(PersistenceManagerInternal pm, Class cls, String filter); + + /** + * Creates a new <code>Query</code> with the <code>Class</code> of the + * candidate instances, candidate <code>Collection</code>, and filter. + * @param pm the persistence manager for the new query. + * It is the responsibility of the caller to check that the persistence + * manager is valid. + * @param cls the <code>Class</code> of candidate instances. + * @param cln the <code>Collection</code> of candidate instances. + * @param filter the filter for candidate instances. + * @return the new <code>Query</code>. + */ + Query newQuery(PersistenceManagerInternal pm, Class cls, Collection cln, + String filter); + + /** + * Creates a new <code>Query</code> with the + * candidate <code>Extent</code> and filter; the class + * is taken from the <code>Extent</code>. + * @param pm the persistence manager for the new query. + * It is the responsibility of the caller to check that the persistence + * manager is valid. + * @param cln the <code>Extent</code> of candidate instances. + * @param filter the filter for candidate instances. + * @return the new <code>Query</code>. + */ + Query newQuery(PersistenceManagerInternal pm, Extent cln, String filter); +} Modified: incubator/jdo/trunk/ri11/test/java/org/apache/jdo/test/query/NegativeTest.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/test/java/org/apache/jdo/test/query/NegativeTest.java?rev=168400&r1=168399&r2=168400&view=diff ============================================================================== --- incubator/jdo/trunk/ri11/test/java/org/apache/jdo/test/query/NegativeTest.java (original) +++ incubator/jdo/trunk/ri11/test/java/org/apache/jdo/test/query/NegativeTest.java Thu May 5 13:38:26 2005 @@ -22,18 +22,19 @@ package org.apache.jdo.test.query; -import java.util.Collection; -import java.util.ArrayList; -import java.util.Vector; -import java.util.Iterator; import java.io.PrintStream; -import java.lang.reflect.Method; import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Iterator; +import java.util.Vector; -import javax.jdo.*; +import javax.jdo.JDOException; +import javax.jdo.PersistenceManager; +import javax.jdo.PersistenceManagerFactory; +import javax.jdo.Transaction; +import org.apache.jdo.impl.fostore.FOStorePMF; import org.apache.jdo.impl.jdoql.tree.Tree; -import org.apache.jdo.impl.pm.PersistenceManagerFactoryImpl; import org.apache.jdo.jdoql.tree.QueryTree; import org.apache.jdo.util.I18NHelper; @@ -72,8 +73,8 @@ */ protected QueryTree newQueryTree() { - if (pmf instanceof PersistenceManagerFactoryImpl) - return ((PersistenceManagerFactoryImpl)pmf).newQueryTree(); + if (pmf instanceof FOStorePMF) + return ((FOStorePMF)pmf).newQueryTree(); else return new Tree(); } Modified: incubator/jdo/trunk/ri11/test/java/org/apache/jdo/test/query/PositiveTest.java URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/ri11/test/java/org/apache/jdo/test/query/PositiveTest.java?rev=168400&r1=168399&r2=168400&view=diff ============================================================================== --- incubator/jdo/trunk/ri11/test/java/org/apache/jdo/test/query/PositiveTest.java (original) +++ incubator/jdo/trunk/ri11/test/java/org/apache/jdo/test/query/PositiveTest.java Thu May 5 13:38:26 2005 @@ -22,16 +22,25 @@ package org.apache.jdo.test.query; -import java.util.*; import java.io.PrintStream; -import java.lang.reflect.Method; import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Vector; + +import javax.jdo.Extent; +import javax.jdo.PersistenceManager; +import javax.jdo.PersistenceManagerFactory; +import javax.jdo.Query; +import javax.jdo.Transaction; -import javax.jdo.*; - +import org.apache.jdo.impl.fostore.FOStorePMF; import org.apache.jdo.impl.jdoql.tree.Tree; -import org.apache.jdo.impl.pm.PersistenceManagerFactoryImpl; import org.apache.jdo.jdoql.tree.QueryTree; + import org.apache.jdo.pc.xempdept.Company; import org.apache.jdo.pc.xempdept.Department; import org.apache.jdo.pc.xempdept.Employee; @@ -326,8 +335,8 @@ */ protected QueryTree newQueryTree() { - if (pmf instanceof PersistenceManagerFactoryImpl) - return ((PersistenceManagerFactoryImpl)pmf).newQueryTree(); + if (pmf instanceof FOStorePMF) + return ((FOStorePMF)pmf).newQueryTree(); else return new Tree(); }