[Mulgara-svn] r1760 - in trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational: . d2rq

pag at mulgara.org pag at mulgara.org
Fri Jul 10 16:37:21 UTC 2009


Author: pag
Date: 2009-07-10 09:37:20 -0700 (Fri, 10 Jul 2009)
New Revision: 1760

Modified:
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/BNodeDesc.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/ColumnDesc.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/LiteralDesc.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/PatternDesc.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RedirectDesc.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalAnswer.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalQuery.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolution.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolver.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolverUnitTest.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalTransformer.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/VariableDesc.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/AdditionalPropertyElem.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/ClassMapElem.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/D2RQDefn.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/DatabaseElem.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/DatatypePropertyBridgeElem.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/Definition.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/ObjectPropertyBridgeElem.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/PropertyBridgeElem.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/TranslationTableElem.java
Log:
Added the getRowExpectedCount method to supplant getRowUpperBound, and removed warnings by adding generics

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/BNodeDesc.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/BNodeDesc.java	2009-07-10 16:35:27 UTC (rev 1759)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/BNodeDesc.java	2009-07-10 16:37:20 UTC (rev 1760)
@@ -41,48 +41,39 @@
  */
 package org.mulgara.resolver.relational;
 
-import java.util.Arrays;
 import java.util.Set;
-import java.util.List;
 import java.util.HashSet;
-import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.Map;
 import java.util.HashMap;
-import java.net.URI;
-import java.net.URISyntaxException;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 
 import org.apache.log4j.Logger;
 import org.jrdf.graph.Node;
-import org.jrdf.graph.URIReference;
-import org.jrdf.graph.Literal;
 
 import org.mulgara.query.TuplesException;
 import org.mulgara.query.rdf.VariableNodeImpl;
 import org.mulgara.resolver.relational.d2rq.ClassMapElem;
