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;
     }