You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by am...@apache.org on 2007/12/01 19:12:19 UTC

svn commit: r600176 - in /cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba: ./ db2/ frontbase/ hsqldb/ ingres/ mysql/ oracle/ postgres/ sqlite/ sqlserver/ sybase/

Author: amaniatis
Date: Sat Dec  1 10:12:18 2007
New Revision: 600176

URL: http://svn.apache.org/viewvc?rev=600176&view=rev
Log:
Generics and cleanup of dba package.

Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/TypesMapping.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/db2/DB2PkGenerator.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBasePkGenerator.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBAdapter.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/ingres/IngresPkGenerator.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresPkGenerator.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteCalendarType.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerBatchAction.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerProcedureAction.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/sybase/SybasePkGenerator.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/TypesMapping.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/TypesMapping.java?rev=600176&r1=600175&r2=600176&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/TypesMapping.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/TypesMapping.java Sat Dec  1 10:12:18 2007
@@ -28,10 +28,8 @@
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import org.apache.cayenne.util.Util;
 
@@ -99,22 +97,22 @@
     /**
      * Keys: SQL string type names, Values: SQL int type definitions from java.sql.Types
      */
-    private static final Map sqlStringType = new HashMap();
+    private static final Map<String, Integer> sqlStringType = new HashMap<String, Integer>();
 
     /**
      * Keys: SQL int type definitions from java.sql.Types, Values: SQL string type names
      */
-    private static final Map sqlEnumType = new HashMap();
+    private static final Map<Integer, String> sqlEnumType = new HashMap<Integer, String>();
 
     /**
      * Keys: SQL int type definitions from java.sql.Types, Values: java class names
      */
-    private static final Map sqlEnumJava = new HashMap();
+    private static final Map<Integer, String> sqlEnumJava = new HashMap<Integer, String>();
 
     /**
      * Keys: java class names, Values: SQL int type definitions from java.sql.Types
      */