-import org.mulgara.resolver.relational.d2rq.DatatypePropertyBridgeElem;
-import org.mulgara.resolver.relational.d2rq.ObjectPropertyBridgeElem;
 
 
 public class BNodeDesc extends VariableDesc {
+  @SuppressWarnings("unused")
   private static Logger logger = Logger.getLogger(RelationalResolver.class);
 
-  private final Set tables;
-  private final Set columns;
+  private final Set<String> tables;
+  private final Set<String> columns;
   private String bnodeClass;
 
-  private Map columnIndices;
+  private Map<String,Integer> columnIndices;
 
   public BNodeDesc(ClassMapElem cmap) {
     super(cmap);
     this.bnodeClass = cmap.klass;
 
     String[] split = cmap.bNodeIdColumns.split("\\s*,\\s*");
-    tables =  new HashSet();
-    columns = new HashSet();
-    columnIndices = new HashMap();
+    tables =  new HashSet<String>();
+    columns = new HashSet<String>();
+    columnIndices = new HashMap<String,Integer>();
 
     for (int i = 0; i < split.length; i++) {
       columns.add(split[i]);
@@ -96,9 +87,8 @@
 
   public Node getNode(ResultSet resultSet) throws SQLException, TuplesException {
     StringBuffer buff = new StringBuffer(bnodeClass);
-    Iterator i = columns.iterator();
-    while (i.hasNext()) {
-      int index = ((Integer)columnIndices.get(i.next())).intValue();
+    for (String c: columns) {
+      int index = columnIndices.get(c).intValue();
       buff.append("|||");
       buff.append(resultSet.getString(index + 1));
     }
@@ -106,11 +96,11 @@
     return new VariableNodeImpl(buff.toString());
   }
 
-  public Set getTables() {
+  public Set<String> getTables() {
     return tables;
   }
 
-  public Set getColumns() {
+  public Set<String> getColumns() {
     return columns;
   }
 

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/ColumnDesc.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/ColumnDesc.java	2009-07-10 16:35:27 UTC (rev 1759)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/ColumnDesc.java	2009-07-10 16:37:20 UTC (rev 1760)
@@ -63,6 +63,7 @@
 import org.mulgara.resolver.relational.d2rq.TranslationTableElem;
 
 public class ColumnDesc extends VariableDesc {
+  @SuppressWarnings("unused")
   private static Logger logger = Logger.getLogger(ColumnDesc.class);
 
   private String column;
@@ -70,7 +71,7 @@
   private int index;
   private TranslationTableElem ttable;
 
-  private Class resourceType;
+  private Class<? extends Node> resourceType;
 
   public ColumnDesc(ClassMapElem classMap) {
     super(classMap);
@@ -132,11 +133,11 @@
     return getColumn() + " = " + encode(getColumn(), value);
   }
 
-  public Set getTables() {
+  public Set<String> getTables() {
     return Collections.singleton(table);
   }
 
-  public Set getColumns() {
+  public Set<String> getColumns() {
     return Collections.singleton(column);
   }
 

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/LiteralDesc.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/LiteralDesc.java	2009-07-10 16:35:27 UTC (rev 1759)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/LiteralDesc.java	2009-07-10 16:37:20 UTC (rev 1760)
@@ -91,12 +91,12 @@
     throw new IllegalStateException("Can't restrict literal");
   }
 
-  public Set getTables() {
-    return Collections.EMPTY_SET;
+  public Set<String> getTables() {
+    return Collections.emptySet();
   }
 
-  public Set getColumns() {
-    return Collections.EMPTY_SET;
+  public Set<String> getColumns() {
+    return Collections.emptySet();
   }
 
   public String getTable() {

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/PatternDesc.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/PatternDesc.java	2009-07-10 16:35:27 UTC (rev 1759)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/PatternDesc.java	2009-07-10 16:37:20 UTC (rev 1760)
@@ -41,7 +41,6 @@
  */
 package org.mulgara.resolver.relational;
 
-import java.util.Arrays;
 import java.util.Set;
 import java.util.List;
 import java.util.HashSet;
@@ -63,24 +62,24 @@
 import org.mulgara.query.rdf.URIReferenceImpl;
 import org.mulgara.query.rdf.LiteralImpl;
 import org.mulgara.resolver.relational.d2rq.ClassMapElem;
-import org.mulgara.resolver.relational.d2rq.D2RQDefn;
 import org.mulgara.resolver.relational.d2rq.DatatypePropertyBridgeElem;
 import org.mulgara.resolver.relational.d2rq.ObjectPropertyBridgeElem;
 import org.mulgara.resolver.relational.d2rq.TranslationTableElem;
 
 
 public class PatternDesc extends VariableDesc {
+  @SuppressWarnings("unused")
   private static Logger logger = Logger.getLogger(PatternDesc.class);
 
-  private Set tables;
-  private Set columns;
+  private Set<String> tables;
+  private Set<String> columns;
 
-  private List pattern; // Order is str : column : str : column : ....
-  private Class anticipClass;
+  private List<String> pattern; // Order is str : column : str : column : ....
+  private Class<? extends Node> anticipClass;
 
   private URI datatype;
   private String lang;
-  private Map columnIndices;
+  private Map<String,Integer> columnIndices;
 
   private TranslationTableElem ttable;
 
@@ -109,7 +108,7 @@
     }
   }
 
-  private void init(String rawPattern, TranslationTableElem ttable, Class anticipatedClass) {
+  private void init(String rawPattern, TranslationTableElem ttable, Class<? extends Node> anticipatedClass) {
     if (rawPattern == null) {
       throw new IllegalArgumentException("Attempt to create PatternDesc with null pattern");
     }
@@ -117,10 +116,10 @@
     this.ttable = ttable;
     anticipClass = anticipatedClass;
     String[] split = rawPattern.split("@@");
-    tables =  new HashSet();
-    columns = new HashSet();
-    pattern = new ArrayList();
-    columnIndices = new HashMap();
+    tables =  new HashSet<String>();
+    columns = new HashSet<String>();
+    pattern = new ArrayList<String>();
+    columnIndices = new HashMap<String,Integer>();
     boolean isColumn = true;
     for (int i = 0; i < split.length; i++) {
       isColumn = !isColumn;  // Note this makes the initial state *false*
@@ -138,15 +137,14 @@
 
   public Node getNode(ResultSet resultSet) throws SQLException, TuplesException {
     StringBuffer buff = new StringBuffer();
-    Iterator i = pattern.iterator();
     boolean isColumn = true;
-    while (i.hasNext()) {
+    for (String p: pattern) {
       isColumn = !isColumn;  // Note this makes the initial state *false*
       if (isColumn) {
-        int index = ((Integer)columnIndices.get(i.next())).intValue();
+        int index = columnIndices.get(p).intValue();
         buff.append(resultSet.getString(index + 1));
       } else {
-        buff.append((String)i.next());
+        buff.append(p);
       }
     }
 
@@ -179,15 +177,17 @@
     }
   }
 
-  public Set getTables() {
+  public Set<String> getTables() {
     return tables;
   }
 
-  public Set getColumns() {
+  public Set<String> getColumns() {
     return columns;
   }
 
-  private class EscapeContinuation extends Exception {}
+  private class EscapeContinuation extends Exception {
+    private static final long serialVersionUID = -7899849917859481249L;
+  }
 
   public String restrict(String rdfValue) {
     // Note: There are two possible approaches to this function.  The first (simpler) approach is to 
@@ -199,9 +199,9 @@
     // independent terms.  The resulting query can therefore be run against indicies where available, 
     // and is amenable to optimisation by the sql engine.
     try {
-      List terms = new ArrayList();
+      List<String> terms = new ArrayList<String>();
       String value = rdfValue;
-      Iterator i = pattern.iterator();
+      Iterator<String> i = pattern.iterator();
       String str = (String)i.next();
       if (!value.startsWith(str)) {
         throw new EscapeContinuation();

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RedirectDesc.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RedirectDesc.java	2009-07-10 16:35:27 UTC (rev 1759)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RedirectDesc.java	2009-07-10 16:37:20 UTC (rev 1760)
@@ -54,14 +54,15 @@
 import org.mulgara.query.TuplesException;
 
 public class RedirectDesc extends VariableDesc {
+  @SuppressWarnings("unused")
   private static Logger logger = Logger.getLogger(RedirectDesc.class);
 
-  private List descs;
+  private List<VariableDesc> descs;
   private int index;
 
   public RedirectDesc(VariableDesc desc) {
     super(desc.defn);
-    this.descs = new ArrayList();
+    this.descs = new ArrayList<VariableDesc>();
   }
 
   /**
@@ -91,11 +92,11 @@
     throw new IllegalStateException("Can't restrict using a RedirectDesc");
   }
 
-  public Set getTables() {
+  public Set<String> getTables() {
     throw new IllegalStateException("RedirectDesc has no tables");
   }
 
-  public Set getColumns() {
+  public Set<String> getColumns() {
     throw new IllegalStateException("RedirectDesc has no columns");
   }
 

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalAnswer.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalAnswer.java	2009-07-10 16:35:27 UTC (rev 1759)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalAnswer.java	2009-07-10 16:37:20 UTC (rev 1760)
@@ -45,28 +45,17 @@
 
 // Standard Java packages.
 import java.sql.Connection;
-import java.util.Arrays;
-import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 import java.util.Iterator;
 import java.sql.ResultSet;
 import java.sql.Statement;
 import java.sql.SQLException;
-import java.net.URI;
-import java.net.URISyntaxException;
 
-import org.jrdf.graph.URIReference;
-import org.jrdf.graph.Literal;
-
 // Local packages
 import org.mulgara.query.Answer;
 import org.mulgara.query.Cursor;
 import org.mulgara.query.TuplesException;
 import org.mulgara.query.Variable;
-import org.mulgara.query.rdf.URIReferenceImpl;
-import org.mulgara.query.rdf.LiteralImpl;
-import org.mulgara.store.tuples.AbstractTuples;
 
 public class RelationalAnswer implements Answer {
   private static Logger logger = Logger.getLogger(RelationalAnswer.class.getName());
@@ -74,10 +63,10 @@
   private Connection conn;
   private Statement statement;
   private ResultSet result;
-  private List variables;
+  private List<Variable> variables;
   private RelationalQuery query;
-  private List queryList;
-  private Iterator queries;
+  private List<String> queryList;
+  private Iterator<String> queries;
 
   public RelationalAnswer(RelationalQuery query, Connection conn) throws TuplesException {
     if (logger.isDebugEnabled()) {
@@ -101,7 +90,7 @@
   }
 
   public Object getObject(int column) throws TuplesException {
-    return getObject((Variable)variables.get(column));
+    return getObject(variables.get(column));
   }
 
   public Object getObject(String columnName) throws TuplesException {
@@ -131,7 +120,7 @@
 
       queries = queryList.iterator();
       if (queries.hasNext()) {
-        result = statement.executeQuery((String)queries.next());
+        result = statement.executeQuery(queries.next());
       }
     } catch (SQLException es) {
       throw new TuplesException("Failed to resolve query '" + query.getQuery() + "'", es);
@@ -162,7 +151,7 @@
   }
 
   public Variable[] getVariables() {
-    return (Variable[])variables.toArray(new Variable[] {});
+    return variables.toArray(new Variable[] {});
   }
 
   public boolean isUnconstrained() {
@@ -178,6 +167,10 @@
     return getRowCount();
   }
 
+  public long getRowExpectedCount() {
+    return getRowCount();
+  }
+
   public int getRowCardinality() {
     return Cursor.MANY;
   }

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalQuery.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalQuery.java	2009-07-10 16:35:27 UTC (rev 1759)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalQuery.java	2009-07-10 16:37:20 UTC (rev 1760)
@@ -54,10 +54,8 @@
 import org.apache.log4j.Logger;
 
 import org.jrdf.graph.URIReference;
-import org.jrdf.graph.Literal
-;
+import org.jrdf.graph.Literal;
 import org.mulgara.query.TuplesException;
-import org.mulgara.query.QueryException;
 import org.mulgara.query.Variable;
 
 
@@ -75,30 +73,28 @@
   /** Logger */
   private static Logger logger = Logger.getLogger(RelationalQuery.class);
 
-  private Set tableSet;
-  private List columnList;
-  private Set restrictionSet;
-  private Map variableMap;
-  private Set variableSet;
+  private Set<String> tableSet;
+  private List<String> columnList;
+  private Set<String> restrictionSet;
+  private Map<Variable,VariableDesc> variableMap;
+  private Set<Variable> variableSet;
 
-  private Map unionCases;
-  private List selectExtension;
+  private Map<LiteralDesc,List<UnionCase>> unionCases;
 
   public RelationalQuery() {
-    tableSet = new HashSet();
-    columnList = new ArrayList();
-    restrictionSet = new HashSet();
-    variableMap = new HashMap();
-    unionCases = new HashMap();
-    selectExtension = new ArrayList();
-    variableSet = new HashSet();
+    tableSet = new HashSet<String>();
+    columnList = new ArrayList<String>();
+    restrictionSet = new HashSet<String>();
+    variableMap = new HashMap<Variable,VariableDesc>();
+    unionCases = new HashMap<LiteralDesc,List<UnionCase>>();
+    variableSet = new HashSet<Variable>();
   }
 
   public void addTable(String table) {
     tableSet.add(table);
   }
 
-  public void addTables(Set tables) {
+  public void addTables(Set<String> tables) {
     tableSet.addAll(tables);
   }
 
@@ -128,9 +124,9 @@
     // variable predicate.  This would result in multiple restrictions/variables associated
     // with each union case.  To handle that we probably would need to move the map generation
     // out into the Resolution.
-    List unionCaseList = (List)unionCases.get(predVariable);
+    List<UnionCase> unionCaseList = unionCases.get(predVariable);
     if (unionCaseList == null) {
-      unionCaseList = new ArrayList();
+      unionCaseList = new ArrayList<UnionCase>();
       unionCases.put(predVariable, unionCaseList);
     }
 
@@ -139,7 +135,7 @@
     // Allow for the existence of variables in the object position that do not participate
     // elsewhere in the constraint.
     if (unionCase.obj instanceof Variable) {
-      variableSet.add(unionCase.obj);
+      variableSet.add((Variable)unionCase.obj);
     }
   }
 
@@ -148,7 +144,7 @@
     restrictionSet.add(restriction);
   }
 
-  public List getQuery() {
+  public List<String> getQuery() {
     if (unionCases.size() == 0) {
       String sql = "SELECT " + toList(columnList, ", ") + " FROM " + toList(tableSet, ", ");
       if (restrictionSet.size() > 0) {
@@ -158,8 +154,8 @@
       return Collections.singletonList(sql);
     } else {
       // Too many side-effects here.  There must be a better way of doing this.
-      List indexList = assignIndicies();
-      List selectList = generateSelectQueries(new ArrayList(), new SubQuery(), indexList, 0);
+      List<LiteralDesc> indexList = assignIndicies();
+      List<String> selectList = generateSelectQueries(new ArrayList<String>(), new SubQuery(), indexList, 0);
 
       if (!variableSet.equals(variableMap.keySet())) {
         throw new IllegalStateException("Post query generated variableMap must match variableSet. map=" + variableMap + ", set=" + variableSet);
@@ -170,11 +166,9 @@
   }
 
 
-  private List assignIndicies() {
-    List indexList = new ArrayList();
-    Iterator i = unionCases.keySet().iterator();
-    while (i.hasNext()) {
-      LiteralDesc desc = (LiteralDesc)i.next();
+  private List<LiteralDesc> assignIndicies() {
+    List<LiteralDesc> indexList = new ArrayList<LiteralDesc>();
+    for (LiteralDesc desc: unionCases.keySet()) {
       indexList.add(desc);
     }
 
@@ -182,18 +176,19 @@
   }
 
   private class SubQuery implements Cloneable {
-    public ArrayList columnList = new ArrayList();
-    public ArrayList objColumnList = new ArrayList();
-    public HashSet restrictionSet = new HashSet();
-    public HashSet tableSet = new HashSet();
+    public ArrayList<String> columnList = new ArrayList<String>();
+    public ArrayList<String> objColumnList = new ArrayList<String>();
+    public HashSet<String> restrictionSet = new HashSet<String>();
+    public HashSet<String> tableSet = new HashSet<String>();
 
+    @SuppressWarnings("unchecked")
     public Object clone() {
       try {
         SubQuery c = (SubQuery)super.clone();
-        c.columnList = (ArrayList)columnList.clone();
-        c.objColumnList = (ArrayList)objColumnList.clone();
-        c.restrictionSet = (HashSet)restrictionSet.clone();
-        c.tableSet = (HashSet)tableSet.clone();
+        c.columnList = (ArrayList<String>)columnList.clone();
+        c.objColumnList = (ArrayList<String>)objColumnList.clone();
+        c.restrictionSet = (HashSet<String>)restrictionSet.clone();
+        c.tableSet = (HashSet<String>)tableSet.clone();
 
         return c;
       } catch (CloneNotSupportedException ec) {
@@ -245,15 +240,13 @@
   /**
    * @return The accumulator is returned having accumulated the required select queries.
    */
-  private List generateSelectQueries(List accum, SubQuery subQuery, List indexList, int index) {
+  private List<String> generateSelectQueries(List<String> accum, SubQuery subQuery, List<LiteralDesc> indexList, int index) {
     if (index >= indexList.size()) {
       accum.add(generateSelectQuery(subQuery));
     } else {
-      LiteralDesc desc = (LiteralDesc)indexList.get(index);
-      List cases = (List)unionCases.get(desc);
-      Iterator i = cases.iterator();
-      while (i.hasNext()) {
-        UnionCase cse = (UnionCase)i.next();
+      LiteralDesc desc = indexList.get(index);
+      List<UnionCase> cases = unionCases.get(desc);
+      for (UnionCase cse: cases) {
         SubQuery sq = (SubQuery)subQuery.clone();
 
         sq.columnList.add("'" + cse.pred + "'");
@@ -264,7 +257,7 @@
 
         if (cse.obj instanceof Variable) { // Variable object.
           // Obtain a redirect descriptor for variable.
-          VariableDesc od = (VariableDesc)variableMap.get(cse.obj);
+          VariableDesc od = variableMap.get(cse.obj);
           RedirectDesc rdesc;
           if (od == null) {
             rdesc = new RedirectDesc(desc);
@@ -284,9 +277,7 @@
           sq.tableSet.addAll(cse.desc.getTables());
           
           // Handle conditions and joins.  cut-n-paste from includePropertyBridge - refactor required
-          Iterator vjoins = cse.desc.getJoin().iterator();
-          while (vjoins.hasNext()) {
-            String join = (String)vjoins.next();
+          for (String join: cse.desc.getJoin()) {
             sq.tableSet.addAll(RelationalResolver.extractTablesFromJoin(join));
             sq.restrictionSet.add(join);
           }
@@ -296,9 +287,7 @@
           sq.columnList.add(Integer.toString(rdesc.addVariableDesc(cse.desc)));
 
           // Handle Columns
-          Iterator cols = cse.desc.getColumns().iterator();
-          while (cols.hasNext()) {
-            String c = (String)cols.next();
+          for (String c: cse.desc.getColumns()) {
             int newIndex = columnList.indexOf(c);
             if (newIndex == -1) {
               newIndex = sq.columnList.indexOf(c);
@@ -317,9 +306,7 @@
           sq.tableSet.addAll(cse.desc.getTables());
 
           // Handle conditions and joins.  cut-n-paste from includePropertyBridge - refactor required
-          Iterator ljoins = cse.desc.getJoin().iterator();
-          while (ljoins.hasNext()) {
-            String join = (String)ljoins.next();
+          for (String join: cse.desc.getJoin()) {
             sq.tableSet.addAll(RelationalResolver.extractTablesFromJoin(join));
             sq.restrictionSet.add(join);
           }
@@ -344,12 +331,12 @@
     return accum;
   }
 
-  public List getVariables() {
-    return new ArrayList(variableSet);
+  public List<Variable> getVariables() {
+    return new ArrayList<Variable>(variableSet);
   }
 
   public VariableDesc getVariableDesc(Variable var) throws TuplesException {
-    VariableDesc desc = (VariableDesc)variableMap.get(var);
+    VariableDesc desc = variableMap.get(var);
     if (desc == null) {
       throw new TuplesException("Variable not found: " + var);
     }
@@ -357,25 +344,16 @@
     return desc;
   }
 
-  public static String toList(Collection strings, String delim) {
+  public static String toList(Collection<String> strings, String delim) {
     StringBuffer result;
-    Iterator i = strings.iterator();
+    Iterator<String> i = strings.iterator();
     if (!i.hasNext()) {
       return "";
     } else {
-      Object o = i.next();
-      try {
-        result = new StringBuffer((String)o);
-      } catch (ClassCastException ec) {
-        logger.warn("Attempting to cast " + o + " to string");
-        throw ec;
-      }
+      String s = i.next();
+      result = new StringBuffer(s);
     }
-
-    while (i.hasNext()) {
-      result.append(delim + i.next().toString());
-    }
-
+    while (i.hasNext()) result.append(delim + i.next().toString());
     return result.toString();
   }
 

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolution.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolution.java	2009-07-10 16:35:27 UTC (rev 1759)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolution.java	2009-07-10 16:37:20 UTC (rev 1760)
@@ -46,6 +46,7 @@
 import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Properties;
 import java.util.List;
 import java.util.Map;
@@ -61,7 +62,6 @@
 import org.mulgara.resolver.spi.EmptyResolution;
 import org.mulgara.resolver.spi.LocalizedTuples;
 import org.mulgara.resolver.spi.Resolution;
-import org.mulgara.resolver.spi.Resolver;
 import org.mulgara.resolver.spi.ResolverSession;
 import org.mulgara.store.tuples.Tuples;
 import org.mulgara.store.tuples.TuplesOperations;
@@ -102,6 +102,7 @@
   private int[] refCount;
   private ResolverSession resolverSession;
   private int[] columnMapping;
+  private long cachedCount = -1;
 
   /**
    * @param constraint  the constraint to resolver, never <code>null</code>
@@ -141,11 +142,11 @@
   }
 
   public long getRowCount() throws TuplesException {
-    if (result == null) {
-      beforeFirst();
+    if (cachedCount == -1) {
+      if (result == null) beforeFirst();
+      cachedCount = result.getRowCount();
     }
-
-    return result.getRowCount();
+    return cachedCount;
   }
 
   public long getRowUpperBound() throws TuplesException {
@@ -160,10 +161,15 @@
     //
     // My intuition tells me that we want to be as far right as possible, so maybe this is the optimal
     // solution..
-    return Long.MAX_VALUE;
+    return cachedCount == -1 ? Long.MAX_VALUE : cachedCount;
   }
 
 
+  public long getRowExpectedCount() throws TuplesException {
+    return cachedCount == -1 ? Long.MAX_VALUE : cachedCount;
+  }
+
+
   public int getRowCardinality() throws TuplesException {
     return Cursor.MANY;
   }
@@ -212,8 +218,8 @@
     }
   }
 
-  public List getOperands() {
-    return new ArrayList();
+  public List<Tuples> getOperands() {
+    return Collections.emptyList();
   }
 
   public void beforeFirst() throws TuplesException {
@@ -266,7 +272,7 @@
   }
 
 
-  public Annotation getAnnotation(Class annotationClass) throws TuplesException {
+  public Annotation getAnnotation(Class<? extends Annotation> annotationClass) throws TuplesException {
     return null;
   }
 
@@ -292,11 +298,11 @@
       throw new TuplesException("RelationalResolution does not support suffix != 0");
     }
 
-    Iterator i = constraint.getRdfTypeConstraints().iterator();
+    Iterator<ConstraintExpression> i = constraint.getRdfTypeConstraints().iterator();
     if (!i.hasNext()) {
       this.result = new EmptyResolution(constraint, true);
     } else {
-      List result = new ArrayList();
+      List<Tuples> result = new ArrayList<Tuples>();
       try {
         while (i.hasNext()) {
           Constraint head = (Constraint)i.next();
@@ -305,7 +311,7 @@
 
         this.result = TuplesOperations.join(result);
       } finally {
-        close((Tuples[]) result.toArray(new Tuples[result.size()]));
+        close(result.toArray(new Tuples[result.size()]));
       }
     }
 
@@ -383,14 +389,11 @@
     includeInstanceQuery(query, subj, classMap);
 
     // Include properties
-    List additionalProperties = new ArrayList();
-    Map propBs = (Map)defn.objPropBridges.get(classMap.klass);
-    Map dataBs = (Map)defn.dataPropBridges.get(classMap.klass);
-    List constraints = (List)constraint.getConstraintsBySubject(subj);
-    Iterator i = constraints.iterator();
-    while (i.hasNext()) {
-      Constraint c = (Constraint)i.next();
-
+    List<Tuples> additionalProperties = new ArrayList<Tuples>();
+    Map<String,? extends PropertyBridgeElem> propBs = defn.objPropBridges.get(classMap.klass);
+    Map<String,? extends PropertyBridgeElem> dataBs = defn.dataPropBridges.get(classMap.klass);
+    List<Constraint> constraints = constraint.getConstraintsBySubject(subj);
+    for (Constraint c: constraints) {
       ConstraintElement pred = c.getElement(1);
       if (pred instanceof Variable) {
         includeVariablePropertyBridge(query, (Variable)pred, c, propBs, dataBs);
@@ -399,9 +402,7 @@
         includePropertyBridge(query, c, dataBs);
 
         // If we find a matching additional property then save it for distribution over the result.
-        Iterator aprops = classMap.additionalProperties.iterator();
-        while (aprops.hasNext()) {
-          AdditionalPropertyElem ape = (AdditionalPropertyElem)aprops.next();
+        for (AdditionalPropertyElem ape: classMap.additionalProperties) {
 
           if (ape.name.equals(c.getElement(1).toString())) {
             if (c.getElement(2) instanceof Variable) {
@@ -471,16 +472,13 @@
         throw new TuplesException("Error in PK definition: " + classMap + " - " + desc);
       }
       query.addTables(desc.getTables());
-      Iterator i = desc.getColumns().iterator();
-      while (i.hasNext()) {
-        String c = (String)i.next();
+      for (String c: desc.getColumns()) {
         desc.assignColumnIndex(c, query.addColumn(c));
       }
       query.addVariable((Variable)instance, desc);
 
-      Iterator j = classMap.condition.iterator();
-      while (j.hasNext()) {
-        query.addRestriction((String)j.next());
+      for (String c: classMap.condition) {
+        query.addRestriction(c);
       }
     } else { // subj !instanceof Variable
       VariableDesc desc;
@@ -498,17 +496,16 @@
       query.addTables(desc.getTables());
       query.addRestriction(desc.restrict(instance.toString()));
 
-      Iterator j = classMap.condition.iterator();
-      while (j.hasNext()) {
-        query.addRestriction((String)j.next());
+      for (String r: classMap.condition) {
+        query.addRestriction(r);
       }
     }
   }
 
-  private void includePropertyBridge(RelationalQuery query, Constraint c, Map propBs)
+  private void includePropertyBridge(RelationalQuery query, Constraint c, Map<String,? extends PropertyBridgeElem> propBs)
       throws TuplesException {
     ConstraintElement pred = c.getElement(1);
-    PropertyBridgeElem propB = (PropertyBridgeElem)propBs.get(pred.toString());
+    PropertyBridgeElem propB = propBs.get(pred.toString());
     if (propB != null) {
       if (propB instanceof ObjectPropertyBridgeElem) {
         includeObjectPropertyBridge(query, c.getElement(2), (ObjectPropertyBridgeElem)propB);
@@ -518,14 +515,11 @@
         throw new TuplesException("Unknown propertybridge type");
       }
 
-      Iterator i = propB.condition.iterator();
-      while (i.hasNext()) {
-        query.addRestriction((String)i.next());
+      for (String r: propB.condition) {
+        query.addRestriction(r);
       }
 
-      Iterator j = propB.join.iterator();
-      while (j.hasNext()) {
-        String join = (String)j.next();
+      for (String join: propB.join) {
         query.addTables(RelationalResolver.extractTablesFromJoin(join));
         query.addRestriction(join);
       }
@@ -534,30 +528,26 @@
 
 
   private void includeVariablePropertyBridge(RelationalQuery query, Variable p, Constraint c,
-      Map propBs, Map dataBs) throws TuplesException {
+        Map<String,? extends PropertyBridgeElem> propBs,
+        Map<String,? extends PropertyBridgeElem> dataBs) throws TuplesException {
 
-    PropertyBridgeElem defn = (PropertyBridgeElem)(propBs.values().iterator().next());
+    PropertyBridgeElem defn = propBs.values().iterator().next();
     LiteralDesc predDesc = new LiteralDesc(defn, p);
     query.addVariable(p, predDesc);
 
-    List descs = new ArrayList();
     ConstraintElement obj = c.getElement(2);
-    Iterator i = propBs.entrySet().iterator();
-    while (i.hasNext()) {
-      Map.Entry entry = (Map.Entry)i.next();
-      String predicate = (String)entry.getKey();
-      PropertyBridgeElem propB = (PropertyBridgeElem)entry.getValue();
+    for (Map.Entry<String,? extends PropertyBridgeElem> entry: propBs.entrySet()) {
+      String predicate = entry.getKey();
+      PropertyBridgeElem propB = entry.getValue();
       VariableDesc vdesc = obtainDescForVariableProperty(propB);
       if (vdesc != null) {
         query.addUnionCase(predDesc, new UnionCase(predDesc, predicate, vdesc, obj));
       }
     }
 
-    i = dataBs.entrySet().iterator();
-    while (i.hasNext()) {
-      Map.Entry entry = (Map.Entry)i.next();
-      String predicate = (String)entry.getKey();
-      PropertyBridgeElem pb = (PropertyBridgeElem)entry.getValue();
+    for (Map.Entry<String,? extends PropertyBridgeElem> entry: dataBs.entrySet()) {
+      String predicate = entry.getKey();
+      PropertyBridgeElem pb = entry.getValue();
       VariableDesc vdesc = obtainDescForVariableProperty(pb);
       if (vdesc != null) {
         query.addUnionCase(predDesc, new UnionCase(predDesc, predicate, vdesc, obj));
@@ -655,9 +645,7 @@
         throw new TuplesException("Error in property definition: " + desc);
       }
       query.addTables(desc.getTables());
-      Iterator i = desc.getColumns().iterator();
-      while (i.hasNext()) {
-        String c = (String)i.next();
+      for (String c: desc.getColumns()) {
         desc.assignColumnIndex(c, query.addColumn(c));
       }
       query.addVariable(v, desc);

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolver.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolver.java	2009-07-10 16:35:27 UTC (rev 1759)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolver.java	2009-07-10 16:37:20 UTC (rev 1760)
@@ -44,16 +44,8 @@
 // Java 2 standard packages
 import java.net.URI;
 import java.net.URISyntaxException;
-import java.util.Arrays;
-import java.util.ArrayList;
-import java.util.Properties;
-import java.util.Collection;
-import java.util.HashMap;
 import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
 import java.util.Set;
-import java.util.Iterator;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import javax.transaction.xa.XAResource;
@@ -64,13 +56,9 @@
 import org.jrdf.graph.Node;
 
 // Locally written packages
-import org.mulgara.query.Answer;
 import org.mulgara.query.Constraint;
 import org.mulgara.query.ConstraintElement;
 import org.mulgara.query.LocalNode;
-import org.mulgara.query.ConstraintConjunction;
-import org.mulgara.query.ConstraintExpression;
-import org.mulgara.query.ConstraintImpl;
 import org.mulgara.query.QueryException;
 import org.mulgara.query.TuplesException;
 import org.mulgara.query.Variable;
@@ -79,7 +67,6 @@
 import org.mulgara.resolver.spi.DummyXAResource;
 import org.mulgara.resolver.spi.GlobalizeException;
 import org.mulgara.resolver.spi.LocalizeException;
-import org.mulgara.resolver.spi.LocalizedTuples;
 import org.mulgara.resolver.spi.EmptyResolution;
 import org.mulgara.resolver.spi.Resolution;
 import org.mulgara.resolver.spi.Resolver;
@@ -87,9 +74,6 @@
 import org.mulgara.resolver.spi.ResolverException;
 import org.mulgara.resolver.spi.ResolverSession;
 import org.mulgara.resolver.spi.Statements;
-import org.mulgara.store.tuples.AbstractTuples;
-import org.mulgara.store.tuples.Tuples;
-import org.mulgara.store.tuples.TuplesOperations;
 
 
 /**
@@ -297,10 +281,10 @@
   }
 
 
-  public static Set extractTablesFromJoin(String join) {
+  public static Set<String> extractTablesFromJoin(String join) {
     Pattern p = Pattern.compile("\\w+\\.\\w+");
     Matcher m = p.matcher(join);
-    Set result =  new HashSet();
+    Set<String> result =  new HashSet<String>();
     while (m.find()) {
       result.add(parseTableFromColumn(m.group()));
     }

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolverUnitTest.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolverUnitTest.java	2009-07-10 16:35:27 UTC (rev 1759)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalResolverUnitTest.java	2009-07-10 16:37:20 UTC (rev 1760)
@@ -181,6 +181,7 @@
   /**
   * Create test objects.
   */
+  @SuppressWarnings("deprecation")
   public void setUp() throws Exception {
     if (database == null) {
       // Create the persistence directory

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalTransformer.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalTransformer.java	2009-07-10 16:35:27 UTC (rev 1759)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalTransformer.java	2009-07-10 16:37:20 UTC (rev 1760)
@@ -64,6 +64,7 @@
 
 public class RelationalTransformer extends AbstractSymbolicTransformer {
   /** Logger */
+  @SuppressWarnings("unused")
   private static Logger logger = Logger.getLogger(RelationalTransformer.class);
 
   private URI modelTypeURI;
@@ -101,19 +102,17 @@
   }
 
   public ConstraintExpression transformConj(SymbolicTransformationContext context, ConstraintConjunction cc) throws SymbolicTransformationException {
-    List retainedArgs = new ArrayList();
-    Map relationalArgs = new HashMap();
+    List<ConstraintExpression> retainedArgs = new ArrayList<ConstraintExpression>();
+    Map<ConstraintElement,List<RelationalConstraint>> relationalArgs = new HashMap<ConstraintElement,List<RelationalConstraint>>();
 
     boolean transformed = false;
 
-    Iterator args = cc.getElements().iterator();
-    while (args.hasNext()) {
-      ConstraintExpression arg = (ConstraintExpression)args.next();
+    for (ConstraintExpression arg: cc.getElements()) {
       if (arg instanceof RelationalConstraint) {
         RelationalConstraint rc = (RelationalConstraint)arg;
-        List rcArgs = (List)relationalArgs.get(rc.getModel());
+        List<RelationalConstraint> rcArgs = relationalArgs.get(rc.getModel());
         if (rcArgs == null) {
-          rcArgs = new ArrayList();
+          rcArgs = new ArrayList<RelationalConstraint>();
           relationalArgs.put(rc.getModel(), rcArgs);
         }
         rcArgs.add(rc);
@@ -126,21 +125,16 @@
       }
     }
 
-    Iterator argLists = relationalArgs.values().iterator();
-    while (argLists.hasNext()) {
-      Iterator rarg = ((List)argLists.next()).iterator();
+    for (List<RelationalConstraint> rargl: relationalArgs.values()) {
+      Iterator<RelationalConstraint> rarg = rargl.iterator();
       RelationalConstraint rc = null;
-      if (rarg.hasNext()) {
-        rc = (RelationalConstraint)rarg.next();
-      }
+      if (rarg.hasNext()) rc = rarg.next();
       while (rarg.hasNext()) {
         transformed = true;
-        rc.conjoinWith((RelationalConstraint)rarg.next());
+        rc.conjoinWith(rarg.next());
       }
 
-      if (rc != null) {
-        retainedArgs.add(rc);
-      }
+      if (rc != null) retainedArgs.add(rc);
     }
 
 

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/VariableDesc.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/VariableDesc.java	2009-07-10 16:35:27 UTC (rev 1759)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/VariableDesc.java	2009-07-10 16:37:20 UTC (rev 1760)
@@ -51,6 +51,7 @@
 import java.util.Set;
 
 import org.jrdf.graph.Node;
+import org.jrdf.graph.URIReference;
 import org.mulgara.query.TuplesException;
 import org.mulgara.resolver.relational.d2rq.Constants;
 import org.mulgara.resolver.relational.d2rq.D2RQDefn;
@@ -61,10 +62,10 @@
   /** Logger.  */
   private static final Logger logger = Logger.getLogger(VariableDesc.class.getName());
 
-  protected Map columnTypeMap;
+  protected Map<String,URIReference> columnTypeMap;
   protected D2RQDefn defn;
-  protected List join;
-  protected List condition;
+  protected List<String> join;
+  protected List<String> condition;
 
   protected VariableDesc(ClassMapElem defn) {
     this((D2RQDefn)defn);
@@ -80,28 +81,28 @@
   protected VariableDesc(D2RQDefn defn) {
     this.defn = defn;
     this.columnTypeMap = defn.getColumnTypeMap();
-    this.join = new ArrayList();
-    this.condition = new ArrayList();
+    this.join = new ArrayList<String>();
+    this.condition = new ArrayList<String>();
   }
 
   public abstract Node getNode(ResultSet result) throws SQLException, TuplesException;
   public abstract void assignColumnIndex(String column, int index);
-  public abstract Set getTables();
-  public abstract Set getColumns();
+  public abstract Set<String> getTables();
+  public abstract Set<String> getColumns();
 
-  public void addJoin(List join) {
+  public void addJoin(List<String> join) {
     this.join.addAll(join);
   }
 
-  public List getJoin() {
+  public List<String> getJoin() {
     return join;
   }
 
-  public void addCondition(List condition) {
+  public void addCondition(List<String> condition) {
     this.condition.addAll(condition);
   }
 
-  public List getCondition() {
+  public List<String> getCondition() {
     return condition;
   }
 

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/AdditionalPropertyElem.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/AdditionalPropertyElem.java	2009-07-10 16:35:27 UTC (rev 1759)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/AdditionalPropertyElem.java	2009-07-10 16:37:20 UTC (rev 1760)
@@ -41,9 +41,6 @@
  */
 package org.mulgara.resolver.relational.d2rq;
 
-import java.util.HashMap;
-import java.util.Map;
-
 import org.mulgara.resolver.spi.Resolver;
 import org.mulgara.resolver.spi.ResolverSession;
 import org.mulgara.resolver.spi.LocalizeException;

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/ClassMapElem.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/ClassMapElem.java	2009-07-10 16:35:27 UTC (rev 1759)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/ClassMapElem.java	2009-07-10 16:37:20 UTC (rev 1760)
@@ -42,7 +42,6 @@
 package org.mulgara.resolver.relational.d2rq;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 import org.mulgara.resolver.spi.Resolver;
@@ -61,8 +60,8 @@
   public final TranslationTableElem translateWith;
   public final String dataStorage;
 //  public final String containsDuplicates;
-  public final List additionalProperties;
-  public final List condition;
+  public final List<AdditionalPropertyElem> additionalProperties;
+  public final List<String> condition;
 
   public ClassMapElem(Resolver resolver, ResolverSession session, long classMap, long defModel, D2RQDefn parent) throws LocalizeException, QueryException, TuplesException, GlobalizeException {
     super(resolver, session, parent);
@@ -79,11 +78,10 @@
     LocalNode ttable = getLocalNodeObject(map, Constants.translateWith, model, true);
     translateWith = (ttable != null) ? new TranslationTableElem(resolver, session, ttable, defModel) : null;
 
-    additionalProperties = new ArrayList();
-    List apropNodes = getLocalNodeObjects(map, Constants.additionalProperty, model);
-    Iterator i = apropNodes.iterator();
-    while (i.hasNext()) {
-      additionalProperties.add(new AdditionalPropertyElem(resolver, session, (LocalNode)i.next(), defModel));
+    additionalProperties = new ArrayList<AdditionalPropertyElem>();
+    List<LocalNode> apropNodes = getLocalNodeObjects(map, Constants.additionalProperty, model);
+    for (LocalNode n: apropNodes) {
+      additionalProperties.add(new AdditionalPropertyElem(resolver, session, n, defModel));
     }
 
   }

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/D2RQDefn.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/D2RQDefn.java	2009-07-10 16:35:27 UTC (rev 1759)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/D2RQDefn.java	2009-07-10 16:37:20 UTC (rev 1760)
@@ -43,9 +43,6 @@
 
 import org.apache.log4j.Logger;
 
-import java.net.URI;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -76,7 +73,7 @@
   protected final ResolverSession session;
   
   // Maps columns to sql datatypes.
-  protected Map columnTypeMap;
+  protected Map<String,URIReference> columnTypeMap;
 
   public D2RQDefn(Resolver resolver, ResolverSession session, D2RQDefn parent) {
     this.resolver = resolver;
@@ -93,14 +90,14 @@
     this.columnTypeMap = null;
   }
 
-  protected void initColumnTypeMap(Map typeMap) {
+  protected void initColumnTypeMap(Map<String,URIReference> typeMap) {
     if (columnTypeMap != null) {
       throw new IllegalStateException("Only parent node may initialise type map, and only once");
     }
     columnTypeMap = typeMap;
   }
 
-  public Map getColumnTypeMap() {
+  public Map<String,URIReference> getColumnTypeMap() {
     return columnTypeMap;
   }
 
@@ -121,14 +118,14 @@
     }
   }
 
-  protected List getStringObjects(Value subj, Value pred, Value model) throws LocalizeException, TuplesException, GlobalizeException, QueryException {
+  protected List<String> getStringObjects(Value subj, Value pred, Value model) throws LocalizeException, TuplesException, GlobalizeException, QueryException {
 
     long[] res = getObjects(
         (subj instanceof LocalNode) ? ((LocalNode)subj).getValue() : session.localize((Node)subj),
         (pred instanceof LocalNode) ? ((LocalNode)pred).getValue() : session.localize((Node)pred),
         (model instanceof LocalNode) ? ((LocalNode)model).getValue() : session.localize((Node)model));
     
-    List ans = new ArrayList();
+    List<String> ans = new ArrayList<String>();
 
     for (int i = 0; i < res.length; i++) {
       Object obj = session.globalize(res[i]);
@@ -143,14 +140,14 @@
     return ans;
   }
 
-  protected List getLocalNodeObjects(Value subj, Value pred, Value model) throws LocalizeException, TuplesException, QueryException {
+  protected List<LocalNode> getLocalNodeObjects(Value subj, Value pred, Value model) throws LocalizeException, TuplesException, QueryException {
 
     long[] res = getObjects(
         (subj instanceof LocalNode) ? ((LocalNode)subj).getValue() : session.localize((Node)subj),
         (pred instanceof LocalNode) ? ((LocalNode)pred).getValue() : session.localize((Node)pred),
         (model instanceof LocalNode) ? ((LocalNode)model).getValue() : session.localize((Node)model));
 
-    List result = new ArrayList();
+    List<LocalNode> result = new ArrayList<LocalNode>();
     for (int i = 0; i < res.length; i++) {
       result.add(new LocalNode(res[i]));
     }

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/DatabaseElem.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/DatabaseElem.java	2009-07-10 16:35:27 UTC (rev 1759)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/DatabaseElem.java	2009-07-10 16:37:20 UTC (rev 1760)
@@ -41,23 +41,18 @@
  */
 package org.mulgara.resolver.relational.d2rq;
 
-import java.util.Collection;
-import java.util.Iterator;
 import java.util.List;
 import java.util.HashMap;
 import java.util.Map;
-import java.net.URI;
 
+import org.jrdf.graph.URIReference;
 import org.mulgara.resolver.spi.Resolver;
 import org.mulgara.resolver.spi.ResolverSession;
 import org.mulgara.resolver.spi.LocalizeException;
 import org.mulgara.resolver.spi.GlobalizeException;
-import org.mulgara.query.ConstraintElement;
-import org.mulgara.query.ConstraintExpression;
 import org.mulgara.query.TuplesException;
 import org.mulgara.query.QueryException;
 import org.mulgara.query.LocalNode;
-import org.mulgara.store.tuples.Tuples;
 
 
 public class DatabaseElem extends D2RQDefn {
@@ -65,9 +60,9 @@
   public final String jdbcDriver;
   public final String username;
   public final String password;
-  public final List numericColumns;
-  public final List textColumns;
-  public final List dateColumns;
+  public final List<String> numericColumns;
+  public final List<String> textColumns;
+  public final List<String> dateColumns;
 
   public DatabaseElem(Resolver resolver, ResolverSession session, long rdftype, long defModel) throws LocalizeException, QueryException, TuplesException, GlobalizeException {
     super(resolver, session);
@@ -89,18 +84,12 @@
     textColumns = getStringObjects(database, Constants.textColumn, model);
     dateColumns = getStringObjects(database, Constants.dateColumn, model);
 
-    Map typeMap = new HashMap();
+    Map<String,URIReference> typeMap = new HashMap<String,URIReference>();
     // "_" is a dummy anonymous column to describe the types of literals within a query (always text)
     typeMap.put("_", Constants.textColumn);
-    for (Iterator i = numericColumns.iterator(); i.hasNext();) {
-      typeMap.put(i.next(), Constants.numericColumn);
-    }
-    for (Iterator i = textColumns.iterator(); i.hasNext();) {
-      typeMap.put(i.next(), Constants.textColumn);
-    }
-    for (Iterator i = dateColumns.iterator(); i.hasNext();) {
-      typeMap.put(i.next(), Constants.dateColumn);
-    }
+    for (String nc: numericColumns) typeMap.put(nc, Constants.numericColumn);
+    for (String nc: textColumns) typeMap.put(nc, Constants.textColumn);
+    for (String nc: dateColumns) typeMap.put(nc, Constants.dateColumn);
     initColumnTypeMap(typeMap);
   }
 }

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/DatatypePropertyBridgeElem.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/DatatypePropertyBridgeElem.java	2009-07-10 16:35:27 UTC (rev 1759)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/DatatypePropertyBridgeElem.java	2009-07-10 16:37:20 UTC (rev 1760)
@@ -41,7 +41,6 @@
  */
 package org.mulgara.resolver.relational.d2rq;
 
-import java.util.List;
 import org.mulgara.resolver.spi.Resolver;
 import org.mulgara.resolver.spi.ResolverSession;
 import org.mulgara.resolver.spi.LocalizeException;

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/Definition.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/Definition.java	2009-07-10 16:35:27 UTC (rev 1759)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/Definition.java	2009-07-10 16:37:20 UTC (rev 1760)
@@ -43,11 +43,8 @@
 
 import org.apache.log4j.Logger;
 
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Map;
 import java.util.HashMap;
-import java.util.Iterator;
 import org.mulgara.query.LocalNode;
 import org.mulgara.query.QueryException;
 import org.mulgara.query.TuplesException;
@@ -64,13 +61,14 @@
 public class Definition {
 
   /** Logger */
+  @SuppressWarnings("unused")
   private static Logger logger = Logger.getLogger(Definition.class);
 
   public DatabaseElem databaseDefn;
-  public Map classMaps;  // Map of class-type to class-defn.
-  public Map nodeClassMaps;  // Map of classMap node to class-defn.
-  public Map objPropBridges;  // Map of class-type to list objectPropertyMaps
-  public Map dataPropBridges;  // Map of class-type to list datatypePropertyMaps
+  public Map<String,ClassMapElem> classMaps;  // Map of class-type to class-defn.
+  public Map<LocalNode,ClassMapElem> nodeClassMaps;  // Map of classMap node to class-defn.
+  public Map<String,Map<String,ObjectPropertyBridgeElem>> objPropBridges;  // Map of class-type to list objectPropertyMaps
+  public Map<String,Map<String,DatatypePropertyBridgeElem>> dataPropBridges;  // Map of class-type to list datatypePropertyMaps
 
   public Definition(Resolver resolver, ResolverSession session, long rdftype, long defModel) throws QueryException {
     try {
@@ -82,10 +80,10 @@
       LocalNode classMap = new LocalNode(session.localize(Constants.TypeClassMap));
 
       Resolution maps = resolver.resolve(new ConstraintImpl(subj, type, classMap, model));
-      this.classMaps = new HashMap();
-      this.objPropBridges = new HashMap();
-      this.dataPropBridges = new HashMap();
-      this.nodeClassMaps = new HashMap();
+      this.classMaps = new HashMap<String,ClassMapElem>();
+      this.objPropBridges = new HashMap<String,Map<String,ObjectPropertyBridgeElem>>();
+      this.dataPropBridges = new HashMap<String,Map<String,DatatypePropertyBridgeElem>>();
+      this.nodeClassMaps = new HashMap<LocalNode,ClassMapElem>();
       maps.beforeFirst();
       while (maps.next()) {
         long map = maps.getColumnValue(0);
@@ -101,9 +99,7 @@
       }
       maps.close();
 
-      Iterator i = nodeClassMaps.keySet().iterator();
-      while (i.hasNext()) {
-        LocalNode map = (LocalNode)i.next();
+      for (LocalNode map: nodeClassMaps.keySet()) {
         ClassMapElem cmap = (ClassMapElem)nodeClassMaps.get(map);
 
         populateObjPropBridges(resolver, session, subj, type, model, map, cmap.klass, nodeClassMaps);
@@ -119,11 +115,11 @@
   }
 
   void populateObjPropBridges(Resolver resolver, ResolverSession session,
-      Variable subj, LocalNode type, LocalNode model, LocalNode map, String klass, Map nodeClassMaps)
+      Variable subj, LocalNode type, LocalNode model, LocalNode map, String klass, Map<LocalNode,ClassMapElem> nodeClassMaps)
       throws LocalizeException, QueryException, TuplesException, GlobalizeException {
-    Map pmap = (Map)objPropBridges.get(klass);
+    Map<String,ObjectPropertyBridgeElem> pmap = objPropBridges.get(klass);
     if (pmap == null) {
-      pmap = new HashMap();
+      pmap = new HashMap<String,ObjectPropertyBridgeElem>();
       objPropBridges.put(klass, pmap);
     }
 
@@ -150,9 +146,9 @@
   void populateDataPropBridges(Resolver resolver, ResolverSession session,
       Variable subj, LocalNode type, LocalNode model, LocalNode map, String klass)
       throws LocalizeException, QueryException, TuplesException, GlobalizeException {
-    Map pmap = (Map)dataPropBridges.get(klass);
+    Map<String,DatatypePropertyBridgeElem> pmap = dataPropBridges.get(klass);
     if (pmap == null) {
-      pmap = new HashMap();
+      pmap = new HashMap<String,DatatypePropertyBridgeElem>();
       dataPropBridges.put(klass, pmap);
     }
 

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/ObjectPropertyBridgeElem.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/ObjectPropertyBridgeElem.java	2009-07-10 16:35:27 UTC (rev 1759)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/ObjectPropertyBridgeElem.java	2009-07-10 16:37:20 UTC (rev 1760)
@@ -41,7 +41,6 @@
  */
 package org.mulgara.resolver.relational.d2rq;
 
-import java.util.List;
 import java.util.Map;
 
 import org.apache.log4j.Logger;
@@ -62,7 +61,7 @@
   public final String pattern;
   public final ClassMapElem refersToClassMap;
 
-  public ObjectPropertyBridgeElem(Resolver resolver, ResolverSession session, long propMap, long defModel, Map nodeClassMaps, D2RQDefn parent)
+  public ObjectPropertyBridgeElem(Resolver resolver, ResolverSession session, long propMap, long defModel, Map<LocalNode,ClassMapElem> nodeClassMaps, D2RQDefn parent)
       throws LocalizeException, QueryException, TuplesException, GlobalizeException {
     super(resolver, session, propMap, defModel, parent);
 

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/PropertyBridgeElem.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/PropertyBridgeElem.java	2009-07-10 16:35:27 UTC (rev 1759)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/PropertyBridgeElem.java	2009-07-10 16:37:20 UTC (rev 1760)
@@ -52,11 +52,11 @@
 
 public class PropertyBridgeElem extends D2RQDefn {
   public final String property;
-  public final List join;
+  public final List<String> join;
   public final String alias;
   public final String valueMaxLength;
   public final String valueContains;
-  public final List condition;
+  public final List<String> condition;
   public final TranslationTableElem translateWith;
 
   public PropertyBridgeElem(Resolver resolver, ResolverSession session, long propMap, long defModel, D2RQDefn parent) throws LocalizeException, QueryException, TuplesException, GlobalizeException {

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/TranslationTableElem.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/TranslationTableElem.java	2009-07-10 16:35:27 UTC (rev 1759)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/d2rq/TranslationTableElem.java	2009-07-10 16:37:20 UTC (rev 1760)
@@ -53,14 +53,14 @@
 import org.mulgara.query.QueryException;
 
 public class TranslationTableElem extends D2RQDefn {
-  public Map db2rdf;
-  public Map rdf2db;
+  public Map<String,String> db2rdf;
+  public Map<String,String> rdf2db;
 
   public TranslationTableElem(Resolver resolver, ResolverSession session, LocalNode ttable, long defModel) throws LocalizeException, QueryException, TuplesException, GlobalizeException {
     super(resolver, session);
 
-    db2rdf = new HashMap();
-    rdf2db = new HashMap();
+    db2rdf = new HashMap<String,String>();
+    rdf2db = new HashMap<String,String>();
 
     LocalNode model = new LocalNode(defModel);
 




More information about the Mulgara-svn mailing list