db-jdo-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mcai...@apache.org
Subject svn commit: r160090 [52/63] - in incubator/jdo/trunk: ./ tck20/ tck20/assertions/ tck20/iut_jars/ tck20/test/ tck20/test/conf/ tck20/test/java/ tck20/test/java/org/ tck20/test/java/org/apache/ tck20/test/java/org/apache/jdo/ tck20/test/java/org/apache/jdo/tck/ tck20/test/java/org/apache/jdo/tck/api/ tck20/test/java/org/apache/jdo/tck/api/instancecallbacks/ tck20/test/java/org/apache/jdo/tck/api/jdohelper/ tck20/test/java/org/apache/jdo/tck/api/persistencemanager/ tck20/test/java/org/apache/jdo/tck/api/persistencemanager/cache/ tck20/test/java/org/apache/jdo/tck/api/persistencemanager/close/ tck20/test/java/org/apache/jdo/tck/api/persistencemanager/extent/ tck20/test/java/org/apache/jdo/tck/api/persistencemanager/flags/ tck20/test/java/org/apache/jdo/tck/api/persistencemanager/getobject/ tck20/test/java/org/apache/jdo/tck/api/persistencemanager/lifecycle/ tck20/test/java/org/apache/jdo/tck/api/persistencemanagerfactory/ tck20/test/java/org/apache/jdo/tck/enhancement/ tck20/test/java/org/apache/jdo/tck/extents/ tck20/test/java/org/apache/jdo/tck/lifecycle/ tck20/test/java/org/apache/jdo/tck/lifecycle/nontransactional/ tck20/test/java/org/apache/jdo/tck/models/ tck20/test/java/org/apache/jdo/tck/models/embedded/ tck20/test/java/org/apache/jdo/tck/models/fieldtypes/ tck20/test/java/org/apache/jdo/tck/models/inheritance/ tck20/test/java/org/apache/jdo/tck/pc/ tck20/test/java/org/apache/jdo/tck/pc/company/ tck20/test/java/org/apache/jdo/tck/pc/fieldtypes/ tck20/test/java/org/apache/jdo/tck/pc/inheritance/ tck20/test/java/org/apache/jdo/tck/pc/instancecallbacks/ tck20/test/java/org/apache/jdo/tck/pc/lifecycle/ tck20/test/java/org/apache/jdo/tck/pc/mylib/ tck20/test/java/org/apache/jdo/tck/query/ tck20/test/java/org/apache/jdo/tck/query/operators/ tck20/test/java/org/apache/jdo/tck/transactions/ tck20/test/java/org/apache/jdo/tck/util/ tck20/test/jdo/ tck20/test/jdo/applicationidentity/ tck20/test/jdo/applicationidentity/org/ tck20/test/jdo/applicationidentity/org/apache/ tck20/test/jdo/applicationidentity/org/apache/jdo/ tck20/test/jdo/applicationidentity/org/apache/jdo/tck/ tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/ tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/company/ tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/ tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/inheritance/ tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/instancecallbacks/ tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/lifecycle/ tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/mylib/ tck20/test/jdo/datastoreidentity/ tck20/test/jdo/datastoreidentity/org/ tck20/test/jdo/datastoreidentity/org/apache/ tck20/test/jdo/datastoreidentity/org/apache/jdo/ tck20/test/jdo/datastoreidentity/org/apache/jdo/tck/ tck20/test/jdo/datastoreidentity/org/apache/jdo/tck/pc/ tck20/test/jdo/datastoreidentity/org/apache/jdo/tck/pc/company/ tck20/test/jdo/datastoreidentity/org/apache/jdo/tck/pc/fieldtypes/ tck20/test/jdo/datastoreidentity/org/apache/jdo/tck/pc/inheritance/ tck20/test/jdo/datastoreidentity/org/apache/jdo/tck/pc/instancecallbacks/ tck20/test/jdo/datastoreidentity/org/apache/jdo/tck/pc/lifecycle/ tck20/test/jdo/datastoreidentity/org/apache/jdo/tck/pc/mylib/ tck20/test/orm/ tck20/test/orm/applicationidentity/ tck20/test/orm/applicationidentity/org/ tck20/test/orm/applicationidentity/org/apache/ tck20/test/orm/applicationidentity/org/apache/jdo/ tck20/test/orm/applicationidentity/org/apache/jdo/tck/ tck20/test/orm/applicationidentity/org/apache/jdo/tck/pc/ tck20/test/orm/applicationidentity/org/apache/jdo/tck/pc/company/ tck20/test/orm/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/ tck20/test/orm/applicationidentity/org/apache/jdo/tck/pc/inheritance/ tck20/test/orm/applicationidentity/org/apache/jdo/tck/pc/instancecallbacks/ tck20/test/orm/applicationidentity/org/apache/jdo/tck/pc/lifecycle/ tck20/test/orm/applicationidentity/org/apache/jdo/tck/pc/mylib/ tck20/test/orm/datastoreidentity/ tck20/test/orm/datastoreidentity/org/ tck20/test/orm/datastoreidentity/org/apache/ tck20/test/orm/datastoreidentity/org/apache/jdo/ tck20/test/orm/datastoreidentity/org/apache/jdo/tck/ tck20/test/orm/datastoreidentity/org/apache/jdo/tck/pc/ tck20/test/orm/datastoreidentity/org/apache/jdo/tck/pc/company/ tck20/test/orm/datastoreidentity/org/apache/jdo/tck/pc/fieldtypes/ tck20/test/orm/datastoreidentity/org/apache/jdo/tck/pc/inheritance/ tck20/test/orm/datastoreidentity/org/apache/jdo/tck/pc/instancecallbacks/ tck20/test/orm/datastoreidentity/org/apache/jdo/tck/pc/lifecycle/ tck20/test/orm/datastoreidentity/org/apache/jdo/tck/pc/mylib/ tck20/test/sql/ tck20/test/sql/derby/
Date Mon, 04 Apr 2005 19:44:01 GMT
Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/ClassGenerator.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/DeepEquality.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/DeepEquality.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/DeepEquality.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/DeepEquality.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,67 @@
+/*
+ * 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.tck.util;
+
+/**
+ * This <code>DeepEquality</code> interface defines a method indicating
+ * whether some other object is "deep equal to" this object.
+ * <p>
+ * Two objects are deep equal, if all the fields are deep equal. The
+ * sematics of deep equal on the fields depends of the field type:
+ * <ul>
+ * <li>fields of type <code>boolean</code> or an integral type are deep
+ * equal, if they compare true using <code>==</code></li> 
+ * <li>fields of type <code>float</code> and <code>double</code> are deep
+ * equal, if they are close enough as defined by methods closeEnough
+ * provided by class <code>EqualityHelper</code></li> 
+ * <li>fields of Java wrapper classes are equal if their wrapped primitive
+ * values are deep equal</li>
+ * <li>fields of type BigDecimal are equal, if compareTo returns 0 </li>
+ * <li>collection fields are deep equal, if they have the same size and
+ * their corresponding elements compare deep equal after sorting using the
+ * natural ordering.</li>  
+ * <li>map fields compare deep equal, if they have the same size and both
+ * keys and values compare deep equal after sorting the entries using the
+ * natural ordering of the keys.</li> 
+ * <li>fields of type <code>DeepEquality</code> are deep equal, if method 
+ * <code>deepEquals</code> returns <code>true</code></li>
+ * <li>fields of other types are deep equal, if method <code>equals</code>
+ * returns <code>true</code></li> 
+ * </ul>
+ * The <code>EqualityHelper</code> instance passed to the
+ * <code>deepEquals</code> method keeps track of instances that have
+ * already been processed to avoid endless recursion for cyclic data
+ * structures. 
+ *
+ * @author Michael Bouschen
+ * @since 1.1
+ */
+public interface DeepEquality {
+
+    /** 
+     * Returns <code>true</code> if all the fields of this instance are
+     * deep equal to the corresponding fields of the specified Employee.
+     * @param other the object with which to compare.
+     * @param helper EqualityHelper to keep track of instances that have
+     * already been processed. 
+     * @return <code>true</code> if all the fields are deep equal;
+     * <code>false</code> otherwise. 
+     * @throws ClassCastException if the specified instances' type prevents
+     * it from being compared to this instance. 
+     */
+    public boolean deepCompareFields(DeepEquality other, EqualityHelper helper);
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/DeepEquality.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/EqualityHelper.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/EqualityHelper.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/EqualityHelper.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/EqualityHelper.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,340 @@
+/*
+ * 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.tck.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import java.math.BigDecimal;
+
+/**
+ * This is a utility class to support equality checking. An EqualityHelper
+ * object defines the context of a deepEquals call, because it keeps track
+ * of objects that have already been processed. This avoids endless
+ * recursion when comparing cyclic data structures for deep equality.
+ * <p>
+ * Furthermore, EqualityHelper provides convenience methods for checking
+ * deep equality, equality and close enough (for floating point values). 
+ *
+ * @author Michael Bouschen
+ * @since 1.1 
+ */
+public class EqualityHelper {
+    
+    /** Used when comparing float values close enough. */
+    public static float FLOAT_EPSILON = (float)Math.pow(2.0, -20.0);
+
+    /** Used when comparing double values close enough. */
+    public static double DOUBLE_EPSILON = Math.pow(2.0, -52.0);
+
+    /** Comparator used in method deepEquals comparing maps. */
+    private static Comparator entryKeyComparator = new Comparator() {
+            public int compare(Object o1, Object o2) {
+                Object key1 = ((Map.Entry)o1).getKey();
+                Object key2 = ((Map.Entry)o2).getKey();
+                return ((Comparable)key1).compareTo(key2);
+            }
+        };
+
+    /** Collection of instances that have been processed already in the
+     * context of this EqualityHelper instance 
+     */
+    private Collection processed = new HashSet();
+
+    // Methods to support keeping track of instances that have been
+    // processed already.
+
+    /** Returns <code>true</code> if the specified instance has been
+     * processed already in the context of this
+     * <code>EqualityHelper</code>. 
+     * @param obj the instance to be checked.
+     * @return <code>true</code> if the instance has been processed
+     * already; <code>false</code> otherwise.
+     */
+    public boolean isProcessed(Object obj) {
+        return processed.contains(obj);
+    }
+    
+    /** Marks the specified instance as processed in the context of this
+     * <code>EqualityHelper</code>. This means the instance is added to the 
+     * collection of processed instances. 
+     * @param obj instance marked as processed
+     */
+    public void markProcessed(Object obj) {
+        processed.add(obj);
+    }
+    
+    /** Clears the collection of processed instances of this
+     * <code>EqualityHelper</code>. No instance is marked as processed in
+     * the context of this <code>EqualityHelper</code> after calling this
+     * method. 
+     */
+    public void clearProcessed() {
+        processed.clear();
+    }
+
+    // Deep equality support methods
+
+    /** Returns <code>true</code> if the specified instances are "deep
+     * equal". 
+     * @param me one object to be tested for deep equality
+     * @param other the other object to be tested for deep equality
+     * @return <code>true</code> if the objects are deep equal.
+     */
+    public boolean deepEquals(DeepEquality me, DeepEquality other) {
+        if (me == other)
+            return true;
+        if ((me == null) || (other == null))
+            return false;
+        if (!me.getClass().isAssignableFrom(other.getClass()))
+            return false; 
+        if (isProcessed(me))
+            return true;
+        markProcessed(me);
+        return me.deepCompareFields(other, this);
+    }
+
+    /** Returns <code>true</code> if the specified instances are "deep
+     * equal". The method compares the two instances via the deepEquals
+     * method if they implement DeepEquals; compares the two instances via 
+     * deepEquals if they implement Collection or Map, and otherwise
+     * compares the instances using equals. 
+     * @param me one object to be tested for deep equality
+     * @param other the other object to be tested for deep equality
+     * @return <code>true</code> if the objects are deep equal.
+     */
+    public  boolean deepEquals(Object me, Object other) {
+        if (me == other)
+            return true;
+        if ((me == null) || (other == null))
+            return false;
+        if ((me instanceof DeepEquality) && (other instanceof DeepEquality))
+            return deepEquals((DeepEquality)me, (DeepEquality)other);
+        if ((me instanceof Collection) && (other instanceof Collection))
+            return deepEquals((Collection)me, (Collection)other);
+        if ((me instanceof Map) && (other instanceof Map))
+            return deepEquals((Map)me, (Map)other);
+        return me.equals(other);
+    }
+
+    /** Returns <code>true</code> if the specified collections are "deep 
+     * equal". Two collections are deep equal, if they have the same size
+     * and their corresponding elements are deep equal after sorting 
+     * using the natural ordering of the elements. The method throws a
+     * <code>ClassCastException</code> if the elements are not Comparable
+     * or if they are not mutually comparable.
+     * @param mine one collection to be tested for deep equality
+     * @param other the other collection to be tested for deep equality
+     * @return <code>true</code> if the collections are deep equal.
+     * @throws ClassCastException if the collections contain elements that
+     * are not mutually comparable.
+     */
+    public boolean deepEquals(Collection mine, Collection other) {
+        if (mine == other)
+            return true;
+        if ((mine == null) || (other == null))
+            return false;
+
+        // Return false, if the size differs
+        if (mine.size() != other.size())
+            return false;
+        // Now check the elements 
+        List myList = new ArrayList(mine);
+        Collections.sort(myList);
+        List otherList = new ArrayList(other);
+        Collections.sort(otherList);
+        for (int i = 0; i < myList.size(); i++) {
+            if (!deepEquals(myList.get(i), otherList.get(i)))
+                return false;
+        }
+        return true;
+    }
+
+    /** Returns <code>true</code> if the specified maps are "deep
+     * equal". Two maps are deep equal, if they have the same size and the 
+     * values of the corresponding keys compare deep equal. The method
+     * throws a <code>ClassCastException</code> if keys or values are not
+     * Comparable or if they are not mutually comparable.
+     * @param mine one map to be tested for deep equality
+     * @param other the other map to be tested for deep equality
+     * @return <code>true</code> if the maps are deep equal.
+     * @throws ClassCastException if the maps contain keys or values that 
+     * are not mutually comparable.
+     */
+    public boolean deepEquals(Map mine, Map other) {
+        if (mine == other)
+            return true;
+        if ((mine == null) || (other == null))
+            return false;
+
+        // Return false, if the size differs
+        if (mine.size() != other.size())
+            return false;
+
+        // Now check the elements 
+        List myList = new ArrayList(mine.entrySet());
+        Collections.sort(myList, entryKeyComparator);
+        List otherList = new ArrayList(other.entrySet());
+        Collections.sort(otherList, entryKeyComparator);
+
+        for (int i = 0; i < myList.size(); i++) {
+            Map.Entry entry1 = (Map.Entry)myList.get(i);
+            Map.Entry entry2 = (Map.Entry)otherList.get(i);
+            // compare the keys
+            if (!deepEquals(entry1.getKey(), entry2.getKey()))
+                return false;
+            // compare the values
+            if (!deepEquals(entry1.getValue(), entry2.getValue()))
+                return false;
+        }
+        return true;
+    }
+
+    // Shallow equality support methods
+
+    /** Returns <code>true</code> if the specified collections are "shallow
+     * equal". Two collections are shallow equal, if they have the same size 
+     * and their corresponding elements are equal after sorting using the
+     * natural ordering. 
+     * @param mine one collection to be tested for shallow equality
+     * @param other the other collection to be tested for shallow equality
+     * @return <code>true</code> if the collections are deep equal.
+     */
+    public boolean shallowEquals(Collection mine, Collection other) {
+        if (mine == other)
+            return true;
+        if ((mine == null) || (other == null))
+            return false;
+
+        // Return false, if the size differs
+        if (mine.size() != other.size())
+            return false;
+        // Now check the elements 
+        List myList = new ArrayList(mine);
+        Collections.sort(myList);
+        List otherList = new ArrayList(other);
+        Collections.sort(otherList);
+        return myList.equals(otherList);
+    }
+
+    // Equality support methods
+
+    /** Returns <code>true</code> if the specified objects are equal. 
+     * This is a helper method checking for identical and <code>null</code>
+     * objects before delegating to the regular equals method.
+     * @param o1 one object to be tested for equality
+     * @param o2 the other object to be tested for equality
+     * @return <code>true</code> if the specified objects are equal.
+     */
+    public boolean equals(Object o1, Object o2) {
+        if (o1 == o2)
+            return true;
+        if ((o1 == null) || (o2 == null))
+            return false;
+        return o1.equals(o2);
+    }
+
+    /** Returns <code>true</code>, if compare called for the specified
+     * BigDecimal objects returns <code>0</code>. Please note, two
+     * BigDecimal instances are not equal (using equals) if their scale
+     * differs, and this method compares the values, ignoring scale. 
+     * @param bd1 one object to be tested for equality
+     * @param bd2 the other object to be tested for equality
+     * @return <code>true</code> if the specified BigDecimal objects are
+     * equal.
+     */
+    public boolean equals(BigDecimal bd1, BigDecimal bd2) {
+        if (bd1 == bd2)
+            return true;
+        if ((bd1 == null) || (bd2 == null))
+            return false;
+        return bd1.compareTo(bd2) == 0;
+    }
+
+    // Methods to support "close enough" comparison
+
+    /** Returns <code>true</code> if the specified objects are close
+     * enough to be considered to be equal for a deep equals
+     * comparison. The method delegates to the method taking double
+     * or float values if the specified objects are Float or Double
+     * wrappers. Otherwise it delegates to equals. 
+     * @param o1 one object to be tested for close enough 
+     * @param o2 the other object to be tested for close enough 
+     * @return <code>true</code> if the specified values are close enough.
+     */
+    public boolean closeEnough(Object o1, Object o2) {
+        if (o1 == o2)
+            return true;
+        if ((o1 == null) || (o2 == null))
+            return false;
+       
+        if ((o1 instanceof Double) && (o2 instanceof Double))
+            return closeEnough(((Double)o1).doubleValue(), 
+                               ((Double)o2).doubleValue()); 
+        else if ((o1 instanceof Float) && (o2 instanceof Float))
+            return closeEnough(((Float)o1).floatValue(), 
+                               ((Float)o2).floatValue()); 
+        else if ((o1 instanceof BigDecimal) && (o2 instanceof BigDecimal))
+            return ((BigDecimal)o1).compareTo((BigDecimal)o2) == 0;
+        else
+            return o1.equals(o2);
+    }
+
+    /** Returns <code>true</code> if the specified float values are close
+     * enough to be considered to be equal for a deep equals
+     * comparison. Floating point values are not exact, so comparing them
+     * using <code>==</code> might not return useful results. This method
+     * checks that both double values are within some percent of each
+     * other. 
+     * @param d1 one double to be tested for close enough 
+     * @param d2 the other double to be tested for close enough 
+     * @return <code>true</code> if the specified values are close enough.
+     */
+    public boolean closeEnough(double d1, double d2) {
+        if (d1 == d2)
+            return true;
+
+        double diff = Math.abs(d1 - d2);
+        return diff < Math.abs((d1 + d2) * DOUBLE_EPSILON);
+    }
+
+    /**
+     * Returns <code>true</code> if the specified float values are close
+     * enough to be considered to be equal for a deep equals
+     * comparison. Floating point values are not exact, so comparing them 
+     * using <code>==</code> might not return useful results. This method
+     * checks that both float values are within some percent of each
+     * other. 
+     * @param f1 one float to be tested for close enough 
+     * @param f2 the other float to be tested for close enough 
+     * @return <code>true</code> if the specified values are close enough.
+     */
+    public boolean closeEnough(float f1, float f2) {
+        if (f1 == f2)
+            return true;
+
+        float diff = Math.abs(f1 - f2);
+        return diff < Math.abs((f1 + f2) * FLOAT_EPSILON);
+    }
+
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/EqualityHelper.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/GetSupportedOptions.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/GetSupportedOptions.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/GetSupportedOptions.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/GetSupportedOptions.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,43 @@
+/*
+ * 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.tck.util;
+
+import java.util.Collection;
+import java.util.Iterator;
+import javax.jdo.PersistenceManagerFactory;
+
+public class GetSupportedOptions {
+
+    public static void main(String[] args) throws Exception
+    {
+        if( args.length == 0 ){
+            System.err.println("Must pass name of PMF as an argument");
+            System.exit(-1);
+        }
+        String PMFclassname = args[0];
+        Class PMFclass = Class.forName(PMFclassname);
+        PersistenceManagerFactory pmf = (PersistenceManagerFactory) PMFclass.newInstance();
+        Collection options = pmf.supportedOptions();
+        System.out.println("Supported options are:");
+        Iterator iter = options.iterator();
+        while( iter.hasNext() ){
+            String val = (String) iter.next();
+            System.out.println(val);        
+        }
+    }
+
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/GetSupportedOptions.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/JDOJdk14Logger.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/JDOJdk14Logger.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/JDOJdk14Logger.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/JDOJdk14Logger.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,93 @@
+/*
+ * 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.tck.util;
+
+import java.io.InputStream;
+import java.io.IOException;
+
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+
+import java.util.logging.LogManager;
+
+import javax.jdo.JDOFatalUserException;
+
+import org.apache.commons.logging.impl.Jdk14Logger;
+
+/**
+ * JDO-specific subclass of the apache commons logging Log
+ * implementation that wraps the standard JDK 1.4 logging.
+ * This class configures the JDK LogManager using a properties file
+ * called logging.properties found via the CLASSPATH.
+ *
+ * @author Michael Bouschen
+ * @since 1.1
+ * @version 1.1
+ */
+public class JDOJdk14Logger
+    extends Jdk14Logger
+{
+    /** Logging properties file name. */
+    public static final String PROPERIES_FILE = "logging.properties";
+    
+    /** Indicates whether JDK 1.4 logging has been configured by this class. */
+    private static boolean configured = false;
+    
+    /** 
+     * Constructor checking whether JDK 1.4 logging should be
+     * configuared after calling super constructor. 
+     */
+    public JDOJdk14Logger(String name) {
+        super(name);
+        if (!configured) {
+            configured = true;
+            configureJDK14Logger();
+        }
+    }
+
+    /** 
+     * Configures JDK 1.4 LogManager.
+     */
+    private void configureJDK14Logger() {
+        final LogManager logManager = LogManager.getLogManager();
+        final ClassLoader cl = getClass().getClassLoader();
+        AccessController.doPrivileged(new PrivilegedAction() {
+            public Object run () {
+                try {
+                    InputStream config = cl.getResourceAsStream(PROPERIES_FILE);
+                    logManager.readConfiguration(config);
+                    return null;
+                }
+                catch (IOException ex) {
+                    throw new JDOFatalUserException(
+                        "A IOException was thrown when trying to read the " +
+                        "logging configuration file " + PROPERIES_FILE + ".",
+                        ex); 
+                }
+                catch (SecurityException ex) {
+                    throw new JDOFatalUserException(
+                        "A SecurityException was thrown when trying to read " + 
+                        "the logging configuration file " + PROPERIES_FILE + 
+                        ". In order to configure JDK 1.4 logging, you must " + 
+                        "grant java.util.logging.LoggingPermission(control) " + 
+                        "to the codeBase containing the JDO TCK.", ex);
+                }
+            }
+            });
+    }
+    
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/JDOJdk14Logger.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/SwingTestRunner.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/SwingTestRunner.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/SwingTestRunner.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/SwingTestRunner.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,132 @@
+/*
+ * 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.tck.util;
+
+import java.util.Arrays;
+import java.util.List;
+
+import javax.swing.JCheckBox;
+import javax.swing.JOptionPane;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.swingui.TestRunner;
+
+/**
+ * TestRunner class for running a single test or a test suite in GUI mode
+ * using swing.
+ *
+ * @author Michael Bouschen
+ */
+public class SwingTestRunner
+    extends TestRunner
+{
+    /** */
+    private static final String TESTCOLLECTOR_KEY= "TestCollectorClass";
+    
+    /** */
+    private static final String USER_DEFINED = "User defined test list";
+    
+    /** */
+    private Test suite = null;
+
+    /** */
+    public SwingTestRunner() {
+        super();
+        setPreference(TESTCOLLECTOR_KEY, TestListSuite.class.getName());
+        // Disable feature: reloading of test classes every run.
+        setPreference("loading", "false");
+    }
+
+    /** */
+    public static void main(String[] args) {
+        new SwingTestRunner().start(args);
+    }
+    
+    /** */
+    public static void run(Class test) {
+        main(new String[] { test.getName() });
+    }
+
+    /** */
+    public void start(String[] args) {
+        String suiteName = "JDO TCK";
+        fFrame = createUI(suiteName);
+        fFrame.pack();
+        fFrame.setVisible(true);
+        if ((args == null) || args.length == 0) {
+            suite = getTest(TestListSuite.class.getName());
+        }
+        else if (args.length == 1) {
+            suiteName = args[0];
+            suite = getTest(args[0]);
+        }
+        else {
+            suite = new TestListSuite(suiteName, Arrays.asList(args));
+        }
+        setSuite(suiteName);
+        runTest(suite);
+    }
+
+    /** Disable feature: reloading of test classes every run. */
+    protected JCheckBox createUseLoaderCheckBox() {
+        JCheckBox box = super.createUseLoaderCheckBox();
+        box.setVisible(false);
+        return box;
+    }
+    
+    /** */
+    public void browseTestClasses() {
+        TestSelector selector= new TestSelector(fFrame, new TestListSuite("JDO TCK test selection"));
+        if (selector.isEmpty()) {
+            JOptionPane.showMessageDialog(fFrame, "No Test Cases found.\nCheck that the configured \'TestCollector\' is supported on this platform.");
+            return;
+        }
+        selector.show();
+        List classNames = selector.getSelectedItems();
+        if ((classNames != null) && (!classNames.isEmpty())) {
+            if (classNames.size() == 1) {
+                setSuite((String)classNames.get(0));
+            }
+            else {
+                setSuite(USER_DEFINED);
+                suite = new TestListSuite("Selected JDO TCK tests", classNames);
+            } 
+        }
+    }
+    
+    /** */
+    public Test getTest(String suiteClassName) {
+        if ((suiteClassName != null ) && suiteClassName.equals(USER_DEFINED)) {
+            if (suite == null) {
+                // user selected 'User defines test list' from history, 
+                // but there is no user selection => use all tests   
+                suite = new TestListSuite("JDO TCK tests");
+            }
+            return suite;
+        }
+        return super.getTest(suiteClassName);
+    }
+
+    /**
+     * Terminates the TestRunner
+     */
+    public void terminate() {
+        fFrame.dispose();
+        System.exit(0);
+    }
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/SwingTestRunner.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/TestListSuite.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/TestListSuite.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/TestListSuite.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/TestListSuite.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,165 @@
+/*
+ * 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.tck.util;
+
+import java.io.BufferedReader;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.security.AccessController;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.runner.TestCollector;
+
+/**
+ * This class implements a test suite including all test cases as specified
+ * in a testlist file. The user can specify the name of the testlist by
+ * setting the system property testlist. The default is
+ * JDOTCKTestCases.list. The swing GUI uses this class when browsing all
+ * test classes.
+ * 
+ * @author Michael Bouschen
+ */
+public class TestListSuite
+    extends TestSuite
+    implements TestCollector
+{
+    /** Name of the system property to specify the list of test class names. */
+    public static final String TESTLIST_PROPERTY = "testlist";
+
+    /** Default of the system property testlist. */
+    public static final String TESTLIST_DEFAULT = "JDOTCKTestCases.list";
+
+    /** 
+     * No arg constructor used by the swing GUI when browsing the test
+     * classes via the TestCollector interface.
+     */
+    public TestListSuite() { }
+    
+    /** 
+     * Creates a test suite with the specified name and reads the test
+     * class names fom a file specified by a system property.
+     */
+    public TestListSuite(String name) {
+        setName(name);
+        addTestClasses(getTestClassNames());
+    }
+    
+    /** 
+     * Creates a test suite with the specified name including the test
+     * classes from the specified list.
+     */
+    public TestListSuite(String name, List classNames) {
+    	setName(name);
+        addTestClasses(classNames);
+    }
+    
+    /** Runs this test suite in batch mode. */
+    public static void main(String args[]) {
+        BatchTestRunner.run(suite());
+    }
+
+    /** */
+	public static Test suite() {
+        return new TestListSuite("JDOTCK tests");
+    }
+
+    /** 
+     * Adds all test classes from the specified list to this test
+     * suite. 
+     */ 
+    private void addTestClasses(List classNames) {
+    	for (Iterator i = classNames.iterator(); i.hasNext();) {
+    		String className = (String)i.next();
+    		try {
+    			addTestSuite(Class.forName(className));
+    		}
+    		catch (ClassNotFoundException ex) {
+    			System.out.println("Cannot find test class " + className);
+    		}
+        }
+    }
+    
+	/** 
+     * Returns an enumeration of Strings with qualified class names. 
+     * Method defined in the JUnit interface TestCollector.
+     */
+	public Enumeration collectTests() {
+        return Collections.enumeration(getTestClassNames());
+    }
+
+    /** 
+     * Returns a list of fully qualified test class names. The method
+     * checks the system property testlist for the name of the test list
+     * (default is JDOTCKTestCases.list). Each line of the file is expected
+     * to be the fully qualified class name of a test class. Line starting
+     * with a # are skipped.
+     */
+    protected List getTestClassNames() {
+        // get the name of the testlist file as system property 
+        String testlist = System.getProperty(TESTLIST_PROPERTY, TESTLIST_DEFAULT);
+        List testClassNames = new ArrayList();
+        try {
+            BufferedReader reader = getTestListReader(testlist);
+            for (String line = reader.readLine(); 
+                 line != null; 
+                 line = reader.readLine()) {
+                line = line.trim();
+                if (isTestClassName(line)) {
+                    testClassNames.add(line);
+                }
+            }
+            reader.close();
+        }
+        catch (IOException ex) {
+            System.out.println("Problems reading testlist " + testlist + ": " + ex);
+        }
+        return testClassNames;
+    }
+    
+    /** Returns a BufferedReader for the specified testlist filename. */
+    protected BufferedReader getTestListReader(final String testlist) 
+        throws FileNotFoundException {
+        try {
+            return (BufferedReader)AccessController.doPrivileged(
+                new PrivilegedExceptionAction () {
+                    public Object run () throws IOException {
+                        return new BufferedReader(new FileReader(testlist));
+                    }
+                });
+        }
+        catch (PrivilegedActionException ex) {
+            // unwrap IOException
+            throw (FileNotFoundException)ex.getException();
+        } 
+    }
+
+    /** Returns true if the specified String defines a test class name. */
+    protected boolean isTestClassName(String line) {
+        return (line != null) && 
+               (line.length() > 0) &&
+               !line.trim().startsWith("#");
+    }
+}
+

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/TestListSuite.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/TestSelector.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/TestSelector.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/TestSelector.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/TestSelector.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,284 @@
+/*
+ * 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.tck.util;
+
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Vector;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JScrollPane;
+import javax.swing.JTree;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreeModel;
+import javax.swing.tree.TreeNode;
+import javax.swing.tree.TreePath;
+
+import junit.runner.TestCollector;
+
+/**
+ * A test class selector. A simple dialog to pick the name of a test suite.
+ */
+public class TestSelector extends JDialog {
+    private JButton fCancel;
+    private JButton fOk;
+    private JList fList;
+    private JTree fTree;
+    private JScrollPane fScrolledList;
+    private JLabel fDescription;
+    private List fSelectedItems;
+    
+    /** */
+    public TestSelector(Frame parent, TestCollector testCollector) {
+        super(parent, true);
+        setSize(500, 500);
+        // setLocationRelativeTo only exists in 1.4
+        try {
+            setLocationRelativeTo(parent);
+        } catch (NoSuchMethodError e) {
+            centerWindow();
+        }
+        setTitle("Test Selector");
+        
+        Vector list = null;
+        try {
+            parent.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+            list= createTestList(testCollector);
+        } finally {
+            parent.setCursor(Cursor.getDefaultCursor());
+        }
+        
+        fTree = new JTree(createTreeModel(list));
+        //fTree.getSelectionModel().setSelectionMode(
+        //    TreeSelectionModel.SINGLE_TREE_SELECTION);
+        fScrolledList= new JScrollPane(fTree);
+
+        fCancel= new JButton("Cancel");
+        fDescription= new JLabel("Select the Test class:");
+        fOk= new JButton("OK");
+        fOk.setEnabled(false);
+        getRootPane().setDefaultButton(fOk);
+        
+        defineLayout();
+        addListeners();
+    }
+
+    /** */
+    public boolean isEmpty() {
+        return ((TreeNode)fTree.getModel().getRoot()).getChildCount() == 0;
+    }
+    
+    /** */
+    public List getSelectedItems() {
+        return fSelectedItems;
+    }
+
+    /** */
+    public void checkEnableOK(TreeSelectionEvent e) {
+        boolean enabled = false;
+        TreePath[] paths = fTree.getSelectionPaths();
+        if (paths != null) {
+        	for (int i = 0; i < paths.length; i++) {
+                if (((TreeNode)paths[i].getLastPathComponent()).isLeaf()) {
+                    enabled = true;
+                    break;
+                }      
+            }
+        }
+        fOk.setEnabled(enabled);
+    }
+    
+    /** */
+    public void okSelected() {
+        List classNames = new ArrayList();
+        TreePath[] paths = fTree.getSelectionPaths();
+        if (paths != null) {
+        	for (int i = 0; i < paths.length; i++) {
+                Object selected = paths[i].getLastPathComponent();
+                if (selected instanceof ClassNameTreeNode) {
+                     classNames.add(((ClassNameTreeNode)selected).getClassName());
+                }
+        	}
+        }
+        
+        fSelectedItems = classNames;
+        dispose();
+    }
+    
+    /** */
+    private TreeModel createTreeModel(List classNames) {
+        DefaultMutableTreeNode root = new DefaultMutableTreeNode("Test Classes");
+        TreeModel model = new DefaultTreeModel(root);
+        
+        String currentPackageName = null;
+        DefaultMutableTreeNode currentPackageNode = null;
+        DefaultMutableTreeNode parent = root;
+        for (Iterator i = classNames.iterator(); i.hasNext();) {
+            String className = (String)i.next();
+            int index = className.lastIndexOf('.');
+            String packageName = (index >= 0) ? className.substring(0, index) : "";
+            if ((currentPackageName == null) || !currentPackageName.equals(packageName)) {
+                currentPackageName = packageName;
+                currentPackageNode = new DefaultMutableTreeNode(currentPackageName);
+                parent.add(currentPackageNode);
+            }
+            currentPackageNode.add(new ClassNameTreeNode(className));
+        }
+        return model;
+    }
+    
+    /** */
+    private void centerWindow() {
+        Dimension paneSize = getSize();
+        Dimension screenSize = getToolkit().getScreenSize();
+        setLocation((screenSize.width-paneSize.width)/2, (screenSize.height-paneSize.height)/2);
+    }
+    
+    /** */
+    private void addListeners() {
+        fCancel.addActionListener(
+            new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    dispose();
+                }
+            });
+        
+        fOk.addActionListener(
+            new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    okSelected();
+                }
+            });
+
+        fTree.addTreeSelectionListener(
+            new TreeSelectionListener() {
+                public void valueChanged(TreeSelectionEvent e) {
+                    checkEnableOK(e);
+                }
+            });
+        
+        fTree.addMouseListener(
+            new MouseAdapter () {
+                public void mouseClicked(MouseEvent e) {
+                    if (e.getClickCount() == 2) {
+                        okSelected();
+                    }
+                }
+            });
+
+        addWindowListener(
+            new WindowAdapter() {
+                public void windowClosing(WindowEvent e) {
+                    dispose();
+                }
+            }
+            );
+    }
+    
+    /** */
+    private void defineLayout() {
+        getContentPane().setLayout(new GridBagLayout());
+        GridBagConstraints labelConstraints = new GridBagConstraints();
+        labelConstraints.gridx= 0; labelConstraints.gridy= 0;
+        labelConstraints.gridwidth= 1; labelConstraints.gridheight= 1;
+        labelConstraints.fill= GridBagConstraints.BOTH;
+        labelConstraints.anchor= GridBagConstraints.WEST;
+        labelConstraints.weightx= 1.0;
+        labelConstraints.weighty= 0.0;
+        labelConstraints.insets= new Insets(8, 8, 0, 8);
+        getContentPane().add(fDescription, labelConstraints);
+
+        GridBagConstraints listConstraints = new GridBagConstraints();
+        listConstraints.gridx= 0; listConstraints.gridy= 1;
+        listConstraints.gridwidth= 4; listConstraints.gridheight= 1;
+        listConstraints.fill= GridBagConstraints.BOTH;
+        listConstraints.anchor= GridBagConstraints.CENTER;
+        listConstraints.weightx= 1.0;
+        listConstraints.weighty= 1.0;
+        listConstraints.insets= new Insets(8, 8, 8, 8);
+        getContentPane().add(fScrolledList, listConstraints);
+        
+        GridBagConstraints okConstraints= new GridBagConstraints();
+        okConstraints.gridx= 2; okConstraints.gridy= 2;
+        okConstraints.gridwidth= 1; okConstraints.gridheight= 1;
+        okConstraints.anchor= java.awt.GridBagConstraints.EAST;
+        okConstraints.insets= new Insets(0, 8, 8, 8);
+        getContentPane().add(fOk, okConstraints);
+
+
+        GridBagConstraints cancelConstraints = new GridBagConstraints();
+        cancelConstraints.gridx= 3; cancelConstraints.gridy= 2;
+        cancelConstraints.gridwidth= 1; cancelConstraints.gridheight= 1;
+        cancelConstraints.anchor= java.awt.GridBagConstraints.EAST;
+        cancelConstraints.insets= new Insets(0, 8, 8, 8);
+        getContentPane().add(fCancel, cancelConstraints);
+    }
+    
+    /** */
+    private Vector createTestList(TestCollector collector) {
+        Enumeration each= collector.collectTests();
+        Vector classNames = new Vector(300);
+        while(each.hasMoreElements()) {
+            classNames.add(each.nextElement());  
+        }
+        Collections.sort(classNames);
+        return classNames;
+    }
+
+    /** */
+    private static class ClassNameTreeNode extends DefaultMutableTreeNode {
+        private String className;
+        
+        /** */
+        public ClassNameTreeNode (String className) {
+            this.className = className;
+        }
+        
+        /** */
+        public String toString() {
+            if (className == null) return "";
+            int index = className.lastIndexOf('.');
+            return (index >= 0) ? className.substring(index+1) : className;
+        }
+        
+        /** */
+        public String getClassName() {
+            return className;   
+        }
+    }
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/TestSelector.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/ThreadExceptionHandler.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/ThreadExceptionHandler.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/ThreadExceptionHandler.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/ThreadExceptionHandler.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,63 @@
+/*
+ * 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.tck.util;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * This class extends java.lang.ThreadGroup and stores any uncaught
+ * exception of threads from this ThreadGroup for later retrieval.
+ *
+ * @author Michael Bouschen
+ */
+public class ThreadExceptionHandler extends ThreadGroup
+{
+    /** 
+     * Map of uncaught exceptions. The thread is the key and the uncaught
+     * Throwable is the value in the map. 
+     */
+    private Map uncaughtExceptions = new HashMap();
+    
+    /** Constructor. */
+    public ThreadExceptionHandler() {
+        super("ThreadExceptionHandler");
+    }
+    
+    /** Called by the Java Virtual Machine when a thread in this thread
+     * group stops because of an uncaught exception. This implementation
+     * stores the uncaught exception in a map for later retrieval.
+     */ 
+    public void uncaughtException(Thread t, Throwable e) {
+        uncaughtExceptions.put(t, e);
+    }
+
+    /** Returns an uncaught exception for the specified thread. */
+    public Throwable getUncaughtException(Thread t) {
+        return (Throwable)uncaughtExceptions.get(t);
+    }
+
+    /** 
+     * Returns all uncaught exception stored in this ThreadGroup. 
+     * Each element in the returned set is a Map.Entry with the 
+     * thread as the key and the uncaught Throwable is the value.
+     */
+    public Set getAllUncaughtExceptions() {
+        return uncaughtExceptions.entrySet();
+    }
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/util/ThreadExceptionHandler.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/company/jdoTest.properties
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/company/jdoTest.properties?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/company/jdoTest.properties (added)
+++ incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/company/jdoTest.properties Mon Apr  4 12:41:23 2005
@@ -0,0 +1,98 @@
+
+ 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.
+
+
+# Classnames can have the following attributes: 
+#          jdo:{persistent|transactional} 
+#          super: <classname> 
+#          oid: <classname> 
+#          access: {public|protected|package|private} 
+# Fieldnames can have the following attributes: 
+#          type:<type> 
+#          access: {public|protected|package|private} 
+#          jdo:{persistent|transactional|transient} 
+#          annotation:{key|dfg|mediated} 
+
+org.apache.jdo.tck.pc.company.Address=jdo:persistent,oid:org.apache.jdo.tck.pc.company.Address$Oid
+org.apache.jdo.tck.pc.company.Address#addrid=jdo:persistent,annotation:key
+org.apache.jdo.tck.pc.company.Address#city=jdo:persistent,annotation:dfg
+org.apache.jdo.tck.pc.company.Address#state=jdo:persistent,annotation:dfg
+org.apache.jdo.tck.pc.company.Address#street=jdo:persistent,annotation:dfg
+org.apache.jdo.tck.pc.company.Address#zipcode=jdo:persistent,annotation:dfg
+org.apache.jdo.tck.pc.company.Address#country=jdo:persistent,annotation:dfg
+
+org.apache.jdo.tck.pc.company.Company=jdo:persistent,oid:org.apache.jdo.tck.pc.company.Company$Oid
+org.apache.jdo.tck.pc.company.Company#address=jdo:persistent,annotation:mediated
+org.apache.jdo.tck.pc.company.Company#companyid=jdo:persistent,annotation:key
+org.apache.jdo.tck.pc.company.Company#departments=jdo:persistent,annotation:mediated
+org.apache.jdo.tck.pc.company.Company#founded=jdo:persistent,annotation:dfg
+org.apache.jdo.tck.pc.company.Company#name=jdo:persistent,annotation:dfg
+
+org.apache.jdo.tck.pc.company.DentalInsurance=jdo:persistent,super:org.apache.jdo.tck.pc.company.Insurance
+org.apache.jdo.tck.pc.company.DentalInsurance#lifetimeOrthoBenefit=jdo:persistent,annotation:dfg
+
+org.apache.jdo.tck.pc.company.Department=jdo:persistent,oid:org.apache.jdo.tck.pc.company.Department$Oid
+org.apache.jdo.tck.pc.company.Department#deptid=jdo:persistent,annotation:key
+org.apache.jdo.tck.pc.company.Department#name=jdo:persistent,annotation:dfg
+org.apache.jdo.tck.pc.company.Department#employees=jdo:persistent,annotation:mediated
+org.apache.jdo.tck.pc.company.Department#fundedEmps=jdo:persistent,annotation:mediated
+org.apache.jdo.tck.pc.company.Department#company=jdo:persistent,annotation:mediated
+org.apache.jdo.tck.pc.company.Department#employeeOfTheMonth=jdo:persistent,annotation:mediated
+
+org.apache.jdo.tck.pc.company.Employee=jdo:persistent,super:org.apache.jdo.tck.pc.company.Person
+org.apache.jdo.tck.pc.company.Employee#dentalInsurance=jdo:persistent,annotation:mediated
+org.apache.jdo.tck.pc.company.Employee#department=jdo:persistent,annotation:mediated
+org.apache.jdo.tck.pc.company.Employee#fundingDept=jdo:persistent,annotation:mediated
+org.apache.jdo.tck.pc.company.Employee#hiredate=jdo:persistent,annotation:dfg
+org.apache.jdo.tck.pc.company.Employee#hradvisees=jdo:persistent,annotation:mediated
+org.apache.jdo.tck.pc.company.Employee#hradvisor=jdo:persistent,annotation:mediated
+org.apache.jdo.tck.pc.company.Employee#manager=jdo:persistent,annotation:mediated
+org.apache.jdo.tck.pc.company.Employee#medicalInsurance=jdo:persistent,annotation:mediated
+org.apache.jdo.tck.pc.company.Employee#mentor=jdo:persistent,annotation:mediated
+org.apache.jdo.tck.pc.company.Employee#projects=jdo:persistent,annotation:mediated
+org.apache.jdo.tck.pc.company.Employee#protege=jdo:persistent,annotation:mediated
+org.apache.jdo.tck.pc.company.Employee#reviewedProjects=jdo:persistent,annotation:mediated
+org.apache.jdo.tck.pc.company.Employee#team=jdo:persistent,annotation:mediated
+org.apache.jdo.tck.pc.company.Employee#weeklyhours=jdo:persistent,annotation:dfg
+
+org.apache.jdo.tck.pc.company.FullTimeEmployee=jdo:persistent,super:org.apache.jdo.tck.pc.company.Employee
+org.apache.jdo.tck.pc.company.FullTimeEmployee#salary=jdo:persistent,annotation:dfg
+
+org.apache.jdo.tck.pc.company.Insurance=jdo:persistent,oid:org.apache.jdo.tck.pc.company.Insurance$Oid
+org.apache.jdo.tck.pc.company.Insurance#insid=jdo:persistent,annotation:key
+org.apache.jdo.tck.pc.company.Insurance#carrier=jdo:persistent,annotation:dfg
+org.apache.jdo.tck.pc.company.Insurance#employee=jdo:persistent,annotation:mediated
+
+org.apache.jdo.tck.pc.company.MedicalInsurance=jdo:persistent,super:org.apache.jdo.tck.pc.company.Insurance
+org.apache.jdo.tck.pc.company.MedicalInsurance#planType=jdo:persistent,annotation:dfg
+
+org.apache.jdo.tck.pc.company.PartTimeEmployee=jdo:persistent,super:org.apache.jdo.tck.pc.company.Employee
+org.apache.jdo.tck.pc.company.PartTimeEmployee#wage=jdo:persistent,annotation:dfg
+
+org.apache.jdo.tck.pc.company.Person=jdo:persistent,oid:org.apache.jdo.tck.pc.company.Person$Oid
+org.apache.jdo.tck.pc.company.Person#address=jdo:persistent,annotation:mediated
+org.apache.jdo.tck.pc.company.Person#birthdate=jdo:persistent,annotation:dfg
+org.apache.jdo.tck.pc.company.Person#firstname=jdo:persistent,annotation:dfg
+org.apache.jdo.tck.pc.company.Person#lastname=jdo:persistent,annotation:dfg
+org.apache.jdo.tck.pc.company.Person#middlename=jdo:persistent,annotation:mediated
+org.apache.jdo.tck.pc.company.Person#personid=jdo:persistent,annotation:key
+org.apache.jdo.tck.pc.company.Person#phoneNumbers=jdo:persistent,annotation:mediated
+
+org.apache.jdo.tck.pc.company.Project=jdo:persistent,oid:org.apache.jdo.tck.pc.company.Project$Oid
+org.apache.jdo.tck.pc.company.Project#budget=jdo:persistent,annotation:dfg
+org.apache.jdo.tck.pc.company.Project#members=jdo:persistent,annotation:mediated
+org.apache.jdo.tck.pc.company.Project#name=jdo:persistent,annotation:dfg
+org.apache.jdo.tck.pc.company.Project#projid=jdo:persistent,annotation:key
+org.apache.jdo.tck.pc.company.Project#reviewers=jdo:persistent,annotation:mediated

Propchange: incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/company/jdoTest.properties
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/company/package.jdo
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/company/package.jdo?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/company/package.jdo (added)
+++ incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/company/package.jdo Mon Apr  4 12:41:23 2005
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE jdo PUBLIC "-//Sun Microsystems, Inc.//DTD Java Data Objects Metadata 2.0//EN" "http://java.sun.com/dtd/jdo_2_0.dtd">
+<jdo>
+<!--
+This file contains the schema information when an implementation
+has application identity.
+-->
+    <package name="org.apache.jdo.tck.pc.company">
+
+        <class name="Address"
+            identity-type="application"
+            objectid-class="org.apache.jdo.tck.pc.company.Address$Oid">
+            <field name="addrid" primary-key="true"/>
+        </class>
+
+        <class name="Company"
+            identity-type="application"
+            objectid-class="org.apache.jdo.tck.pc.company.Company$Oid">
+            <field name="companyid" primary-key="true"/>
+            <field name="departments" persistence-modifier="persistent">
+                <collection element-type="org.apache.jdo.tck.pc.company.Department"/>
+            </field>
+            <field name="address" embedded="true"/>
+        </class>
+
+        <class name="DentalInsurance"
+            identity-type="application"
+            persistence-capable-superclass="org.apache.jdo.tck.pc.company.Insurance"
+        />
+
+        <class name="Department"
+            identity-type="application"
+            objectid-class="org.apache.jdo.tck.pc.company.Department$Oid">
+            <field name="deptid" primary-key="true"/>
+            <field name="employees" persistence-modifier="persistent">
+                <collection element-type="org.apache.jdo.tck.pc.company.Employee"/>
+            </field>
+            <field name="fundedEmps" persistence-modifier="persistent">
+                <collection element-type="org.apache.jdo.tck.pc.company.Employee"/>
+            </field>
+        </class>
+
+        <class name="Employee"
+            identity-type="application"
+            persistence-capable-superclass="org.apache.jdo.tck.pc.company.Person">
+            <field name="reviewedProjects" persistence-modifier="persistent">
+                <collection element-type="org.apache.jdo.tck.pc.company.Project"/>
+            </field>
+            <field name="projects" persistence-modifier="persistent">
+                <collection element-type="org.apache.jdo.tck.pc.company.Project"/>
+            </field>
+            <field name="team" persistence-modifier="persistent">
+                <collection element-type="org.apache.jdo.tck.pc.company.Employee"/>
+            </field>
+            <field name="hradvisees" persistence-modifier="persistent">
+                <collection element-type="org.apache.jdo.tck.pc.company.Employee"/>
+            </field>
+        </class>
+
+        <class name="FullTimeEmployee"
+            identity-type="application"
+            persistence-capable-superclass="org.apache.jdo.tck.pc.company.Employee"
+        />
+
+        <class name="Insurance"
+            identity-type="application"
+            objectid-class="org.apache.jdo.tck.pc.company.Insurance$Oid">
+            <field name="insid" primary-key="true"/>
+        </class>
+
+        <class name="MedicalInsurance"
+            identity-type="application"
+            persistence-capable-superclass="org.apache.jdo.tck.pc.company.Insurance"
+        />
+
+        <class name="PartTimeEmployee"
+            identity-type="application"
+            persistence-capable-superclass="org.apache.jdo.tck.pc.company.Employee"
+        />
+
+        <class name="Person"
+            identity-type="application"
+            objectid-class="org.apache.jdo.tck.pc.company.Person$Oid">
+            <field name="personid" primary-key="true"/>
+            <field name="middlename" default-fetch-group="false"/>
+            <field name="address" embedded="true"/>
+	    <field name="phoneNumbers" persistence-modifier="persistent">
+                <map key-type="String" value-type="String"/>
+            </field>
+        </class>
+
+        <class name="Project"
+            identity-type="application"
+            objectid-class="org.apache.jdo.tck.pc.company.Project$Oid">
+            <field name="projid" primary-key="true"/>
+            <field name="reviewers" persistence-modifier="persistent">
+                <collection element-type="org.apache.jdo.tck.pc.company.Employee"/>
+            </field>
+            <field name="members" persistence-modifier="persistent">
+                <collection element-type="org.apache.jdo.tck.pc.company.Employee"/>
+            </field>
+        </class>
+    </package>
+</jdo>

Propchange: incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/company/package.jdo
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/AllTypes.jdo
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/AllTypes.jdo?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/AllTypes.jdo (added)
+++ incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/AllTypes.jdo Mon Apr  4 12:41:23 2005
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE jdo PUBLIC "-//Sun Microsystems, Inc.//DTD Java Data Objects Metadata 2.0//EN" "http://java.sun.com/dtd/jdo_2_0.dtd">
+<jdo>
+    <package name="org.apache.jdo.tck.pc.fieldtypes">
+        <class name="AllTypes" identity-type="application"
+            objectid-class="org.apache.jdo.tck.pc.fieldtypes.AllTypes$Oid">
+            <field name="id" primary-key="true"/>
+        </class>
+    </package>
+</jdo>

Propchange: incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/AllTypes.jdo
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/ArrayCollections.jdo
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/ArrayCollections.jdo?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/ArrayCollections.jdo (added)
+++ incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/ArrayCollections.jdo Mon Apr  4 12:41:23 2005
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE jdo PUBLIC "-//Sun Microsystems, Inc.//DTD Java Data Objects Metadata 2.0//EN" "http://java.sun.com/dtd/jdo_2_0.dtd">
+<jdo>
+<package name="org.apache.jdo.tck.pc.fieldtypes">
+<class name="ArrayCollections" identity-type="application"
+    objectid-class="org.apache.jdo.tck.pc.fieldtypes.ArrayCollections$Oid">
+<field name="identifier" primary-key="true"/>
+<field name="ArrayOfObject0" persistence-modifier="persistent">
+<array embedded-element="true">
+</array>
+</field>
+<field name="ArrayOfObject1" persistence-modifier="persistent">
+<array embedded-element="false">
+</array>
+</field>
+<field name="ArrayOfSimpleClass2" >
+<array embedded-element="true">
+</array>
+</field>
+<field name="ArrayOfSimpleClass3" >
+<array embedded-element="false">
+</array>
+</field>
+<field name="ArrayOfSimpleInterface4" persistence-modifier="persistent">
+<array embedded-element="true">
+</array>
+</field>
+<field name="ArrayOfSimpleInterface5" persistence-modifier="persistent">
+<array embedded-element="false">
+</array>
+</field>
+<field name="ArrayOfString6" >
+<array embedded-element="true">
+</array>
+</field>
+<field name="ArrayOfString7" >
+<array embedded-element="false">
+</array>
+</field>
+<field name="ArrayOfDate8" >
+<array embedded-element="true">
+</array>
+</field>
+<field name="ArrayOfDate9" >
+<array embedded-element="false">
+</array>
+</field>
+<field name="ArrayOfLocale10" >
+<array embedded-element="true">
+</array>
+</field>
+<field name="ArrayOfLocale11" >
+<array embedded-element="false">
+</array>
+</field>
+<field name="ArrayOfBigDecimal12" >
+<array embedded-element="true">
+</array>
+</field>
+<field name="ArrayOfBigDecimal13" >
+<array embedded-element="false">
+</array>
+</field>
+<field name="ArrayOfBigInteger14" >
+<array embedded-element="true">
+</array>
+</field>
+<field name="ArrayOfBigInteger15" >
+<array embedded-element="false">
+</array>
+</field>
+<field name="ArrayOfByte16" >
+<array embedded-element="true">
+</array>
+</field>
+<field name="ArrayOfByte17" >
+<array embedded-element="false">
+</array>
+</field>
+<field name="ArrayOfDouble18" >
+<array embedded-element="true">
+</array>
+</field>
+<field name="ArrayOfDouble19" >
+<array embedded-element="false">
+</array>
+</field>
+<field name="ArrayOfFloat20" >
+<array embedded-element="true">
+</array>
+</field>
+<field name="ArrayOfFloat21" >
+<array embedded-element="false">
+</array>
+</field>
+<field name="ArrayOfInteger22" >
+<array embedded-element="true">
+</array>
+</field>
+<field name="ArrayOfInteger23" >
+<array embedded-element="false">
+</array>
+</field>
+<field name="ArrayOfLong24" >
+<array embedded-element="true">
+</array>
+</field>
+<field name="ArrayOfLong25" >
+<array embedded-element="false">
+</array>
+</field>
+<field name="ArrayOfShort26" >
+<array embedded-element="true">
+</array>
+</field>
+<field name="ArrayOfShort27" >
+<array embedded-element="false">
+</array>
+</field>
+</class>
+</package>
+</jdo>

Propchange: incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/ArrayCollections.jdo
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/ArrayListCollections.jdo
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/ArrayListCollections.jdo?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/ArrayListCollections.jdo (added)
+++ incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/ArrayListCollections.jdo Mon Apr  4 12:41:23 2005
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE jdo PUBLIC "-//Sun Microsystems, Inc.//DTD Java Data Objects Metadata 2.0//EN" "http://java.sun.com/dtd/jdo_2_0.dtd">
+<jdo>
+<package name="org.apache.jdo.tck.pc.fieldtypes">
+<class name="ArrayListCollections" identity-type="application"
+    objectid-class="org.apache.jdo.tck.pc.fieldtypes.ArrayListCollections$Oid">
+<field name="identifier" primary-key="true"/>
+<field name="ArrayListOfObject0" >
+<collection element-type="java.lang.Object">
+</collection>
+</field>
+<field name="ArrayListOfObject1" >
+<collection element-type="java.lang.Object" embedded-element="true">
+</collection>
+</field>
+<field name="ArrayListOfObject2" >
+<collection element-type="java.lang.Object" embedded-element="false">
+</collection>
+</field>
+<field name="ArrayListOfSimpleClass3" >
+<collection element-type="org.apache.jdo.tck.pc.fieldtypes.SimpleClass">
+</collection>
+</field>
+<field name="ArrayListOfSimpleClass4" >
+<collection element-type="org.apache.jdo.tck.pc.fieldtypes.SimpleClass" embedded-element="true">
+</collection>
+</field>
+<field name="ArrayListOfSimpleClass5" >
+<collection element-type="org.apache.jdo.tck.pc.fieldtypes.SimpleClass" embedded-element="false">
+</collection>
+</field>
+<field name="ArrayListOfSimpleInterface6" >
+<collection element-type="org.apache.jdo.tck.pc.fieldtypes.SimpleInterface">
+</collection>
+</field>
+<field name="ArrayListOfSimpleInterface7" >
+<collection element-type="org.apache.jdo.tck.pc.fieldtypes.SimpleInterface" embedded-element="true">
+</collection>
+</field>
+<field name="ArrayListOfSimpleInterface8" >
+<collection element-type="org.apache.jdo.tck.pc.fieldtypes.SimpleInterface" embedded-element="false">
+</collection>
+</field>
+<field name="ArrayListOfString9" >
+<collection element-type="java.lang.String">
+</collection>
+</field>
+<field name="ArrayListOfString10" >
+<collection element-type="java.lang.String" embedded-element="true">
+</collection>
+</field>
+<field name="ArrayListOfString11" >
+<collection element-type="java.lang.String" embedded-element="false">
+</collection>
+</field>
+<field name="ArrayListOfDate12" >
+<collection element-type="java.util.Date">
+</collection>
+</field>
+<field name="ArrayListOfDate13" >
+<collection element-type="java.util.Date" embedded-element="true">
+</collection>
+</field>
+<field name="ArrayListOfDate14" >
+<collection element-type="java.util.Date" embedded-element="false">
+</collection>
+</field>
+<field name="ArrayListOfLocale15" >
+<collection element-type="java.util.Locale">
+</collection>
+</field>
+<field name="ArrayListOfLocale16" >
+<collection element-type="java.util.Locale" embedded-element="true">
+</collection>
+</field>
+<field name="ArrayListOfLocale17" >
+<collection element-type="java.util.Locale" embedded-element="false">
+</collection>
+</field>
+<field name="ArrayListOfBigDecimal18" >
+<collection element-type="java.math.BigDecimal">
+</collection>
+</field>
+<field name="ArrayListOfBigDecimal19" >
+<collection element-type="java.math.BigDecimal" embedded-element="true">
+</collection>
+</field>
+<field name="ArrayListOfBigDecimal20" >
+<collection element-type="java.math.BigDecimal" embedded-element="false">
+</collection>
+</field>
+<field name="ArrayListOfBigInteger21" >
+<collection element-type="java.math.BigInteger">
+</collection>
+</field>
+<field name="ArrayListOfBigInteger22" >
+<collection element-type="java.math.BigInteger" embedded-element="true">
+</collection>
+</field>
+<field name="ArrayListOfBigInteger23" >
+<collection element-type="java.math.BigInteger" embedded-element="false">
+</collection>
+</field>
+<field name="ArrayListOfByte24" >
+<collection element-type="java.lang.Byte">
+</collection>
+</field>
+<field name="ArrayListOfByte25" >
+<collection element-type="java.lang.Byte" embedded-element="true">
+</collection>
+</field>
+<field name="ArrayListOfByte26" >
+<collection element-type="java.lang.Byte" embedded-element="false">
+</collection>
+</field>
+<field name="ArrayListOfDouble27" >
+<collection element-type="java.lang.Double">
+</collection>
+</field>
+<field name="ArrayListOfDouble28" >
+<collection element-type="java.lang.Double" embedded-element="true">
+</collection>
+</field>
+<field name="ArrayListOfDouble29" >
+<collection element-type="java.lang.Double" embedded-element="false">
+</collection>
+</field>
+<field name="ArrayListOfFloat30" >
+<collection element-type="java.lang.Float">
+</collection>
+</field>
+<field name="ArrayListOfFloat31" >
+<collection element-type="java.lang.Float" embedded-element="true">
+</collection>
+</field>
+<field name="ArrayListOfFloat32" >
+<collection element-type="java.lang.Float" embedded-element="false">
+</collection>
+</field>
+<field name="ArrayListOfInteger33" >
+<collection element-type="java.lang.Integer">
+</collection>
+</field>
+<field name="ArrayListOfInteger34" >
+<collection element-type="java.lang.Integer" embedded-element="true">
+</collection>
+</field>
+<field name="ArrayListOfInteger35" >
+<collection element-type="java.lang.Integer" embedded-element="false">
+</collection>
+</field>
+<field name="ArrayListOfLong36" >
+<collection element-type="java.lang.Long">
+</collection>
+</field>
+<field name="ArrayListOfLong37" >
+<collection element-type="java.lang.Long" embedded-element="true">
+</collection>
+</field>
+<field name="ArrayListOfLong38" >
+<collection element-type="java.lang.Long" embedded-element="false">
+</collection>
+</field>
+<field name="ArrayListOfShort39" >
+<collection element-type="java.lang.Short">
+</collection>
+</field>
+<field name="ArrayListOfShort40" >
+<collection element-type="java.lang.Short" embedded-element="true">
+</collection>
+</field>
+<field name="ArrayListOfShort41" >
+<collection element-type="java.lang.Short" embedded-element="false">
+</collection>
+</field>
+</class>
+</package>
+</jdo>

Propchange: incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/ArrayListCollections.jdo
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/CollectionCollections.jdo
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/CollectionCollections.jdo?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/CollectionCollections.jdo (added)
+++ incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/CollectionCollections.jdo Mon Apr  4 12:41:23 2005
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE jdo PUBLIC "-//Sun Microsystems, Inc.//DTD Java Data Objects Metadata 2.0//EN" "http://java.sun.com/dtd/jdo_2_0.dtd">
+<jdo>
+<package name="org.apache.jdo.tck.pc.fieldtypes">
+<class name="CollectionCollections" identity-type="application"
+    objectid-class="org.apache.jdo.tck.pc.fieldtypes.CollectionCollections$Oid">
+<field name="identifier" primary-key="true"/>
+<field name="CollectionOfObject0" >
+<collection element-type="java.lang.Object">
+</collection>
+</field>
+<field name="CollectionOfObject1" >
+<collection element-type="java.lang.Object" embedded-element="true">
+</collection>
+</field>
+<field name="CollectionOfObject2" >
+<collection element-type="java.lang.Object" embedded-element="false">
+</collection>
+</field>
+<field name="CollectionOfSimpleClass3" >
+<collection element-type="org.apache.jdo.tck.pc.fieldtypes.SimpleClass">
+</collection>
+</field>
+<field name="CollectionOfSimpleClass4" >
+<collection element-type="org.apache.jdo.tck.pc.fieldtypes.SimpleClass" embedded-element="true">
+</collection>
+</field>
+<field name="CollectionOfSimpleClass5" >
+<collection element-type="org.apache.jdo.tck.pc.fieldtypes.SimpleClass" embedded-element="false">
+</collection>
+</field>
+<field name="CollectionOfSimpleInterface6" >
+<collection element-type="org.apache.jdo.tck.pc.fieldtypes.SimpleInterface">
+</collection>
+</field>
+<field name="CollectionOfSimpleInterface7" >
+<collection element-type="org.apache.jdo.tck.pc.fieldtypes.SimpleInterface" embedded-element="true">
+</collection>
+</field>
+<field name="CollectionOfSimpleInterface8" >
+<collection element-type="org.apache.jdo.tck.pc.fieldtypes.SimpleInterface" embedded-element="false">
+</collection>
+</field>
+<field name="CollectionOfString9" >
+<collection element-type="java.lang.String">
+</collection>
+</field>
+<field name="CollectionOfString10" >
+<collection element-type="java.lang.String" embedded-element="true">
+</collection>
+</field>
+<field name="CollectionOfString11" >
+<collection element-type="java.lang.String" embedded-element="false">
+</collection>
+</field>
+<field name="CollectionOfDate12" >
+<collection element-type="java.util.Date">
+</collection>
+</field>
+<field name="CollectionOfDate13" >
+<collection element-type="java.util.Date" embedded-element="true">
+</collection>
+</field>
+<field name="CollectionOfDate14" >
+<collection element-type="java.util.Date" embedded-element="false">
+</collection>
+</field>
+<field name="CollectionOfLocale15" >
+<collection element-type="java.util.Locale">
+</collection>
+</field>
+<field name="CollectionOfLocale16" >
+<collection element-type="java.util.Locale" embedded-element="true">
+</collection>
+</field>
+<field name="CollectionOfLocale17" >
+<collection element-type="java.util.Locale" embedded-element="false">
+</collection>
+</field>
+<field name="CollectionOfBigDecimal18" >
+<collection element-type="java.math.BigDecimal">
+</collection>
+</field>
+<field name="CollectionOfBigDecimal19" >
+<collection element-type="java.math.BigDecimal" embedded-element="true">
+</collection>
+</field>
+<field name="CollectionOfBigDecimal20" >
+<collection element-type="java.math.BigDecimal" embedded-element="false">
+</collection>
+</field>
+<field name="CollectionOfBigInteger21" >
+<collection element-type="java.math.BigInteger">
+</collection>
+</field>
+<field name="CollectionOfBigInteger22" >
+<collection element-type="java.math.BigInteger" embedded-element="true">
+</collection>
+</field>
+<field name="CollectionOfBigInteger23" >
+<collection element-type="java.math.BigInteger" embedded-element="false">
+</collection>
+</field>
+<field name="CollectionOfByte24" >
+<collection element-type="java.lang.Byte">
+</collection>
+</field>
+<field name="CollectionOfByte25" >
+<collection element-type="java.lang.Byte" embedded-element="true">
+</collection>
+</field>
+<field name="CollectionOfByte26" >
+<collection element-type="java.lang.Byte" embedded-element="false">
+</collection>
+</field>
+<field name="CollectionOfDouble27" >
+<collection element-type="java.lang.Double">
+</collection>
+</field>
+<field name="CollectionOfDouble28" >
+<collection element-type="java.lang.Double" embedded-element="true">
+</collection>
+</field>
+<field name="CollectionOfDouble29" >
+<collection element-type="java.lang.Double" embedded-element="false">
+</collection>
+</field>
+<field name="CollectionOfFloat30" >
+<collection element-type="java.lang.Float">
+</collection>
+</field>
+<field name="CollectionOfFloat31" >
+<collection element-type="java.lang.Float" embedded-element="true">
+</collection>
+</field>
+<field name="CollectionOfFloat32" >
+<collection element-type="java.lang.Float" embedded-element="false">
+</collection>
+</field>
+<field name="CollectionOfInteger33" >
+<collection element-type="java.lang.Integer">
+</collection>
+</field>
+<field name="CollectionOfInteger34" >
+<collection element-type="java.lang.Integer" embedded-element="true">
+</collection>
+</field>
+<field name="CollectionOfInteger35" >
+<collection element-type="java.lang.Integer" embedded-element="false">
+</collection>
+</field>
+<field name="CollectionOfLong36" >
+<collection element-type="java.lang.Long">
+</collection>
+</field>
+<field name="CollectionOfLong37" >
+<collection element-type="java.lang.Long" embedded-element="true">
+</collection>
+</field>
+<field name="CollectionOfLong38" >
+<collection element-type="java.lang.Long" embedded-element="false">
+</collection>
+</field>
+<field name="CollectionOfShort39" >
+<collection element-type="java.lang.Short">
+</collection>
+</field>
+<field name="CollectionOfShort40" >
+<collection element-type="java.lang.Short" embedded-element="true">
+</collection>
+</field>
+<field name="CollectionOfShort41" >
+<collection element-type="java.lang.Short" embedded-element="false">
+</collection>
+</field>
+</class>
+</package>
+</jdo>

Propchange: incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/CollectionCollections.jdo
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/FieldsOfBigDecimal.jdo
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/FieldsOfBigDecimal.jdo?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/FieldsOfBigDecimal.jdo (added)
+++ incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/FieldsOfBigDecimal.jdo Mon Apr  4 12:41:23 2005
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE jdo PUBLIC "-//Sun Microsystems, Inc.//DTD Java Data Objects Metadata 2.0//EN" "http://java.sun.com/dtd/jdo_2_0.dtd">
+<jdo>
+<package name="org.apache.jdo.tck.pc.fieldtypes">
+<class name="FieldsOfBigDecimal" identity-type="application"
+    objectid-class="org.apache.jdo.tck.pc.fieldtypes.FieldsOfBigDecimal$Oid">
+<field name="identifier" primary-key="true"/>
+<field name="BigDecimal1"  embedded="true">
+</field>
+<field name="BigDecimal2"  embedded="false">
+</field>
+<field name="BigDecimal3" persistence-modifier="none" >
+</field>
+<field name="BigDecimal4" persistence-modifier="persistent" >
+</field>
+<field name="BigDecimal5" persistence-modifier="persistent" embedded="true">
+</field>
+<field name="BigDecimal6" persistence-modifier="persistent" embedded="false">
+</field>
+<field name="BigDecimal7" persistence-modifier="transactional" >
+</field>
+<field name="BigDecimal10" persistence-modifier="none" >
+</field>
+<field name="BigDecimal11" persistence-modifier="persistent" >
+</field>
+<field name="BigDecimal12" persistence-modifier="persistent" embedded="true">
+</field>
+<field name="BigDecimal13" persistence-modifier="persistent" embedded="false">
+</field>
+<field name="BigDecimal14" persistence-modifier="transactional" >
+</field>
+<field name="BigDecimal17"  embedded="true">
+</field>
+<field name="BigDecimal18"  embedded="false">
+</field>
+<field name="BigDecimal19" persistence-modifier="none" >
+</field>
+<field name="BigDecimal20" persistence-modifier="persistent" >
+</field>
+<field name="BigDecimal21" persistence-modifier="persistent" embedded="true">
+</field>
+<field name="BigDecimal22" persistence-modifier="persistent" embedded="false">
+</field>
+<field name="BigDecimal23" persistence-modifier="transactional" >
+</field>
+<field name="BigDecimal29" persistence-modifier="none" >
+</field>
+<field name="BigDecimal30" persistence-modifier="persistent" >
+</field>
+<field name="BigDecimal31" persistence-modifier="persistent" embedded="true">
+</field>
+<field name="BigDecimal32" persistence-modifier="persistent" embedded="false">
+</field>
+<field name="BigDecimal33" persistence-modifier="transactional" >
+</field>
+<field name="BigDecimal37"  embedded="true">
+</field>
+<field name="BigDecimal38"  embedded="false">
+</field>
+<field name="BigDecimal39" persistence-modifier="none" >
+</field>
+<field name="BigDecimal40" persistence-modifier="persistent" >
+</field>
+<field name="BigDecimal41" persistence-modifier="persistent" embedded="true">
+</field>
+<field name="BigDecimal42" persistence-modifier="persistent" embedded="false">
+</field>
+<field name="BigDecimal43" persistence-modifier="transactional" >
+</field>
+<field name="BigDecimal46" persistence-modifier="none" >
+</field>
+<field name="BigDecimal47" persistence-modifier="persistent" >
+</field>
+<field name="BigDecimal48" persistence-modifier="persistent" embedded="true">
+</field>
+<field name="BigDecimal49" persistence-modifier="persistent" embedded="false">
+</field>
+<field name="BigDecimal50" persistence-modifier="transactional" >
+</field>
+<field name="BigDecimal53"  embedded="true">
+</field>
+<field name="BigDecimal54"  embedded="false">
+</field>
+<field name="BigDecimal55" persistence-modifier="none" >
+</field>
+<field name="BigDecimal56" persistence-modifier="persistent" >
+</field>
+<field name="BigDecimal57" persistence-modifier="persistent" embedded="true">
+</field>
+<field name="BigDecimal58" persistence-modifier="persistent" embedded="false">
+</field>
+<field name="BigDecimal59" persistence-modifier="transactional" >
+</field>
+<field name="BigDecimal65" persistence-modifier="none" >
+</field>
+<field name="BigDecimal66" persistence-modifier="persistent" >
+</field>
+<field name="BigDecimal67" persistence-modifier="persistent" embedded="true">
+</field>
+<field name="BigDecimal68" persistence-modifier="persistent" embedded="false">
+</field>
+<field name="BigDecimal69" persistence-modifier="transactional" >
+</field>
+<field name="BigDecimal73"  embedded="true">
+</field>
+<field name="BigDecimal74"  embedded="false">
+</field>
+<field name="BigDecimal75" persistence-modifier="none" >
+</field>
+<field name="BigDecimal76" persistence-modifier="persistent" >
+</field>
+<field name="BigDecimal77" persistence-modifier="persistent" embedded="true">
+</field>
+<field name="BigDecimal78" persistence-modifier="persistent" embedded="false">
+</field>
+<field name="BigDecimal79" persistence-modifier="transactional" >
+</field>
+<field name="BigDecimal82" persistence-modifier="none" >
+</field>
+<field name="BigDecimal83" persistence-modifier="persistent" >
+</field>
+<field name="BigDecimal84" persistence-modifier="persistent" embedded="true">
+</field>
+<field name="BigDecimal85" persistence-modifier="persistent" embedded="false">
+</field>
+<field name="BigDecimal86" persistence-modifier="transactional" >
+</field>
+<field name="BigDecimal89"  embedded="true">
+</field>
+<field name="BigDecimal90"  embedded="false">
+</field>
+<field name="BigDecimal91" persistence-modifier="none" >
+</field>
+<field name="BigDecimal92" persistence-modifier="persistent" >
+</field>
+<field name="BigDecimal93" persistence-modifier="persistent" embedded="true">
+</field>
+<field name="BigDecimal94" persistence-modifier="persistent" embedded="false">
+</field>
+<field name="BigDecimal95" persistence-modifier="transactional" >
+</field>
+<field name="BigDecimal101" persistence-modifier="none" >
+</field>
+<field name="BigDecimal102" persistence-modifier="persistent" >
+</field>
+<field name="BigDecimal103" persistence-modifier="persistent" embedded="true">
+</field>
+<field name="BigDecimal104" persistence-modifier="persistent" embedded="false">
+</field>
+<field name="BigDecimal105" persistence-modifier="transactional" >
+</field>
+<field name="BigDecimal109"  embedded="true">
+</field>
+<field name="BigDecimal110"  embedded="false">
+</field>
+<field name="BigDecimal111" persistence-modifier="none" >
+</field>
+<field name="BigDecimal112" persistence-modifier="persistent" >
+</field>
+<field name="BigDecimal113" persistence-modifier="persistent" embedded="true">
+</field>
+<field name="BigDecimal114" persistence-modifier="persistent" embedded="false">
+</field>
+<field name="BigDecimal115" persistence-modifier="transactional" >
+</field>
+<field name="BigDecimal118" persistence-modifier="none" >
+</field>
+<field name="BigDecimal119" persistence-modifier="persistent" >
+</field>
+<field name="BigDecimal120" persistence-modifier="persistent" embedded="true">
+</field>
+<field name="BigDecimal121" persistence-modifier="persistent" embedded="false">
+</field>
+<field name="BigDecimal122" persistence-modifier="transactional" >
+</field>
+<field name="BigDecimal125"  embedded="true">
+</field>
+<field name="BigDecimal126"  embedded="false">
+</field>
+<field name="BigDecimal127" persistence-modifier="none" >
+</field>
+<field name="BigDecimal128" persistence-modifier="persistent" >
+</field>
+<field name="BigDecimal129" persistence-modifier="persistent" embedded="true">
+</field>
+<field name="BigDecimal130" persistence-modifier="persistent" embedded="false">
+</field>
+<field name="BigDecimal131" persistence-modifier="transactional" >
+</field>
+<field name="BigDecimal137" persistence-modifier="none" >
+</field>
+<field name="BigDecimal138" persistence-modifier="persistent" >
+</field>
+<field name="BigDecimal139" persistence-modifier="persistent" embedded="true">
+</field>
+<field name="BigDecimal140" persistence-modifier="persistent" embedded="false">
+</field>
+<field name="BigDecimal141" persistence-modifier="transactional" >
+</field>
+</class>
+</package>
+</jdo>

Propchange: incubator/jdo/trunk/tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/FieldsOfBigDecimal.jdo
------------------------------------------------------------------------------
    svn:executable = *



Mime
View raw message