You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2009/12/11 21:32:17 UTC
svn commit: r889800 - in /openjpa/trunk:
openjpa-kernel/src/main/java/org/apache/openjpa/datacache/
openjpa-kernel/src/main/java/org/apache/openjpa/kernel/
openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/
openjpa-kernel/src/main/java/org/ap...
Author: ppoddar
Date: Fri Dec 11 20:32:16 2009
New Revision: 889800
URL: http://svn.apache.org/viewvc?rev=889800&view=rev
Log:
OPENJPA-1050: Use generic types whenever possible. Replace ordered map with native implementation wrapper.
Added:
openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/OrderedMap.java (with props)
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/QueryCacheStoreQuery.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractStoreQuery.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingQuery.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ExpressionStoreQuery.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/MethodStoreQuery.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/Query.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryContext.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/QueryExpressions.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaQueryImpl.java
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/QueryCacheStoreQuery.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/QueryCacheStoreQuery.java?rev=889800&r1=889799&r2=889800&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/QueryCacheStoreQuery.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/QueryCacheStoreQuery.java Fri Dec 11 20:32:16 2009
@@ -45,6 +45,7 @@
import org.apache.openjpa.kernel.exps.QueryExpressions;
import org.apache.openjpa.lib.rop.ListResultObjectProvider;
import org.apache.openjpa.lib.rop.ResultObjectProvider;
+import org.apache.openjpa.lib.util.OrderedMap;
import org.apache.openjpa.meta.ClassMetaData;
import org.apache.openjpa.meta.JavaTypes;
import org.apache.openjpa.meta.MetaDataRepository;
@@ -467,7 +468,7 @@
return _ex.hasGrouping(unwrap(q));
}
- public LinkedMap getParameterTypes(StoreQuery q) {
+ public OrderedMap<Object, Class<?>> getParameterTypes(StoreQuery q) {
return _ex.getParameterTypes(unwrap(q));
}
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractStoreQuery.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractStoreQuery.java?rev=889800&r1=889799&r2=889800&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractStoreQuery.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractStoreQuery.java Fri Dec 11 20:32:16 2009
@@ -24,6 +24,7 @@
import org.apache.openjpa.kernel.exps.AggregateListener;
import org.apache.openjpa.kernel.exps.FilterListener;
import org.apache.openjpa.kernel.exps.QueryExpressions;
+import org.apache.openjpa.lib.util.OrderedMap;
import org.apache.openjpa.meta.ClassMetaData;
import org.apache.openjpa.util.InternalException;
import org.apache.openjpa.util.UnsupportedException;
@@ -185,7 +186,7 @@
return false;
}
- public LinkedMap getParameterTypes(StoreQuery q) {
+ public OrderedMap<Object,Class<?>> getParameterTypes(StoreQuery q) {
return EMPTY_PARAMS;
}
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingQuery.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingQuery.java?rev=889800&r1=889799&r2=889800&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingQuery.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingQuery.java Fri Dec 11 20:32:16 2009
@@ -21,9 +21,9 @@
import java.util.Collection;
import java.util.Map;
-import org.apache.commons.collections.map.LinkedMap;
import org.apache.openjpa.kernel.exps.AggregateListener;
import org.apache.openjpa.kernel.exps.FilterListener;
+import org.apache.openjpa.lib.util.OrderedMap;
import org.apache.openjpa.meta.ClassMetaData;
import org.apache.openjpa.util.RuntimeExceptionTranslator;
@@ -382,7 +382,7 @@
}
}
- public LinkedMap getParameterTypes() {
+ public OrderedMap<Object,Class<?>> getParameterTypes() {
try {
return _query.getParameterTypes();
} catch (RuntimeException re) {
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ExpressionStoreQuery.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ExpressionStoreQuery.java?rev=889800&r1=889799&r2=889800&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ExpressionStoreQuery.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ExpressionStoreQuery.java Fri Dec 11 20:32:16 2009
@@ -47,6 +47,7 @@
import org.apache.openjpa.lib.rop.RangeResultObjectProvider;
import org.apache.openjpa.lib.rop.ResultObjectProvider;
import org.apache.openjpa.lib.util.Localizer;
+import org.apache.openjpa.lib.util.OrderedMap;
import org.apache.openjpa.meta.ClassMetaData;
import org.apache.openjpa.meta.FieldMetaData;
import org.apache.openjpa.meta.JavaTypes;
@@ -305,7 +306,7 @@
if (val.isVariable())
return;
- Class type;
+ Class<?> type;
if (val instanceof Path) {
FieldMetaData fmd = ((Path) val).last();
type = (fmd == null) ? val.getType() : fmd.getDeclaredType();
@@ -350,7 +351,7 @@
q.getContext().getQueryString()));
}
- public final Class getResultClass(StoreQuery q) {
+ public final Class<?> getResultClass(StoreQuery q) {
return assertQueryExpression().resultClass;
}
@@ -370,7 +371,7 @@
return assertQueryExpression().projectionAliases;
}
- public Class[] getProjectionTypes(StoreQuery q) {
+ public Class<?>[] getProjectionTypes(StoreQuery q) {
return null;
}
@@ -386,18 +387,18 @@
return assertQueryExpression().grouping.length > 0;
}
- public final LinkedMap getParameterTypes(StoreQuery q) {
+ public final OrderedMap<Object,Class<?>> getParameterTypes(StoreQuery q) {
return assertQueryExpression().parameterTypes;
}
/**
* Creates a Object[] from the values of the given user parameters.
*/
- public Object[] toParameterArray(StoreQuery q, Map userParams) {
+ public Object[] toParameterArray(StoreQuery q, Map<?,?> userParams) {
if (userParams == null || userParams.isEmpty())
return StoreQuery.EMPTY_OBJECTS;
- LinkedMap paramTypes = getParameterTypes(q);
+ OrderedMap<?,Class<?>> paramTypes = getParameterTypes(q);
Object[] arr = new Object[userParams.size()];
int base = positionalParameterBase(userParams.keySet());
for (Object key : paramTypes.keySet()) {
@@ -463,7 +464,7 @@
if (exps.length == 1)
return exps[0].accessPath;
- List metas = null;
+ List<ClassMetaData> metas = null;
for (int i = 0; i < exps.length; i++)
metas = Filters.addAccessPathMetaDatas(metas,
exps[i].accessPath);
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/MethodStoreQuery.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/MethodStoreQuery.java?rev=889800&r1=889799&r2=889800&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/MethodStoreQuery.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/MethodStoreQuery.java Fri Dec 11 20:32:16 2009
@@ -35,6 +35,7 @@
import org.apache.openjpa.lib.rop.RangeResultObjectProvider;
import org.apache.openjpa.lib.rop.ResultObjectProvider;
import org.apache.openjpa.lib.util.Localizer;
+import org.apache.openjpa.lib.util.OrderedMap;
import org.apache.openjpa.meta.ClassMetaData;
import org.apache.openjpa.util.Exceptions;
import org.apache.openjpa.util.ImplHelper;
@@ -65,7 +66,7 @@
private static final Localizer _loc = Localizer.forPackage
(MethodStoreQuery.class);
- private LinkedMap _params = null;
+ private OrderedMap<Object, Class<?>> _params = null;
public void invalidateCompilation() {
if (_params != null)
@@ -95,7 +96,7 @@
/**
* Parse the parameter declarations.
*/
- private LinkedMap bindParameterTypes() {
+ private OrderedMap<Object, Class<?>> bindParameterTypes() {
ctx.lock();
try {
if (_params != null)
@@ -106,7 +107,7 @@
List decs = Filters.parseDeclaration(params, ',', "parameters");
if (_params == null)
- _params = new LinkedMap((int) (decs.size() / 2 * 1.33 + 1));
+ _params = new OrderedMap<Object, Class<?>>();
String name;
Class cls;
for (int i = 0; i < decs.size(); i += 2) {
@@ -259,7 +260,7 @@
_meth = meth;
}
- public LinkedMap getParameterTypes(StoreQuery q) {
+ public OrderedMap<Object, Class<?>> getParameterTypes(StoreQuery q) {
return ((MethodStoreQuery) q).bindParameterTypes();
}
@@ -267,7 +268,7 @@
if (userParams == null || userParams.isEmpty())
return StoreQuery.EMPTY_OBJECTS;
- LinkedMap paramTypes = getParameterTypes(q);
+ OrderedMap<Object, Class<?>> paramTypes = getParameterTypes(q);
Object[] arr = new Object[userParams.size()];
int base = positionalParameterBase(userParams.keySet());
for (Object key : paramTypes.keySet()) {
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/Query.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/Query.java?rev=889800&r1=889799&r2=889800&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/Query.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/Query.java Fri Dec 11 20:32:16 2009
@@ -84,7 +84,7 @@
/**
* Set a collection of candidates.
*/
- public void setCandidateCollection(Collection coll);
+ public void setCandidateCollection(Collection<?> coll);
/**
* Compile the query.
@@ -99,7 +99,7 @@
/**
* Execute with parameter map.
*/
- public Object execute(Map params);
+ public Object execute(Map<?,?> params);
/**
* Execute with parameter array.
@@ -116,7 +116,7 @@
/**
* Deletes all of the instances that are satisfied by the query.
*
- * @param parameters the poitional parameters for the query
+ * @param parameters the positional parameters for the query
* @return the number of instances that were deleted
*/
public long deleteAll(Object[] parameters);
@@ -127,7 +127,7 @@
* @param parameterMap the named parameter map
* @return the number of instances that were deleted
*/
- public long deleteAll(Map parameterMap);
+ public long deleteAll(Map<?,?> parameterMap);
/**
* Performs an update of the instances that are satisfied by the query.
@@ -150,7 +150,7 @@
* @param parameterMap the named parameter map
* @return the number of instances that were update
*/
- public long updateAll(Map parameterMap);
+ public long updateAll(Map<?,?> parameterMap);
/**
* Close all open query results.
@@ -172,7 +172,7 @@
* @param params the named parameter map for the query invocation
* @since 0.3.2
*/
- public String[] getDataStoreActions(Map params);
+ public String[] getDataStoreActions(Map<?,?> params);
/**
* Assert that the query's broker is still open.
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryContext.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryContext.java?rev=889800&r1=889799&r2=889800&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryContext.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryContext.java Fri Dec 11 20:32:16 2009
@@ -21,10 +21,11 @@
import java.util.Collection;
import java.util.Map;
-import org.apache.commons.collections.map.LinkedMap;
import org.apache.openjpa.kernel.exps.AggregateListener;
import org.apache.openjpa.kernel.exps.Constant;
import org.apache.openjpa.kernel.exps.FilterListener;
+import org.apache.openjpa.kernel.exps.Value;
+import org.apache.openjpa.lib.util.OrderedMap;
import org.apache.openjpa.meta.ClassMetaData;
import org.apache.openjpa.meta.FieldMetaData;
@@ -75,13 +76,13 @@
* Return the candidate collection, or <code>null</code> if an
* extent was specified instead of a collection.
*/
- public Collection getCandidateCollection();
+ public Collection<?> getCandidateCollection();
/**
* Return the class of the objects that this query will return,
* or <code>null</code> if this information is not available / not relevant.
*/
- public Class getCandidateType();
+ public Class<?> getCandidateType();
/**
* Whether query results will include subclasses of the candidate class.
@@ -91,7 +92,7 @@
/**
* Set the candidate type.
*/
- public void setCandidateType(Class cls, boolean subs);
+ public void setCandidateType(Class<?> cls, boolean subs);
/**
* Whether the query has been marked read-only.
@@ -120,7 +121,7 @@
/**
* Scope of a mapping from the result data to its object representation.
*/
- public Class getResultMappingScope();
+ public Class<?> getResultMappingScope();
/**
* Name of a mapping from the result data to its object representation.
@@ -131,20 +132,20 @@
* Name and scope of a mapping from the result data to its object
* representation.
*/
- public void setResultMapping(Class scope, String name);
+ public void setResultMapping(Class<?> scope, String name);
/**
* Returns the result class that has been set through
* {@link #setResultType}, or null if none.
*/
- public Class getResultType();
+ public Class<?> getResultType();
/**
* Specify the type of object in which the result of evaluating this query.
*
* @since 0.3.0
*/
- public void setResultType(Class cls);
+ public void setResultType(Class<?> cls);
/**
* Return the 0-based start index for the returned results.
@@ -182,13 +183,13 @@
* map will iterate in the order that the parameters were declared or,
* if they're implicit, used.
*/
- public LinkedMap getParameterTypes();
+ public OrderedMap<Object,Class<?>> getParameterTypes();
/**
* If this query is a bulk update, return a map of the
* {@link FieldMetaData}s to {@link Constant}s.
*/
- public Map getUpdates();
+ public Map<FieldMetaData, Value> getUpdates();
/**
* Whether to ignore changes in the current transaction.
@@ -214,7 +215,7 @@
/**
* If this query is a projection, return the projection types.
*/
- public Class[] getProjectionTypes();
+ public Class<?>[] getProjectionTypes();
/**
* Return true if the query is an aggregate.
@@ -244,12 +245,12 @@
/**
* The set of filter listeners.
*/
- public Collection getFilterListeners();
+ public Collection<FilterListener> getFilterListeners();
/**
* The set of aggregate listeners.
*/
- public Collection getAggregateListeners();
+ public Collection<AggregateListener> getAggregateListeners();
/**
* Helper method to delete the objects found by executing a query on
@@ -270,7 +271,7 @@
* into account the query's candidate package, automatic imports, and
* the given imports (if any). Returns null if the type cannot be found.
*/
- public Class classForName(String name, String[] imports);
+ public Class<?> classForName(String name, String[] imports);
/**
* Synchronize on the query's internal lock.
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/QueryExpressions.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/QueryExpressions.java?rev=889800&r1=889799&r2=889800&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/QueryExpressions.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/exps/QueryExpressions.java Fri Dec 11 20:32:16 2009
@@ -29,6 +29,7 @@
import org.apache.openjpa.kernel.ResultShape;
import org.apache.openjpa.kernel.StoreQuery;
import org.apache.openjpa.kernel.exps.Context;
+import org.apache.openjpa.lib.util.OrderedMap;
import org.apache.openjpa.meta.ClassMetaData;
import org.apache.openjpa.meta.FieldMetaData;
@@ -39,6 +40,7 @@
* @since 0.3.2
* @nojavadoc
*/
+@SuppressWarnings("serial")
public class QueryExpressions
implements Serializable {
@@ -50,13 +52,13 @@
/**
* Map of {@link FieldMetaData},{@link Value} for update statements.
*/
- public Map<Path, Value> updates = Collections.EMPTY_MAP;
+ public Map<Path, Value> updates = Collections.emptyMap();
public int distinct = DISTINCT_AUTO;
public String alias = null;
public Value[] projections = EMPTY_VALUES;
public String[] projectionClauses = StoreQuery.EMPTY_STRINGS;
public String[] projectionAliases = StoreQuery.EMPTY_STRINGS;
- public Class resultClass = null;
+ public Class<?> resultClass = null;
public Expression filter = null;
public Value[] grouping = EMPTY_VALUES;
public String[] groupingClauses = StoreQuery.EMPTY_STRINGS;
@@ -65,7 +67,7 @@
public boolean[] ascending = StoreQuery.EMPTY_BOOLEANS;
public String[] orderingClauses = StoreQuery.EMPTY_STRINGS;
public String[] orderingAliases = StoreQuery.EMPTY_STRINGS;
- public LinkedMap parameterTypes = StoreQuery.EMPTY_PARAMS;
+ public OrderedMap<Object,Class<?>> parameterTypes = StoreQuery.EMPTY_PARAMS;
public int operation = QueryOperations.OP_SELECT;
public ClassMetaData[] accessPath = StoreQuery.EMPTY_METAS;
public String[] fetchPaths = StoreQuery.EMPTY_STRINGS;
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java?rev=889800&r1=889799&r2=889800&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/jpql/JPQLExpressionBuilder.java Fri Dec 11 20:32:16 2009
@@ -58,6 +58,7 @@
import org.apache.openjpa.kernel.exps.Value;
import org.apache.openjpa.lib.log.Log;
import org.apache.openjpa.lib.util.Localizer;
+import org.apache.openjpa.lib.util.OrderedMap;
import org.apache.openjpa.lib.util.Localizer.Message;
import org.apache.openjpa.meta.ClassMetaData;
import org.apache.openjpa.meta.FieldMetaData;
@@ -89,7 +90,7 @@
(JPQLExpressionBuilder.class);
private final Stack<Context> contexts = new Stack<Context>();
- private LinkedMap parameterTypes;
+ private OrderedMap<Object, Class<?>> parameterTypes;
private int aliasCount = 0;
private boolean inAssignSubselectProjection = false;
@@ -1496,7 +1497,7 @@
public static void setImplicitTypes(Value val1, Value val2,
- Class<?> expected, Resolver resolver, LinkedMap parameterTypes,
+ Class<?> expected, Resolver resolver, OrderedMap<Object,Class<?>> parameterTypes,
String currentQuery) {
AbstractExpressionBuilder.setImplicitTypes(val1, val2, expected,
resolver);
@@ -1592,7 +1593,7 @@
private Parameter getParameter(String id, boolean positional,
boolean isCollectionValued) {
if (parameterTypes == null)
- parameterTypes = new LinkedMap(6);
+ parameterTypes = new OrderedMap<Object, Class<?>>();
Object paramKey = positional ? Integer.parseInt(id) : id;
if (!parameterTypes.containsKey(paramKey))
parameterTypes.put(paramKey, TYPE_OBJECT);
@@ -1613,8 +1614,8 @@
throw parseException(EX_USER, "bad-positional-parameter",
new Object[]{ id }, null);
} else {
- // otherwise the index is just the current size of the params
- index = parameterTypes.indexOf(id);
+ // otherwise the index is just the current size of the parameters
+ index = parameterTypes.size()-1;
}
Parameter param = isCollectionValued
? factory.newCollectionValuedParameter(paramKey, TYPE_OBJECT)
Added: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/OrderedMap.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/OrderedMap.java?rev=889800&view=auto
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/OrderedMap.java (added)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/OrderedMap.java Fri Dec 11 20:32:16 2009
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.openjpa.lib.util;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * A Map with predictable iteration order.
+ *
+ * @author Pinaki Poddar
+ * @since 2.0.0
+ */
+@SuppressWarnings("serial")
+public class OrderedMap<K, V> implements Map<K, V>, Serializable {
+ private final LinkedHashMap<K, V> _del;
+
+ /**
+ * Construct with predictable insertion order.
+ */
+ public OrderedMap() {
+ _del = new LinkedHashMap<K, V>(6,0.1f,false);
+ }
+
+ /**
+ * Construct with predictable iteration order.
+ * @param lru if true the iterator order is based on last access, false for order of insertion.
+ */
+ public OrderedMap(boolean lru) {
+ _del = new LinkedHashMap<K, V>(6,0.1f,lru);
+ }
+
+ public int indexOf(Object key) {
+ int i = 0;
+ for (K k : _del.keySet()) {
+ if (key == k)
+ return i;
+ i++;
+ }
+ return -1;
+ }
+
+ public void clear() {
+ }
+
+
+ public boolean containsKey(Object key) {
+ return _del.containsKey(key);
+ }
+
+
+ public boolean containsValue(Object value) {
+ return _del.containsValue(value);
+ }
+
+
+ public Set<java.util.Map.Entry<K, V>> entrySet() {
+ return _del.entrySet();
+ }
+
+
+ public V get(Object key) {
+ return _del.get(key);
+ }
+
+
+ public boolean isEmpty() {
+ return _del.isEmpty();
+ }
+
+
+ public Set<K> keySet() {
+ return _del.keySet();
+ }
+
+
+ public V put(K key, V value) {
+ return _del.put(key, value);
+ }
+
+
+ public void putAll(Map<? extends K, ? extends V> m) {
+ _del.putAll(m);
+ }
+
+
+ public V remove(Object key) {
+ return _del.remove(key);
+ }
+
+
+ public int size() {
+ return _del.size();
+ }
+
+
+ public Collection<V> values() {
+ return _del.values();
+ }
+
+}
Propchange: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/OrderedMap.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java?rev=889800&r1=889799&r2=889800&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java Fri Dec 11 20:32:16 2009
@@ -62,6 +62,7 @@
import org.apache.openjpa.lib.log.Log;
import org.apache.openjpa.lib.rop.ResultList;
import org.apache.openjpa.lib.util.Localizer;
+import org.apache.openjpa.lib.util.OrderedMap;
import org.apache.openjpa.persistence.criteria.CriteriaBuilderImpl;
import org.apache.openjpa.util.ImplHelper;
import org.apache.openjpa.util.RuntimeExceptionTranslator;
@@ -968,10 +969,10 @@
public Map<Object, Parameter<?>> getDeclaredParameters() {
if (_declaredParams == null) {
_declaredParams = new HashMap<Object, Parameter<?>>();
- LinkedMap paramTypes = _query.getParameterTypes();
+ OrderedMap<Object,Class<?>> paramTypes = _query.getParameterTypes();
for (Object key : paramTypes.keySet()) {
Parameter<?> param = null;
- Class<?> expectedValueType = (Class<?>)paramTypes.get(key);
+ Class<?> expectedValueType = paramTypes.get(key);
if (key instanceof Integer) {
param = new ParameterImpl((Integer)key, expectedValueType);
} else if (key instanceof String) {
Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaQueryImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaQueryImpl.java?rev=889800&r1=889799&r2=889800&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaQueryImpl.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/criteria/CriteriaQueryImpl.java Fri Dec 11 20:32:16 2009
@@ -50,6 +50,7 @@
import org.apache.openjpa.kernel.exps.QueryExpressions;
import org.apache.openjpa.kernel.exps.Value;
import org.apache.openjpa.lib.util.Localizer;
+import org.apache.openjpa.lib.util.OrderedMap;
import org.apache.openjpa.persistence.meta.MetamodelImpl;
import org.apache.openjpa.persistence.meta.Types;
@@ -73,7 +74,7 @@
private Set<Root<?>> _roots;
private PredicateImpl _where;
private List<Order> _orders;
- private LinkedMap _params; /*<ParameterExpression<?>, Class<?>>*/
+ private OrderedMap<Object, Class<?>> _params; /*<ParameterExpression<?>, Class<?>>*/
private Selection<? extends T> _selection;
private List<Selection<?>> _selections;
private List<Expression<?>> _groups;
@@ -216,7 +217,7 @@
*/
void registerParameter(ParameterExpressionImpl<?> p) {
if (_params == null)
- _params = new LinkedMap/*<ParameterExpression<?>, Class<?>*/();
+ _params = new OrderedMap/*<ParameterExpression<?>, Class<?>*/();
if (!_params.containsKey(p)) {
p.setIndex(_params.size());
_params.put(p, p.getJavaType());
@@ -401,7 +402,7 @@
* Return map where key is the parameter expression itself and value is the expected type.
* Empty map if no parameter has been declared.
*/
- public LinkedMap getParameterTypes() {
+ public OrderedMap<Object, Class<?>> getParameterTypes() {
collectParameters(new CriteriaExpressionVisitor.ParameterVisitor(this));
return _params == null ? StoreQuery.EMPTY_PARAMS : _params;
}