-    private static final Map javaSqlEnum = new HashMap();
+    private static final Map<String, Integer> javaSqlEnum = new HashMap<String, Integer>();
 
     static {
         sqlStringType.put(SQL_ARRAY, new Integer(Types.ARRAY));
@@ -261,16 +259,7 @@
 
     /** Returns an array of string names of the default JDBC data types. */
     public static String[] getDatabaseTypes() {
-        Set keys = sqlStringType.keySet();
-        int len = keys.size();
-        String[] types = new String[len];
-
-        Iterator it = keys.iterator();
-        for (int i = 0; i < len; i++) {
-            types[i] = (String) it.next();
-        }
-
-        return types;
+        return sqlStringType.keySet().toArray(new String[0]);
     }
 
     /**
@@ -304,7 +293,7 @@
             }
         }
 
-        List list = new ArrayList();
+        List<TypeInfo> list = new ArrayList<TypeInfo>();
         for (int i = 0; i < len; i++) {
             if (maxPrec == alts[i].precision) {
                 list.add(alts[i]);
@@ -314,32 +303,32 @@
         // work with smaller list now.....
         int slen = list.size();
         if (slen == 1)
-            return ((TypeInfo) list.get(0)).name;
+            return (list.get(0)).name;
 
         // start/end match
         for (int i = 0; i < slen; i++) {
-            String uppercase = ((TypeInfo) list.get(i)).name.toUpperCase();
+            String uppercase = (list.get(i)).name.toUpperCase();
             if (uppercase.startsWith(jdbcName) || uppercase.endsWith(jdbcName))
-                return ((TypeInfo) list.get(i)).name;
+                return (list.get(i)).name;
         }
 
         // in the middle match
         for (int i = 0; i < slen; i++) {
-            String uppercase = ((TypeInfo) list.get(i)).name.toUpperCase();
+            String uppercase = (list.get(i)).name.toUpperCase();
 
             if (uppercase.indexOf(jdbcName) >= 0)
-                return ((TypeInfo) list.get(i)).name;
+                return (list.get(i)).name;
         }
 
         // out of ideas... return the first one
-        return ((TypeInfo) list.get(0)).name;
+        return (list.get(0)).name;
     }
 
     /**
      * Returns a JDBC int type for SQL typem name.
      */
     public static int getSqlTypeByName(String typeName) {
-        Integer tmp = (Integer) sqlStringType.get(typeName);
+        Integer tmp = sqlStringType.get(typeName);
         return (null == tmp) ? NOT_DEFINED : tmp.intValue();
     }
 
@@ -347,7 +336,7 @@
      * Returns a String representation of the SQL type from its JDBC code.
      */
     public static String getSqlNameByType(int type) {
-        return (String) sqlEnumType.get(new Integer(type));
+        return sqlEnumType.get(new Integer(type));
     }
 
     /**
@@ -361,14 +350,14 @@
             return NOT_DEFINED;
         }
 
-        Integer type = (Integer) javaSqlEnum.get(className);
+        Integer type = javaSqlEnum.get(className);
         if (type != null) {
             return type.intValue();
         }
 
         // try to load a Java class - some nonstandard mappings may work
 
-        Class aClass;
+        Class<?> aClass;
         try {
             aClass = Util.getJavaClass(className);
         }
@@ -384,13 +373,13 @@
      * 
      * @since 1.1
      */
-    public static int getSqlTypeByJava(Class javaClass) {
+    public static int getSqlTypeByJava(Class<?> javaClass) {
         if (javaClass == null) {
             return NOT_DEFINED;
         }
 
         // check standard mapping of class and superclasses
-        Class aClass = javaClass;
+        Class<?> aClass = javaClass;
         while (aClass != null) {
 
             String name;
@@ -413,7 +402,7 @@
         // check non-standard JDBC types that are still supported by JPA
         if (javaClass.isArray()) {
 
-            Class elementType = javaClass.getComponentType();
+            Class<?> elementType = javaClass.getComponentType();
             if (Character.class.isAssignableFrom(elementType)
                     || Character.TYPE.isAssignableFrom(elementType)) {
                 return Types.VARCHAR;
@@ -445,7 +434,7 @@
      * @return Fully qualified Java type name or null if not found.
      */
     public static String getJavaBySqlType(int type) {
-        return (String) sqlEnumJava.get(new Integer(type));
+        return sqlEnumJava.get(new Integer(type));
     }
 
     /**
@@ -458,14 +447,14 @@
         if (type == Types.NUMERIC && precision == 0) {
             type = Types.INTEGER;
         }
-        return (String) sqlEnumJava.get(new Integer(type));
+        return sqlEnumJava.get(new Integer(type));
     }
 
     // *************************************************************
     // non-static code
     // *************************************************************
 
-    protected Map databaseTypes = new HashMap();
+    protected Map<Integer, List<TypeInfo>> databaseTypes = new HashMap<Integer, List<TypeInfo>>();
 
     public TypesMapping(DatabaseMetaData metaData) throws SQLException {
         // map database types to standard JDBC types
@@ -479,10 +468,10 @@
                 info.precision = rs.getLong("PRECISION");
 
                 Integer key = new Integer(info.jdbcType);
-                List infos = (List) databaseTypes.get(key);
+                List<TypeInfo> infos = databaseTypes.get(key);
 
                 if (infos == null) {
-                    infos = new ArrayList();
+                    infos = new ArrayList<TypeInfo>();
                     databaseTypes.put(key, infos);
                 }
 
@@ -498,8 +487,8 @@
         // 1. swap TIMESTAMP - DATE
         Integer ts = new Integer(Types.TIMESTAMP);
         Integer dt = new Integer(Types.DATE);
-        List tsInfo = (List) databaseTypes.get(ts);
-        List dtInfo = (List) databaseTypes.get(dt);
+        List<TypeInfo> tsInfo = databaseTypes.get(ts);
+        List<TypeInfo> dtInfo = databaseTypes.get(dt);
 
         if (tsInfo != null && dtInfo == null)
             databaseTypes.put(dt, tsInfo);
@@ -510,8 +499,8 @@
         // 2. Swap CLOB - LONGVARCHAR
         Integer clob = new Integer(Types.CLOB);
         Integer lvc = new Integer(Types.LONGVARCHAR);
-        List clobInfo = (List) databaseTypes.get(clob);
-        List lvcInfo = (List) databaseTypes.get(lvc);
+        List<TypeInfo> clobInfo = databaseTypes.get(clob);
+        List<TypeInfo> lvcInfo = databaseTypes.get(lvc);
 
         if (clobInfo != null && lvcInfo == null)
             databaseTypes.put(lvc, clobInfo);
@@ -522,8 +511,8 @@
         // 2. Swap BLOB - LONGVARBINARY
         Integer blob = new Integer(Types.BLOB);
         Integer lvb = new Integer(Types.LONGVARBINARY);
-        List blobInfo = (List) databaseTypes.get(blob);
-        List lvbInfo = (List) databaseTypes.get(lvb);
+        List<TypeInfo> blobInfo = databaseTypes.get(blob);
+        List<TypeInfo> lvbInfo = databaseTypes.get(lvb);
 
         if (blobInfo != null && lvbInfo == null)
             databaseTypes.put(lvb, blobInfo);

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java?rev=600176&r1=600175&r2=600176&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java Sat Dec  1 10:12:18 2007
@@ -32,6 +32,7 @@
 import org.apache.cayenne.dba.JdbcAdapter;
 import org.apache.cayenne.dba.PkGenerator;
 import org.apache.cayenne.dba.TypesMapping;
+import org.apache.cayenne.map.Attribute;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
 
@@ -82,7 +83,7 @@
         buf.append("CREATE TABLE ").append(ent.getFullyQualifiedName()).append(" (");
 
         // columns
-        Iterator it = ent.getAttributes().iterator();
+        Iterator<Attribute> it = ent.getAttributes().iterator();
         boolean first = true;
         while (it.hasNext()) {
             if (first) {
@@ -143,7 +144,7 @@
         }
 
         // primary key clause
-        Iterator pkit = ent.getPrimaryKeys().iterator();
+        Iterator<DbAttribute> pkit = ent.getPrimaryKeys().iterator();
         if (pkit.hasNext()) {
             if (first)
                 first = false;
@@ -158,7 +159,7 @@
                 else
                     buf.append(", ");
 
-                DbAttribute at = (DbAttribute) pkit.next();
+                DbAttribute at = pkit.next();
                 buf.append(at.getName());
             }
             buf.append(')');

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/db2/DB2PkGenerator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/db2/DB2PkGenerator.java?rev=600176&r1=600175&r2=600176&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/db2/DB2PkGenerator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/db2/DB2PkGenerator.java Sat Dec  1 10:12:18 2007
@@ -25,7 +25,6 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Iterator;
 import java.util.List;
 
 import org.apache.cayenne.CayenneRuntimeException;
@@ -82,12 +81,9 @@
         }
     }
 
-    public void createAutoPk(DataNode node, List dbEntities) throws Exception {
-        Collection sequences = getExistingSequences(node);
-        Iterator it = dbEntities.iterator();
-
-        while (it.hasNext()) {
-            DbEntity entity = (DbEntity) it.next();
+    public void createAutoPk(DataNode node, List<DbEntity> dbEntities) throws Exception {
+        Collection<String> sequences = getExistingSequences(node);
+       for (DbEntity entity : dbEntities) {
             if (!sequences.contains(sequenceName(entity))) {
                 this.runUpdate(node, createSequenceString(entity));
             }
@@ -97,27 +93,21 @@
     /**
      * Creates a list of CREATE SEQUENCE statements for the list of DbEntities.
      */
-    public List createAutoPkStatements(List dbEntities) {
-        List list = new ArrayList(dbEntities.size());
-        Iterator it = dbEntities.iterator();
-
-        while (it.hasNext()) {
-            DbEntity ent = (DbEntity) it.next();
-            list.add(createSequenceString(ent));
+    public List<String> createAutoPkStatements(List<DbEntity> dbEntities) {
+        List<String> list = new ArrayList<String>(dbEntities.size());
+        for (DbEntity entity : dbEntities) {
+            list.add(createSequenceString(entity));
         }
-
         return list;
     }
 
     /**
      * Drops PK sequences for all specified DbEntities.
      */
-    public void dropAutoPk(DataNode node, List dbEntities) throws Exception {
-        Collection sequences = getExistingSequences(node);
+    public void dropAutoPk(DataNode node, List<DbEntity> dbEntities) throws Exception {
+        Collection<String> sequences = getExistingSequences(node);
 
-        Iterator it = dbEntities.iterator();
-        while (it.hasNext()) {
-            DbEntity ent = (DbEntity) it.next();
+        for (DbEntity ent : dbEntities) {
             if (sequences.contains(sequenceName(ent))) {
                 runUpdate(node, dropSequenceString(ent));
             }
@@ -127,23 +117,18 @@
     /**
      * Creates a list of DROP SEQUENCE statements for the list of DbEntities.
      */
-    public List dropAutoPkStatements(List dbEntities) {
-
-        List list = new ArrayList(dbEntities.size());
-        Iterator it = dbEntities.iterator();
-
-        while (it.hasNext()) {
-            DbEntity entity = (DbEntity) it.next();
+    public List<String> dropAutoPkStatements(List<DbEntity> dbEntities) {
+        List<String> list = new ArrayList<String>(dbEntities.size());
+        for (DbEntity entity : dbEntities) {
             list.add(dropSequenceString(entity));
         }
-
         return list;
     }
 
     /**
      * Fetches a list of existing sequences that might match Cayenne generated ones.
      */
-    protected List getExistingSequences(DataNode node) throws SQLException {
+    protected List<String> getExistingSequences(DataNode node) throws SQLException {
 
         // check existing sequences
         Connection con = node.getDataSource().getConnection();
@@ -159,7 +144,7 @@
                 QueryLogger.logQuery(sql, Collections.EMPTY_LIST);
                 ResultSet rs = sel.executeQuery(sql);
                 try {
-                    List sequenceList = new ArrayList();
+                    List<String> sequenceList = new ArrayList<String>();
                     while (rs.next()) {
                         sequenceList.add(rs.getString(1));
                     }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java?rev=600176&r1=600175&r2=600176&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java Sat Dec  1 10:12:18 2007
@@ -28,6 +28,7 @@
 import org.apache.cayenne.dba.JdbcAdapter;
 import org.apache.cayenne.dba.PkGenerator;
 import org.apache.cayenne.dba.TypesMapping;
+import org.apache.cayenne.map.Attribute;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.query.Query;
@@ -89,7 +90,7 @@
         buf.append("CREATE TABLE ").append(ent.getFullyQualifiedName()).append(" (");
 
         // columns
-        Iterator it = ent.getAttributes().iterator();
+        Iterator<Attribute> it = ent.getAttributes().iterator();
         boolean first = true;
         while (it.hasNext()) {
             if (first) {
@@ -165,7 +166,7 @@
         }
 
         // primary key clause
-        Iterator pkit = ent.getPrimaryKeys().iterator();
+        Iterator<DbAttribute> pkit = ent.getPrimaryKeys().iterator();
         if (pkit.hasNext()) {
             if (first)
                 first = false;
@@ -180,7 +181,7 @@
                 else
                     buf.append(", ");
 
-                DbAttribute at = (DbAttribute) pkit.next();
+                DbAttribute at = pkit.next();
                 buf.append(at.getName());
             }
             buf.append(')');

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBasePkGenerator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBasePkGenerator.java?rev=600176&r1=600175&r2=600176&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBasePkGenerator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/frontbase/FrontBasePkGenerator.java Sat Dec  1 10:12:18 2007
@@ -21,7 +21,6 @@
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -50,35 +49,29 @@
         return 0;
     }
 
-    public void createAutoPk(DataNode node, List dbEntities) throws Exception {
+    public void createAutoPk(DataNode node, List<DbEntity> dbEntities) throws Exception {
         // For each entity (re)set the unique counter
-        Iterator it = dbEntities.iterator();
-        while (it.hasNext()) {
-            DbEntity ent = (DbEntity) it.next();
-            runUpdate(node, pkCreateString(ent.getName()));
+        for (DbEntity entity : dbEntities) {
+            runUpdate(node, pkCreateString(entity.getName()));
         }
     }
 
-    public List createAutoPkStatements(List dbEntities) {
-        List list = new ArrayList();
-
-        Iterator it = dbEntities.iterator();
-        while (it.hasNext()) {
-            DbEntity ent = (DbEntity) it.next();
-            list.add(pkCreateString(ent.getName()));
+    public List<String> createAutoPkStatements(List<DbEntity> dbEntities) {
+        List<String> list = new ArrayList<String>();
+        for (DbEntity entity : dbEntities) {
+            list.add(pkCreateString(entity.getName()));
         }
-
         return list;
     }
 
-    public void dropAutoPk(DataNode node, List dbEntities) throws Exception {
+    public void dropAutoPk(DataNode node, List<DbEntity> dbEntities) throws Exception {
     }
 
     protected String pkTableCreateString() {
         return "";
     }
 
-    protected String pkDeleteString(List dbEntities) {
+    protected String pkDeleteString(List<DbEntity> dbEntities) {
         return "-- The 'Drop Primary Key Support' option is unavailable";
     }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBAdapter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBAdapter.java?rev=600176&r1=600175&r2=600176&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBAdapter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/hsqldb/HSQLDBAdapter.java Sat Dec  1 10:12:18 2007
@@ -47,7 +47,6 @@
  *        test-hsqldb.jdbc.password = secret
  *        test-hsqldb.jdbc.url = jdbc:hsqldb:hsql://serverhostname
  *        test-hsqldb.jdbc.driver = org.hsqldb.jdbcDriver
- *        
  * </pre>
  * 
  * @author Holger Hoffstaette
@@ -97,7 +96,7 @@
      * 
      * @since 1.1
      */
-    public String createUniqueConstraint(DbEntity source, Collection columns) {
+    public String createUniqueConstraint(DbEntity source, Collection<DbAttribute> columns) {
         if (columns == null || columns.isEmpty()) {
             throw new CayenneRuntimeException(
                     "Can't create UNIQUE constraint - no columns specified.");
@@ -117,12 +116,12 @@
         buf.append((long) (System.currentTimeMillis() / (Math.random() * 100000)));
         buf.append(" UNIQUE (");
 
-        Iterator it = columns.iterator();
-        DbAttribute first = (DbAttribute) it.next();
+        Iterator<DbAttribute> it = columns.iterator();
+        DbAttribute first = it.next();
         buf.append(first.getName());
 
         while (it.hasNext()) {
-            DbAttribute next = (DbAttribute) it.next();
+            DbAttribute next = it.next();
             buf.append(", ");
             buf.append(next.getName());
         }
@@ -157,10 +156,8 @@
 
         buf.append(" FOREIGN KEY (");
 
-        Iterator jit = rel.getJoins().iterator();
         boolean first = true;
-        while (jit.hasNext()) {
-            DbJoin join = (DbJoin) jit.next();
+        for (DbJoin join : rel.getJoins()) {
             if (!first) {
                 buf.append(", ");
                 refBuf.append(", ");

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java?rev=600176&r1=600175&r2=600176&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java Sat Dec  1 10:12:18 2007
@@ -29,6 +29,7 @@
 import org.apache.cayenne.dba.JdbcAdapter;
 import org.apache.cayenne.dba.PkGenerator;
 import org.apache.cayenne.dba.TypesMapping;
+import org.apache.cayenne.map.Attribute;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
 
@@ -61,7 +62,7 @@
         buf.append("CREATE TABLE ").append(ent.getFullyQualifiedName()).append(" (");
 
         // columns
-        Iterator it = ent.getAttributes().iterator();
+        Iterator<Attribute> it = ent.getAttributes().iterator();
         boolean first = true;
         while (it.hasNext()) {
             if (first) {
@@ -123,7 +124,7 @@
         }
 
         // primary key clause
-        Iterator pkit = ent.getPrimaryKeys().iterator();
+        Iterator<DbAttribute> pkit = ent.getPrimaryKeys().iterator();
         if (pkit.hasNext()) {
             if (first)
                 first = false;
@@ -138,7 +139,7 @@
                 else
                     buf.append(", ");
 
-                DbAttribute at = (DbAttribute) pkit.next();
+                DbAttribute at = pkit.next();
                 buf.append(at.getName());
             }
             buf.append(')');

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/ingres/IngresPkGenerator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/ingres/IngresPkGenerator.java?rev=600176&r1=600175&r2=600176&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/ingres/IngresPkGenerator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/ingres/IngresPkGenerator.java Sat Dec  1 10:12:18 2007
@@ -88,7 +88,7 @@
         }
     }
 
-    protected List getExistingSequences(DataNode node) throws SQLException {
+    protected List<String> getExistingSequences(DataNode node) throws SQLException {
 
         // check existing sequences
         Connection connection = node.getDataSource().getConnection();
@@ -100,7 +100,7 @@
                 QueryLogger.logQuery(sql, Collections.EMPTY_LIST);
                 ResultSet rs = select.executeQuery(sql);
                 try {
-                    List sequenceList = new ArrayList();
+                    List<String> sequenceList = new ArrayList<String>();
                     while (rs.next()) {
                         String name = rs.getString(1);
                         if(name != null) {

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java?rev=600176&r1=600175&r2=600176&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java Sat Dec  1 10:12:18 2007
@@ -36,6 +36,7 @@
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.DbRelationship;
+import org.apache.cayenne.map.Relationship;
 import org.apache.cayenne.query.Query;
 import org.apache.cayenne.query.SQLAction;
 
@@ -200,10 +201,10 @@
     protected void createTableAppendPKClause(StringBuffer sqlBuffer, DbEntity entity) {
 
         // must move generated to the front...
-        List pkList = new ArrayList(entity.getPrimaryKeys());
+        List<DbAttribute> pkList = new ArrayList<DbAttribute>(entity.getPrimaryKeys());
         Collections.sort(pkList, new PKComparator());
 
-        Iterator pkit = pkList.iterator();
+        Iterator<DbAttribute> pkit = pkList.iterator();
         if (pkit.hasNext()) {
 
             sqlBuffer.append(", PRIMARY KEY (");
@@ -214,7 +215,7 @@
                 else
                     sqlBuffer.append(", ");
 
-                DbAttribute at = (DbAttribute) pkit.next();
+                DbAttribute at = pkit.next();
                 sqlBuffer.append(at.getName());
             }
             sqlBuffer.append(')');
@@ -224,21 +225,20 @@
         // Note that according to MySQL docs, FK indexes are created automatically when
         // constraint is defined, starting at MySQL 4.1.2
         if (supportsFkConstraints()) {
-            Iterator relationships = entity.getRelationships().iterator();
-            while (relationships.hasNext()) {
-                DbRelationship relationship = (DbRelationship) relationships.next();
+            for (Relationship r :  entity.getRelationships()) {
+                DbRelationship relationship = (DbRelationship) r;
                 if (relationship.getJoins().size() > 0
                         && relationship.isToPK()
                         && !relationship.isToDependentPK()) {
 
                     sqlBuffer.append(", KEY (");
 
-                    Iterator columns = relationship.getSourceAttributes().iterator();
-                    DbAttribute column = (DbAttribute) columns.next();
+                    Iterator<DbAttribute> columns = relationship.getSourceAttributes().iterator();
+                    DbAttribute column = columns.next();
                     sqlBuffer.append(column.getName());
 
                     while (columns.hasNext()) {
-                        column = (DbAttribute) columns.next();
+                        column = columns.next();
                         sqlBuffer.append(", ").append(column.getName());
                     }
 
@@ -259,11 +259,9 @@
         }
     }
 
-    final class PKComparator implements Comparator {
+    final class PKComparator implements Comparator<DbAttribute> {
 
-        public int compare(Object o1, Object o2) {
-            DbAttribute a1 = (DbAttribute) o1;
-            DbAttribute a2 = (DbAttribute) o2;
+        public int compare(DbAttribute a1, DbAttribute a2) {
             if (a1.isGenerated() != a2.isGenerated()) {
                 return a1.isGenerated() ? -1 : 1;
             }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java?rev=600176&r1=600175&r2=600176&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java Sat Dec  1 10:12:18 2007
@@ -23,7 +23,6 @@
 import java.lang.reflect.Method;
 import java.sql.PreparedStatement;
 import java.sql.Types;
-import java.util.Iterator;
 import java.util.List;
 
 import org.apache.cayenne.CayenneRuntimeException;
@@ -53,15 +52,11 @@
  * settings to use with Oracle are shown below:
  * 
  * <pre>
- *        
- *         
  *          test-oracle.cayenne.adapter = org.apache.cayenne.dba.oracle.OracleAdapter
  *          test-oracle.jdbc.username = test
  *          test-oracle.jdbc.password = secret
  *          test-oracle.jdbc.url = jdbc:oracle:thin:@//192.168.0.20:1521/ora1 
- *          test-oracle.jdbc.driver = oracle.jdbc.driver.OracleDriver
- *          
- *         
+ *          test-oracle.jdbc.driver = oracle.jdbc.driver.OracleDriver   
  * </pre>
  * 
  * @author Andrus Adamchik
@@ -94,7 +89,7 @@
 
         // configure static information
         try {
-            Class oraTypes = Class.forName("oracle.jdbc.driver.OracleTypes");
+            Class<?> oraTypes = Class.forName("oracle.jdbc.driver.OracleTypes");
             Field cursorField = oraTypes.getField("CURSOR");
             oracleCursorType = cursorField.getInt(null);
 
@@ -136,13 +131,12 @@
             return false;
         }
 
-        List updatedAttributes = (isInsert)
+        List<DbAttribute> updatedAttributes = (isInsert)
                 ? query.getDbAttributes()
                 : ((UpdateBatchQuery) query).getUpdatedAttributes();
 
-        Iterator it = updatedAttributes.iterator();
-        while (it.hasNext()) {
-            int type = ((DbAttribute) it.next()).getType();
+        for (DbAttribute attr : updatedAttributes) {
+            int type = attr.getType();
             if (type == Types.CLOB || type == Types.BLOB) {
                 return true;
             }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java?rev=600176&r1=600175&r2=600176&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java Sat Dec  1 10:12:18 2007
@@ -31,6 +31,7 @@
 import org.apache.cayenne.dba.JdbcAdapter;
 import org.apache.cayenne.dba.PkGenerator;
 import org.apache.cayenne.dba.TypesMapping;
+import org.apache.cayenne.map.Attribute;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.merge.MergerFactory;
@@ -122,7 +123,7 @@
         buf.append("CREATE TABLE ").append(ent.getFullyQualifiedName()).append(" (");
 
         // columns
-        Iterator it = ent.getAttributes().iterator();
+        Iterator<Attribute> it = ent.getAttributes().iterator();
         boolean first = true;
         while (it.hasNext()) {
             if (first) {
@@ -186,7 +187,7 @@
         }
 
         // primary key clause
-        Iterator pkit = ent.getPrimaryKeys().iterator();
+        Iterator<DbAttribute> pkit = ent.getPrimaryKeys().iterator();
         if (pkit.hasNext()) {
             if (first)
                 first = false;
@@ -201,7 +202,7 @@
                 else
                     buf.append(", ");
 
-                DbAttribute at = (DbAttribute) pkit.next();
+                DbAttribute at = pkit.next();
                 buf.append(at.getName());
             }
             buf.append(')');

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresPkGenerator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresPkGenerator.java?rev=600176&r1=600175&r2=600176&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresPkGenerator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/postgres/PostgresPkGenerator.java Sat Dec  1 10:12:18 2007
@@ -103,7 +103,7 @@
     /**
      * Fetches a list of existing sequences that might match Cayenne generated ones.
      */
-    protected List getExistingSequences(DataNode node) throws SQLException {
+    protected List<String> getExistingSequences(DataNode node) throws SQLException {
 
         // check existing sequences
         Connection con = node.getDataSource().getConnection();
@@ -115,7 +115,7 @@
                 QueryLogger.logQuery(sql, Collections.EMPTY_LIST);
                 ResultSet rs = sel.executeQuery(sql);
                 try {
-                    List sequenceList = new ArrayList();
+                    List<String> sequenceList = new ArrayList<String>();
                     while (rs.next()) {
                         sequenceList.add(rs.getString(1));
                     }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteCalendarType.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteCalendarType.java?rev=600176&r1=600175&r2=600176&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteCalendarType.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/sqlite/SQLiteCalendarType.java Sat Dec  1 10:12:18 2007
@@ -21,6 +21,7 @@
 import java.sql.CallableStatement;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.GregorianCalendar;
 
@@ -38,8 +39,8 @@
     protected ExtendedType delegateCalendarType;
     protected ExtendedType delegateDateType;
 
-    public SQLiteCalendarType(Class calendarClass) {
-        this.delegateCalendarType = new CalendarType(calendarClass);
+    public <T extends Calendar> SQLiteCalendarType(Class<T> calendarClass) {
+        this.delegateCalendarType = new CalendarType<T>(calendarClass);
         this.delegateDateType = new SQLiteDateType();
     }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerBatchAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerBatchAction.java?rev=600176&r1=600175&r2=600176&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerBatchAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerBatchAction.java Sat Dec  1 10:12:18 2007
@@ -23,12 +23,12 @@
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.Collections;
-import java.util.Iterator;
 
 import org.apache.cayenne.access.OperationObserver;
 import org.apache.cayenne.access.QueryLogger;
 import org.apache.cayenne.access.jdbc.BatchAction;
 import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.map.Attribute;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.query.BatchQuery;
@@ -107,10 +107,8 @@
         }
 
         // find identity attributes
-        Iterator it = query.getDbEntity().getAttributes().iterator();
-        while (it.hasNext()) {
-            DbAttribute attribute = (DbAttribute) it.next();
-            if (attribute.isGenerated()) {
+        for (Attribute attribute : query.getDbEntity().getAttributes()) {
+            if (((DbAttribute)attribute).isGenerated()) {
                 return true;
             }
         }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerProcedureAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerProcedureAction.java?rev=600176&r1=600175&r2=600176&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerProcedureAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/sqlserver/SQLServerProcedureAction.java Sat Dec  1 10:12:18 2007
@@ -24,9 +24,9 @@
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
+import org.apache.cayenne.DataRow;
 import org.apache.cayenne.access.OperationObserver;
 import org.apache.cayenne.access.QueryLogger;
 import org.apache.cayenne.access.ResultIterator;
@@ -125,8 +125,8 @@
 
     class Observer implements OperationObserver {
 
-        List results;
-        List counts;
+        List<List<DataRow>> results;
+        List<Integer> counts;
         OperationObserver observer;
 
         Observer(OperationObserver observer) {
@@ -135,20 +135,16 @@
 
         void flushResults(Query query) {
             if (results != null) {
-                Iterator it = results.iterator();
-                while (it.hasNext()) {
-                    observer.nextDataRows(query, (List) it.next());
+                for (List<DataRow> result : results) {
+                    observer.nextDataRows(query, result);
                 }
-
                 results = null;
             }
 
             if (counts != null) {
-                Iterator it = counts.iterator();
-                while (it.hasNext()) {
-                    observer.nextCount(query, ((Number) it.next()).intValue());
+                for (Integer count : counts) {
+                    observer.nextCount(query, count);
                 }
-
                 counts = null;
             }
         }
@@ -161,17 +157,17 @@
             // does not delegate to wrapped observer
             // but instead caches results locally.
             if (counts == null) {
-                counts = new ArrayList();
+                counts = new ArrayList<Integer>();
             }
 
             counts.add(new Integer(resultCount));
         }
 
-        public void nextDataRows(Query query, List dataRows) {
+        public void nextDataRows(Query query, List<DataRow> dataRows) {
             // does not delegate to wrapped observer
             // but instead caches results locally.
             if (results == null) {
-                results = new ArrayList();
+                results = new ArrayList<List<DataRow>>();
             }
 
             results.add(dataRows);

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/sybase/SybasePkGenerator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/sybase/SybasePkGenerator.java?rev=600176&r1=600175&r2=600176&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/sybase/SybasePkGenerator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/dba/sybase/SybasePkGenerator.java Sat Dec  1 10:12:18 2007
@@ -78,15 +78,15 @@
      *
      *  @param node node that provides access to a DataSource.
      */
-    public void createAutoPk(DataNode node, List dbEntities) throws Exception {
+    public void createAutoPk(DataNode node, List<DbEntity> dbEntities) throws Exception {
     	super.createAutoPk(node, dbEntities);
     	super.runUpdate(node, safePkProcDrop());
         super.runUpdate(node, unsafePkProcCreate());
     }
     
     
-    public List createAutoPkStatements(List dbEntities) {
-		List list = super.createAutoPkStatements(dbEntities);
+    public List<String> createAutoPkStatements(List<DbEntity> dbEntities) {
+		List<String> list = super.createAutoPkStatements(dbEntities);
 		
 		// add stored procedure drop code
 		list.add(safePkProcDrop());
@@ -118,13 +118,13 @@
      *
      *  @param node node that provides access to a DataSource.
      */
-    public void dropAutoPk(DataNode node, List dbEntities) throws Exception {
+    public void dropAutoPk(DataNode node, List<DbEntity> dbEntities) throws Exception {
         super.runUpdate(node, safePkProcDrop());
         super.runUpdate(node, safePkTableDrop());
     }
     
-    public List dropAutoPkStatements(List dbEntities) {
-		List list = new ArrayList();
+    public List<String> dropAutoPkStatements(List<DbEntity> dbEntities) {
+		List<String> list = new ArrayList<String>();
 		list.add(safePkProcDrop());
 		list.add(safePkTableDrop());
 		return list;