[Mulgara-svn] r2021 - in trunk: . src/jar src/jar/content-mbox/java/org/mulgara/content/mbox/parser src/jar/krule/java/org/mulgara/krule src/jar/query/java/org/jrdf/graph src/jar/query/java/org/mulgara/query src/jar/query/java/org/mulgara/query/filter src/jar/query/java/org/mulgara/query/filter/value src/jar/resolver/java/org/mulgara/resolver src/jar/resolver-filesystem/java/org/mulgara/resolver/filesystem src/jar/resolver-gis/java/org/mulgara/resolver/gis/tools src/jar/resolver-lucene/java/org/mulgara/resolver/lucene src/jar/resolver-memory/java/org/mulgara/resolver/memory src/jar/resolver-relational/java/org/mulgara/resolver/relational src/jar/resolver-spi/java/org/mulgara/resolver/spi src/jar/resolver-xsd/java/org/mulgara/resolver/xsd src/jar/server-rmi/java/org/mulgara/server/rmi src/jar/store-stringpool/java/org/mulgara/store/stringpool src/jar/store-stringpool/java/org/mulgara/store/stringpool/xa src/jar/tuples/java/org/mulgara/store/tuples

pag at mulgara.org pag at mulgara.org
Fri Sep 9 03:49:39 UTC 2011


Author: pag
Date: 2011-09-09 03:49:39 +0000 (Fri, 09 Sep 2011)
New Revision: 2021

Added:
   trunk/src/jar/query/java/org/mulgara/query/AbstractAnswer.java
Removed:
   trunk/src/jar/rdql/
Modified:
   trunk/.classpath
   trunk/build.xml
   trunk/src/jar/content-mbox/java/org/mulgara/content/mbox/parser/MboxMessage.java
   trunk/src/jar/krule/java/org/mulgara/krule/KruleLoader.java
   trunk/src/jar/query/java/org/jrdf/graph/AbstractLiteral.java
   trunk/src/jar/query/java/org/jrdf/graph/AbstractTriple.java
   trunk/src/jar/query/java/org/mulgara/query/AnswerImpl.java
   trunk/src/jar/query/java/org/mulgara/query/ArrayAnswer.java
   trunk/src/jar/query/java/org/mulgara/query/BooleanAnswer.java
   trunk/src/jar/query/java/org/mulgara/query/ConstraintAssignment.java
   trunk/src/jar/query/java/org/mulgara/query/ConstraintFalse.java
   trunk/src/jar/query/java/org/mulgara/query/ConstraintFilter.java
   trunk/src/jar/query/java/org/mulgara/query/ConstraintHaving.java
   trunk/src/jar/query/java/org/mulgara/query/ConstraintImpl.java
   trunk/src/jar/query/java/org/mulgara/query/ConstraintIn.java
   trunk/src/jar/query/java/org/mulgara/query/ConstraintIs.java
   trunk/src/jar/query/java/org/mulgara/query/ConstraintOperation.java
   trunk/src/jar/query/java/org/mulgara/query/ConstraintTrue.java
   trunk/src/jar/query/java/org/mulgara/query/GraphAnswer.java
   trunk/src/jar/query/java/org/mulgara/query/SingleTransitiveConstraint.java
   trunk/src/jar/query/java/org/mulgara/query/TransitiveConstraint.java
   trunk/src/jar/query/java/org/mulgara/query/UnconstrainedAnswer.java
   trunk/src/jar/query/java/org/mulgara/query/Variable.java
   trunk/src/jar/query/java/org/mulgara/query/filter/TestContext.java
   trunk/src/jar/query/java/org/mulgara/query/filter/value/Var.java
   trunk/src/jar/resolver-filesystem/java/org/mulgara/resolver/filesystem/FileSystemResolution.java
   trunk/src/jar/resolver-gis/java/org/mulgara/resolver/gis/tools/AbstractAngle.java
   trunk/src/jar/resolver-gis/java/org/mulgara/resolver/gis/tools/DistanceCalculatorFactory.java
   trunk/src/jar/resolver-gis/java/org/mulgara/resolver/gis/tools/LatitudeImpl.java
   trunk/src/jar/resolver-gis/java/org/mulgara/resolver/gis/tools/LongitudeImpl.java
   trunk/src/jar/resolver-gis/java/org/mulgara/resolver/gis/tools/SphericalDistanceEstimator.java
   trunk/src/jar/resolver-lucene/java/org/mulgara/resolver/lucene/LuceneConstraint.java
   trunk/src/jar/resolver-memory/java/org/mulgara/resolver/memory/Stating.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalAnswer.java
   trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalConstraint.java
   trunk/src/jar/resolver-spi/java/org/mulgara/resolver/spi/ConjunctiveTransformerUnitTest.java
   trunk/src/jar/resolver-spi/java/org/mulgara/resolver/spi/TuplesContext.java
   trunk/src/jar/resolver-xsd/java/org/mulgara/resolver/xsd/IntervalConstraint.java
   trunk/src/jar/resolver-xsd/java/org/mulgara/resolver/xsd/IntervalConstraintDescriptor.java
   trunk/src/jar/resolver/java/org/mulgara/resolver/Database.java
   trunk/src/jar/resolver/java/org/mulgara/resolver/GlobalizedAnswer.java
   trunk/src/jar/resolver/java/org/mulgara/resolver/TransactionalAnswer.java
   trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/BlankNodeWrapperAnswer.java
   trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/RemoteAnswerWrapperAnswer.java
   trunk/src/jar/store-stringpool/java/org/mulgara/store/stringpool/AbstractSPObject.java
   trunk/src/jar/store-stringpool/java/org/mulgara/store/stringpool/xa/SPBase64BinaryImpl.java
   trunk/src/jar/tuples/java/org/mulgara/store/tuples/AbstractTuples.java
   trunk/src/jar/tuples/java/org/mulgara/store/tuples/LeftJoin.java
   trunk/src/jar/tuples/java/org/mulgara/store/tuples/WrappedTuples.java
Log:
Further updates for Fortify compliance

Modified: trunk/.classpath
===================================================================
--- trunk/.classpath	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/.classpath	2011-09-09 03:49:39 UTC (rev 2021)
@@ -95,17 +95,17 @@
 	<classpathentry kind="lib" path="lib/jenatest-2.5.6.jar"/>
 	<classpathentry kind="lib" path="lib/interruptiblermi-1.1.jar"/>
 	<classpathentry kind="lib" path="lib/iri-0.5.jar"/>
-  <classpathentry kind="lib" path="lib/jetty-continuation-7.1.6.v20100715.jar"/>
-  <classpathentry kind="lib" path="lib/jetty-deploy-7.1.6.v20100715.jar"/>
-  <classpathentry kind="lib" path="lib/jetty-http-7.1.6.v20100715.jar"/>
-  <classpathentry kind="lib" path="lib/jetty-io-7.1.6.v20100715.jar"/>
-  <classpathentry kind="lib" path="lib/jetty-security-7.1.6.v20100715.jar"/>
-  <classpathentry kind="lib" path="lib/jetty-server-7.1.6.v20100715.jar"/>
-  <classpathentry kind="lib" path="lib/jetty-servlet-7.1.6.v20100715.jar"/>
-  <classpathentry kind="lib" path="lib/jetty-servlets-7.1.6.v20100715.jar"/>
-  <classpathentry kind="lib" path="lib/jetty-util-7.1.6.v20100715.jar"/>
-  <classpathentry kind="lib" path="lib/jetty-webapp-7.1.6.v20100715.jar"/>
-  <classpathentry kind="lib" path="lib/jetty-xml-7.1.6.v20100715.jar"/>
+	<classpathentry kind="lib" path="lib/jetty-continuation-7.1.6.v20100715.jar"/>
+	<classpathentry kind="lib" path="lib/jetty-deploy-7.1.6.v20100715.jar"/>
+	<classpathentry kind="lib" path="lib/jetty-http-7.1.6.v20100715.jar" sourcepath="/Users/pag/.m2/repository/org/eclipse/jetty/jetty-http/7.1.6.v20100715/jetty-http-7.1.6.v20100715-sources.jar"/>
+	<classpathentry kind="lib" path="lib/jetty-io-7.1.6.v20100715.jar"/>
+	<classpathentry kind="lib" path="lib/jetty-security-7.1.6.v20100715.jar"/>
+	<classpathentry kind="lib" path="lib/jetty-server-7.1.6.v20100715.jar" sourcepath="/Users/pag/oss/jetty/jetty-distribution-7.1.6.v20100715/src"/>
+	<classpathentry kind="lib" path="lib/jetty-servlet-7.1.6.v20100715.jar"/>
+	<classpathentry kind="lib" path="lib/jetty-servlets-7.1.6.v20100715.jar"/>
+	<classpathentry kind="lib" path="lib/jetty-util-7.1.6.v20100715.jar" sourcepath="/Users/pag/oss/jetty/jetty-distribution-7.1.6.v20100715/src"/>
+	<classpathentry kind="lib" path="lib/jetty-webapp-7.1.6.v20100715.jar"/>
+	<classpathentry kind="lib" path="lib/jetty-xml-7.1.6.v20100715.jar"/>
 	<classpathentry kind="lib" path="lib/jid3-0.34.jar"/>
 	<classpathentry kind="lib" path="lib/jl1.0.jar"/>
 	<classpathentry kind="lib" path="lib/jline-0.9.94.jar"/>
@@ -113,14 +113,14 @@
 	<classpathentry kind="lib" path="lib/jotm-2.0.10.jar"/>
 	<classpathentry kind="lib" path="lib/jotm_jrmp_stubs-2.0.10.jar"/>
 	<classpathentry kind="lib" path="lib/js-1.5r3.jar"/>
-  <classpathentry kind="lib" path="lib/jsp/com.sun.el_1.0.0.v201004190952.jar"/>
-  <classpathentry kind="lib" path="lib/jsp/ecj-3.6.jar"/>
-  <classpathentry kind="lib" path="lib/jsp/javax.el_2.1.0.v201004190952.jar"/>
-  <classpathentry kind="lib" path="lib/jsp/javax.servlet.jsp.jstl_1.2.0.v201004190952.jar"/>
-  <classpathentry kind="lib" path="lib/jsp/javax.servlet.jsp_2.1.0.v201004190952.jar"/>
-  <classpathentry kind="lib" path="lib/jsp/jetty-jsp-2.1-7.1.6.v20100715.jar"/>
-  <classpathentry kind="lib" path="lib/jsp/org.apache.jasper.glassfish_2.1.0.v201007080150.jar"/>
-  <classpathentry kind="lib" path="lib/jsp/org.apache.taglibs.standard.glassfish_1.2.0.v201004190952.jar"/>
+	<classpathentry kind="lib" path="lib/jsp/com.sun.el_1.0.0.v201004190952.jar"/>
+	<classpathentry kind="lib" path="lib/jsp/ecj-3.6.jar"/>
+	<classpathentry kind="lib" path="lib/jsp/javax.el_2.1.0.v201004190952.jar"/>
+	<classpathentry kind="lib" path="lib/jsp/javax.servlet.jsp.jstl_1.2.0.v201004190952.jar"/>
+	<classpathentry kind="lib" path="lib/jsp/javax.servlet.jsp_2.1.0.v201004190952.jar"/>
+	<classpathentry kind="lib" path="lib/jsp/jetty-jsp-2.1-7.1.6.v20100715.jar" sourcepath="/Users/pag/.m2/repository/org/eclipse/jetty/jetty-jsp-2.1/7.1.6.v20100715/jetty-jsp-2.1-7.1.6.v20100715-sources.jar"/>
+	<classpathentry kind="lib" path="lib/jsp/org.apache.jasper.glassfish_2.1.0.v201007080150.jar"/>
+	<classpathentry kind="lib" path="lib/jsp/org.apache.taglibs.standard.glassfish_1.2.0.v201004190952.jar"/>
 	<classpathentry kind="lib" path="lib/jta-spec1_0_1.jar"/>
 	<classpathentry kind="lib" path="lib/jtidy-r7-xmlc-2.2.jar"/>
 	<classpathentry kind="lib" path="lib/junit-3.8.1.jar"/>
@@ -132,7 +132,7 @@
 	<classpathentry kind="lib" path="lib/Quick4util.jar"/>
 	<classpathentry kind="lib" path="lib/saaj-1.4.jar"/>
 	<classpathentry kind="lib" path="lib/sablecc-2.18.2.jar"/>
-  <classpathentry kind="lib" path="lib/servlet-api-2.5.jar"/>
+	<classpathentry kind="lib" path="lib/servlet-api-2.5.jar"/>
 	<classpathentry kind="lib" path="lib/sesame-model-2.2.1.jar"/>
 	<classpathentry kind="lib" path="lib/trove-2.0.4.jar"/>
 	<classpathentry kind="lib" path="lib/velocity-1.5.jar"/>
@@ -140,7 +140,7 @@
 	<classpathentry kind="lib" path="lib/xalan-2.7.0.jar"/>
 	<classpathentry kind="lib" path="lib/xercesImpl-2.9.1.jar"/>
 	<classpathentry kind="lib" path="lib/xml-apis-2.9.1.jar"/>
-	<classpathentry kind="lib" path="dist/ideSupport.jar" sourcepath="obj/jar/config/java"/>
+	<classpathentry kind="lib" path="dist/ideSupport.jar" sourcepath="/Users/pag/oss/jetty/jetty-distribution-7.1.6.v20100715/src"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="lib" path="lib/commons-httpclient-3.1.jar"/>
 	<classpathentry kind="lib" path="lib/commons-logging-1.1.1.jar"/>
@@ -148,7 +148,7 @@
 	<classpathentry kind="lib" path="lib/httpclient-4.0-beta2.jar"/>
 	<classpathentry kind="lib" path="lib/httpcore-4.0-beta3.jar"/>
 	<classpathentry kind="lib" path="lib/httpmime-4.0-beta2.jar"/>
-  <classpathentry kind="lib" path="lib/htmlparser-1.2.1.jar"/>
-  <classpathentry kind="lib" path="lib/java-rdfa-0.4.1.jar"/>
+	<classpathentry kind="lib" path="lib/htmlparser-1.2.1.jar"/>
+	<classpathentry kind="lib" path="lib/java-rdfa-0.4.1.jar"/>
 	<classpathentry kind="output" path="obj/jar"/>
 </classpath>

Modified: trunk/build.xml
===================================================================
--- trunk/build.xml	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/build.xml	2011-09-09 03:49:39 UTC (rev 2021)
@@ -857,7 +857,6 @@
       <sourcepath path="${jrdf.src.dir}/java"/>
       <sourcepath path="${krule.src.dir}/java"/>
       <sourcepath path="${query.src.dir}/java"/>
-      <!--sourcepath path="${rdql.src.dir}/java"/-->
       <sourcepath path="${resolver.src.dir}/java"/>
       <sourcepath path="${resolver-null.src.dir}/java"/>
       <sourcepath path="${resolver-file.src.dir}/java"/>
@@ -892,7 +891,6 @@
       <sourcepath path="${obj.dir}/jar/config/java"/>
       <sourcepath path="${obj.dir}/jar/querylang/java"/>
       <sourcepath path="${obj.dir}/jar/query/java"/>
-      <!--sourcepath path="${obj.dir}/jar/rdql/java"/-->
       <sourcepath path="${obj.dir}/jar/util/java"/>
       <link href="${j2ee.javadoc}"/>
       <link href="${java.javadoc}"/>
@@ -1321,9 +1319,6 @@
 
     <unzip src="data/RDF-Test-Cases-2001-09-12.zip" dest="${test.dir}/RDF-Test-Cases"/>
 
-    <mkdir dir="${test.dir}/RDQL"/>
-
-    <unzip src="data/rdql-tests-jena-2.0.zip" dest="${test.dir}/RDQL"/>
   </target>
 
   <!-- =================================================================== -->

Modified: trunk/src/jar/content-mbox/java/org/mulgara/content/mbox/parser/MboxMessage.java
===================================================================
--- trunk/src/jar/content-mbox/java/org/mulgara/content/mbox/parser/MboxMessage.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/content-mbox/java/org/mulgara/content/mbox/parser/MboxMessage.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -34,6 +34,7 @@
 import javax.mail.internet.*;
 
 import org.apache.log4j.*;
+import org.mulgara.util.ObjectUtil;
 
 /*
  * MboxMessage.java
@@ -648,9 +649,7 @@
    * @return the folders are equal.
    */
   public static boolean foldersEqual(Folder folder1, Folder folder2) {
-    return (((folder1 == null) && (folder2 == null)) ||
-            (folder1.equals(folder2))
-            );
+    return ObjectUtil.eq(folder1, folder2);
   }
 
   /**

Modified: trunk/src/jar/krule/java/org/mulgara/krule/KruleLoader.java
===================================================================
--- trunk/src/jar/krule/java/org/mulgara/krule/KruleLoader.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/krule/java/org/mulgara/krule/KruleLoader.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -53,7 +53,7 @@
 public class KruleLoader implements RuleLoader {
 
   /** Logger.  */
-  private static Logger logger = Logger.getLogger(KruleLoader.class.getName());
+  private static final Logger logger = Logger.getLogger(KruleLoader.class.getName());
 
   /** The database session for querying. */
   private OperationContext operationContext;
@@ -163,13 +163,13 @@
       }
 
     } catch (TuplesException te) {
-      logger.error("Exception while accessing rule data.", te);
+      logger.error("Exception while accessing rule data. " + te.getMessage());
       throw new InitializerException("Problem accessing rule data", te);
     } catch (QueryException qe) {
-      logger.error("Exception while reading rules.", qe);
+      logger.error("Exception while reading rules. " + qe.getMessage());
       throw new InitializerException("Problem reading rules", qe);
     } catch (KruleStructureException ke) {
-      logger.error("Error in rule RDF data:" + ke.getMessage(), ke);
+      logger.error("Error in rule RDF data:" + ke.getMessage());
       throw new InitializerException("Problem in rules RDF", ke);
     } catch (Throwable t) {
       logger.error("Unexpected error during loading: " + t.getMessage(), t);

Modified: trunk/src/jar/query/java/org/jrdf/graph/AbstractLiteral.java
===================================================================
--- trunk/src/jar/query/java/org/jrdf/graph/AbstractLiteral.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/query/java/org/jrdf/graph/AbstractLiteral.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -62,6 +62,7 @@
 import org.jrdf.util.EscapeUtil;
 import org.openrdf.model.impl.LiteralImpl;
 import org.openrdf.model.impl.URIImpl;
+import static org.mulgara.util.ObjectUtil.eq;
 
 import java.io.Serializable;
 import java.net.URI;
@@ -154,11 +155,6 @@
       throw new IllegalArgumentException("Null \"lexicalForm\" parameter");
     }
 
-    // Validate "datatype" parameter
-    if (null == newDatatypeURI) {
-      throw new IllegalArgumentException("Null \"datatype\" parameter");
-    }
-
     // Initialize fields
     datatypeURI = newDatatypeURI;
   }
@@ -252,6 +248,13 @@
     return appendString;
   }
 
+  public boolean equals(Object o) {
+    if (!(o instanceof Literal)) return false;
+    Literal l = (Literal)o;
+    return eq(getLexicalForm(), l.getLexicalForm()) &&
+           eq(getDatatypeURI(), l.getDatatypeURI()) &&
+           eq(getLanguage(), l.getLanguage());
+  }
 
   public boolean isLiteral() { return true; }
 

Modified: trunk/src/jar/query/java/org/jrdf/graph/AbstractTriple.java
===================================================================
--- trunk/src/jar/query/java/org/jrdf/graph/AbstractTriple.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/query/java/org/jrdf/graph/AbstractTriple.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -133,16 +133,12 @@
     // Check for null and ensure exactly the same class - not subclass.
     if (null != obj) {
 
-      try {
-
+      if (obj instanceof Triple) {
         Triple tmpTriple = (Triple) obj;
         returnValue = getSubject().equals(tmpTriple.getSubject()) &&
             getPredicate().equals(tmpTriple.getPredicate()) &&
             getObject().equals(tmpTriple.getObject());
       }
-      catch (ClassCastException cce) {
-        // Leave return value to be false.
-      }
     }
     return returnValue;
   }

Added: trunk/src/jar/query/java/org/mulgara/query/AbstractAnswer.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/AbstractAnswer.java	                        (rev 0)
+++ trunk/src/jar/query/java/org/mulgara/query/AbstractAnswer.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2011 Revelytix, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.mulgara.query;
+
+import org.apache.log4j.Logger;
+
+/**
+ * Basic functionality for an Answer.
+ */
+public abstract class AbstractAnswer implements Answer {
+
+  private static final Logger logger = Logger.getLogger(AbstractAnswer.class.getName());
+
+  /**
+   * Clone method so that subtypes are able to call super.
+   */
+  public Object clone() {
+    try {
+      return super.clone();
+    } catch (CloneNotSupportedException e) {
+      throw new RuntimeException("Unable to clone a " + getClass().toString(), e);
+    }
+  }
+
+  public boolean equals(Object object) {
+    if ((object != null) && (object instanceof Answer)) {
+      try {
+        return AnswerOperations.equal(this, (Answer) object);
+      } catch (TuplesException e) {
+        logger.fatal("Couldn't test equality of answers", e);
+      }
+    }
+    return false;
+  }
+
+}

Modified: trunk/src/jar/query/java/org/mulgara/query/AnswerImpl.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/AnswerImpl.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/query/java/org/mulgara/query/AnswerImpl.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -58,7 +58,7 @@
  *
  * @licence <a href="{@docRoot}/../../LICENCE">Mozilla Public License v1.1</a>
  */
-public class AnswerImpl implements Answer, Serializable {
+public class AnswerImpl extends AbstractAnswer implements Answer, Serializable {
 
   /**
    * Allow newer compiled version of the stub to operate when changes

Modified: trunk/src/jar/query/java/org/mulgara/query/ArrayAnswer.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/ArrayAnswer.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/query/java/org/mulgara/query/ArrayAnswer.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -56,7 +56,7 @@
  *
  * @licence <a href="{@docRoot}/../../LICENCE">Mozilla Public License v1.1</a>
  */
-public class ArrayAnswer implements Answer, Cloneable, Serializable {
+public class ArrayAnswer extends AbstractAnswer implements Answer, Cloneable, Serializable {
 
   /**
    * Allow newer compiled version of the stub to operate when changes
@@ -339,12 +339,7 @@
 
     // Clone all subclass fields
     ArrayAnswer cloned;
-    try {
-      cloned = (ArrayAnswer)super.clone();
-    }
-    catch (CloneNotSupportedException e) {
-      throw new Error(getClass() + " is not Cloneable");
-    }
+    cloned = (ArrayAnswer)super.clone();
     assert cloned != null;
 
     /*

Modified: trunk/src/jar/query/java/org/mulgara/query/BooleanAnswer.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/BooleanAnswer.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/query/java/org/mulgara/query/BooleanAnswer.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -14,6 +14,7 @@
 
 import java.io.Serializable;
 
+import org.apache.log4j.Logger;
 import org.mulgara.query.rdf.LiteralImpl;
 import org.mulgara.query.rdf.XSD;
 
@@ -25,11 +26,15 @@
  * @copyright © 2008 <a href="http://www.topazproject.org/">The Topaz Project</a>
  * @licence <a href="{@docRoot}/../../LICENCE.txt">Open Software License v3.0</a>
  */
-public class BooleanAnswer implements Answer, Serializable {
+public class BooleanAnswer extends AbstractAnswer implements Answer, Serializable {
 
   /** Required ID for serialization */
   private static final long serialVersionUID = -4548465246790083233L;
 
+  /** Logger */
+  @SuppressWarnings("unused")
+  private static final Logger logger = Logger.getLogger(BooleanAnswer.class.getName());
+
   /** A default variable name. This matches the default names used elsewhere. */
   private static final String KONSTANT_VAR_NAME = "k0";
 

Modified: trunk/src/jar/query/java/org/mulgara/query/ConstraintAssignment.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/ConstraintAssignment.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/query/java/org/mulgara/query/ConstraintAssignment.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -104,7 +104,7 @@
     if (object == this) return true;
 
     // Check that the given object is the correct class
-    if (!object.getClass().equals(this.getClass())) return false;
+    if (object.getClass() != this.getClass()) return false;
 
     // Check each element.
     ConstraintAssignment tmpConstraint = (ConstraintAssignment)object;

Modified: trunk/src/jar/query/java/org/mulgara/query/ConstraintFalse.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/ConstraintFalse.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/query/java/org/mulgara/query/ConstraintFalse.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -151,4 +151,7 @@
     return false;
   }
 
+  public boolean equals(Object o) {
+    return o == INSTANCE;
+  }
 }

Modified: trunk/src/jar/query/java/org/mulgara/query/ConstraintFilter.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/ConstraintFilter.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/query/java/org/mulgara/query/ConstraintFilter.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -98,7 +98,7 @@
     if (object == this) return true;
 
     // Check that the given object is the correct class.
-    if (!ConstraintFilter.class.equals(object.getClass())) return false;
+    if (ConstraintFilter.class != object.getClass()) return false;
     // check each element.
     ConstraintFilter other = (ConstraintFilter)object;
     // can't do an equals() on filter, as this evaluates the filter in context

Modified: trunk/src/jar/query/java/org/mulgara/query/ConstraintHaving.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/ConstraintHaving.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/query/java/org/mulgara/query/ConstraintHaving.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -173,7 +173,7 @@
     if (object == this) return true;
 
     // Check that the given object is the correct class
-    if (!object.getClass().equals(this.getClass())) return false;
+    if (object.getClass() != this.getClass()) return false;
 
     // Check each element.
     ConstraintHaving tmpConstraint = (ConstraintHaving) object;

Modified: trunk/src/jar/query/java/org/mulgara/query/ConstraintImpl.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/ConstraintImpl.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/query/java/org/mulgara/query/ConstraintImpl.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -200,7 +200,7 @@
     boolean returnValue = false;
 
     // Check that the given object is the correct class if so check each element.
-    if (object.getClass().equals(this.getClass())) {
+    if (object.getClass() == this.getClass()) {
 
       Constraint tmpConstraint = (Constraint) object;
 

Modified: trunk/src/jar/query/java/org/mulgara/query/ConstraintIn.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/ConstraintIn.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/query/java/org/mulgara/query/ConstraintIn.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -121,7 +121,7 @@
     if (object == this) return true;
 
     // Check that the given object is the correct class.
-    if (!ConstraintIn.class.equals(object.getClass())) return false;
+    if (ConstraintIn.class != object.getClass()) return false;
     // check each element.
     ConstraintIn other = (ConstraintIn)object;
     // can't do an equals() on filter, as this evaluates the filter in context

Modified: trunk/src/jar/query/java/org/mulgara/query/ConstraintIs.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/ConstraintIs.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/query/java/org/mulgara/query/ConstraintIs.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -200,7 +200,7 @@
     if (object == this) return true;
 
     // Check that the given object is the correct class
-    if (!object.getClass().equals(this.getClass())) return false;
+    if (object.getClass() != this.getClass()) return false;
 
     // Check each element.
     ConstraintIs tmpConstraint = (ConstraintIs) object;

Modified: trunk/src/jar/query/java/org/mulgara/query/ConstraintOperation.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/ConstraintOperation.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/query/java/org/mulgara/query/ConstraintOperation.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -90,14 +90,14 @@
     elements = new ArrayList<ConstraintExpression>(2);
 
     // Add the LHS
-    if (isAssociative() && lhs.getClass().equals(getClass())) {
+    if (isAssociative() && lhs.getClass() == getClass()) {
       elements.addAll(((ConstraintOperation)lhs).getElements());
     } else {
       elements.add(lhs);
     }
 
     // Add the RHS
-    if (isAssociative() && rhs.getClass().equals(getClass())) {
+    if (isAssociative() && rhs.getClass() == getClass()) {
       elements.addAll( ( (ConstraintOperation) rhs).getElements());
     } else {
       elements.add(rhs);
@@ -119,7 +119,7 @@
 
     // add all the elements, flattening if needed
     for (ConstraintExpression op: elements) {
-      if (op.isAssociative() && op.getClass().equals(getClass())) {
+      if (op.isAssociative() && op.getClass() == getClass()) {
         this.elements.addAll(((ConstraintOperation)op).getElements());
       } else {
         this.elements.add(op);

Modified: trunk/src/jar/query/java/org/mulgara/query/ConstraintTrue.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/ConstraintTrue.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/query/java/org/mulgara/query/ConstraintTrue.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -149,4 +149,7 @@
     return false;
   }
 
+  public boolean equals(Object o) {
+    return o == INSTANCE;
+  }
 }

Modified: trunk/src/jar/query/java/org/mulgara/query/GraphAnswer.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/GraphAnswer.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/query/java/org/mulgara/query/GraphAnswer.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -18,6 +18,7 @@
 import java.util.Map;
 import java.util.List;
 
+import org.apache.log4j.Logger;
 import org.jrdf.graph.BlankNode;
 import org.jrdf.graph.Literal;
 import org.mulgara.query.rdf.BlankNodeImpl;
@@ -30,11 +31,14 @@
  * @copyright © 2008 <a href="http://www.topazproject.org/">The Topaz Project</a>
  * @licence <a href="{@docRoot}/../../LICENCE.txt">Open Software License v3.0</a>
  */
-public class GraphAnswer implements Answer, Serializable {
+public class GraphAnswer extends AbstractAnswer implements Answer, Serializable {
 
   /** The serialization ID. */
   private static final long serialVersionUID = -5499236950928116988L;
 
+  /** Logger */
+  private static final Logger logger = Logger.getLogger(GraphAnswer.class.getName());
+
   /** The variable name for the first column. */
   private static final String CONSTANT_VAR_SUBJECT = "subject";
 
@@ -267,6 +271,17 @@
   }
 
 
+  public boolean equals(Object object) {
+    if ((object != null) && (object instanceof Answer)) {
+      try {
+        return AnswerOperations.equal(this, (Answer) object);
+      } catch (TuplesException e) {
+        logger.fatal("Couldn't test equality of answers", e);
+      }
+    }
+    return false;
+  }
+
   /**
    * An internal method for moving on to the next row, without testing validity.
    * @return <code>true</code> if this call has not exhausted the rows.

Modified: trunk/src/jar/query/java/org/mulgara/query/SingleTransitiveConstraint.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/SingleTransitiveConstraint.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/query/java/org/mulgara/query/SingleTransitiveConstraint.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -162,7 +162,7 @@
 
     // Check that the given object is the correct class if so check each
     // element.
-    if (object.getClass().equals(SingleTransitiveConstraint.class)) {
+    if (object.getClass() == SingleTransitiveConstraint.class) {
       returnValue = transConstraint.equals(((SingleTransitiveConstraint)object).transConstraint);
     }
 

Modified: trunk/src/jar/query/java/org/mulgara/query/TransitiveConstraint.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/TransitiveConstraint.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/query/java/org/mulgara/query/TransitiveConstraint.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -144,7 +144,7 @@
 
     // Check that the given object is the correct class if so check each
     // element.
-    if (object.getClass().equals(TransitiveConstraint.class)) {
+    if (object.getClass() == TransitiveConstraint.class) {
 
       TransitiveConstraint tmpConstraint = (TransitiveConstraint) object;
 

Modified: trunk/src/jar/query/java/org/mulgara/query/UnconstrainedAnswer.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/UnconstrainedAnswer.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/query/java/org/mulgara/query/UnconstrainedAnswer.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -53,7 +53,7 @@
  *
  * @licence <a href="{@docRoot}/../../LICENCE">Mozilla Public License v1.1</a>
  */
-public class UnconstrainedAnswer implements Answer, Serializable {
+public class UnconstrainedAnswer extends AbstractAnswer implements Answer, Serializable {
 
   /**
    * Allow newer compiled version of the stub to operate when changes
@@ -93,18 +93,6 @@
     // null implementation
   }
 
-  /**
-   * Generate an unconstrained {@link Answer}.
-   *
-   * @param row  the cursor position of the constructed instance
-   */
-  private UnconstrainedAnswer(int row) {
-    assert row >= -1;
-    assert row <= +1;
-
-    this.row = row;
-  }
-
   //
   // Methods implementing Answer
   //
@@ -234,7 +222,9 @@
    * @return {@inheritDoc}
    */
   public Object clone() {
-    return new UnconstrainedAnswer(row);
+    UnconstrainedAnswer ans = (UnconstrainedAnswer)super.clone();
+    ans.row = row;
+    return ans;
   }
 
   /**

Modified: trunk/src/jar/query/java/org/mulgara/query/Variable.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/Variable.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/query/java/org/mulgara/query/Variable.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -118,7 +118,7 @@
    * @return <code>true</code> if object is a Variable, and has the same name.
    */
   public boolean equals(Object object) {
-    if ((object == null) || !Variable.class.equals(object.getClass())) return false;
+    if ((object == null) ||  Variable.class != object.getClass()) return false;
     return (object == this) || name.equals(((Variable)object).name);
   }
 

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/TestContext.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/TestContext.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/TestContext.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -19,6 +19,7 @@
 
 import org.jrdf.graph.Node;
 import org.mulgara.query.QueryException;
+import static org.mulgara.util.ObjectUtil.eq;
 
 
 /**
@@ -125,6 +126,15 @@
     return 0;
   }
 
+  public boolean equals(Object o) {
+    if (!(o instanceof TestContext)) return false;
+    TestContext c = (TestContext)o;
+    return c == this ||
+           eq(columnNames, c.columnNames) &&
+           Arrays.deepEquals(rows, c.rows) &&
+           eq(globalizer, c.globalizer);
+  }
+
   /**
    * Gets a previously unused node ID.
    * @return a new Node ID.

Modified: trunk/src/jar/query/java/org/mulgara/query/filter/value/Var.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/value/Var.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/value/Var.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -190,7 +190,7 @@
 
   /** {@inheritDoc} */
   public boolean sameTerm(RDFTerm v) throws QueryException {
-    if (Var.class.equals(v.getClass())) return resolveLocal() == ((Var)v).resolveLocal();
+    if (Var.class == v.getClass()) return resolveLocal() == ((Var)v).resolveLocal();
     return resolve().sameTerm(v);
   }
 

Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/Database.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/Database.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/Database.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -1271,7 +1271,7 @@
     if (internalResolverFactoryMap.containsKey(modelTypeURI)) {
       // check if the other resolver factory is actually the current one
       InternalResolverFactory rf = internalResolverFactoryMap.get(modelTypeURI);
-      if (!rf.resolverFactory.getClass().equals(resolverFactory.getClass())) {
+      if (rf.resolverFactory.getClass() != resolverFactory.getClass()) {
         throw new InitializerException("Graph type " + modelTypeURI + " is already registered to " + rf.resolverFactory);
       } else {
         // already registered

Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/GlobalizedAnswer.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/GlobalizedAnswer.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/GlobalizedAnswer.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -34,7 +34,9 @@
 import org.apache.log4j.Logger;
 
 // Locally written packages
+import org.mulgara.query.AbstractAnswer;
 import org.mulgara.query.Answer;
+import org.mulgara.query.AnswerOperations;
 import org.mulgara.query.TuplesException;
 import org.mulgara.query.Variable;
 import org.mulgara.resolver.spi.GlobalizeException;
@@ -62,7 +64,7 @@
  *
  * @licence <a href="{@docRoot}/../../LICENCE">Mozilla Public License v1.1</a>
  */
-class GlobalizedAnswer implements Answer, Cloneable {
+class GlobalizedAnswer extends AbstractAnswer implements Answer, Cloneable {
   /** Logger.  */
   private final static Logger logger =
       Logger.getLogger(GlobalizedAnswer.class.getName());
@@ -200,12 +202,7 @@
 
   public Object clone() {
     // Copy immutable fields by reference
-    GlobalizedAnswer cloned;
-    try {
-      cloned = (GlobalizedAnswer)super.clone();
-    } catch (CloneNotSupportedException e) {
-      throw new Error(getClass() + " must support cloning", e);
-    }
+    GlobalizedAnswer cloned = (GlobalizedAnswer)super.clone();
     assert cloned != null;
 
     // Copy mutable fields by value
@@ -213,4 +210,15 @@
 
     return cloned;
   }
+
+  public boolean equals(Object object) {
+    if ((object != null) && (object instanceof Answer)) {
+      try {
+        return AnswerOperations.equal(this, (Answer) object);
+      } catch (TuplesException e) {
+        logger.fatal("Couldn't test equality of answers", e);
+      }
+    }
+    return false;
+  }
 }

Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/TransactionalAnswer.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/TransactionalAnswer.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/TransactionalAnswer.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -21,6 +21,7 @@
 import org.apache.log4j.Logger;
 
 // Local packages
+import org.mulgara.query.AbstractAnswer;
 import org.mulgara.query.Answer;
 import org.mulgara.query.MulgaraTransactionException;
 import org.mulgara.query.TuplesException;
@@ -49,7 +50,7 @@
  * @licence Open Software License v3.0</a>
  */
 
-public class TransactionalAnswer implements Answer {
+public class TransactionalAnswer extends AbstractAnswer implements Answer {
   /** Logger.  */
   private static final Logger logger =
     Logger.getLogger(TransactionalAnswer.class.getName());
@@ -242,8 +243,6 @@
       report("Cloned Answer, clone=" + System.identityHashCode(c));
 
       return c;
-    } catch (CloneNotSupportedException ec) {
-      throw new IllegalStateException("Clone failed on Cloneable");
     } catch (MulgaraTransactionException em) {
       throw new IllegalStateException("Failed to associate with transaction", em);
     }

Modified: trunk/src/jar/resolver-filesystem/java/org/mulgara/resolver/filesystem/FileSystemResolution.java
===================================================================
--- trunk/src/jar/resolver-filesystem/java/org/mulgara/resolver/filesystem/FileSystemResolution.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/resolver-filesystem/java/org/mulgara/resolver/filesystem/FileSystemResolution.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -27,8 +27,6 @@
 
 package org.mulgara.resolver.filesystem;
 
-// Java 2 standard packages
-import java.util.*;
 
 // Third party packages
 import org.apache.log4j.Logger;      // Apache Log4J
@@ -36,7 +34,6 @@
 // Locally written packages
 import org.mulgara.query.*;
 import org.mulgara.resolver.spi.Resolution;
-import org.mulgara.resolver.spi.Resolver;
 import org.mulgara.store.tuples.Tuples;
 import org.mulgara.store.tuples.WrappedTuples;
 
@@ -61,7 +58,8 @@
 public class FileSystemResolution extends WrappedTuples implements Resolution {
 
   /** Logger */
-  private static Logger logger = Logger.getLogger(FileSystemResolution.class);
+  @SuppressWarnings("unused")
+  private static final Logger logger = Logger.getLogger(FileSystemResolution.class);
 
   /** The constraint this instance resolves */
   private final Constraint constraint;

Modified: trunk/src/jar/resolver-gis/java/org/mulgara/resolver/gis/tools/AbstractAngle.java
===================================================================
--- trunk/src/jar/resolver-gis/java/org/mulgara/resolver/gis/tools/AbstractAngle.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/resolver-gis/java/org/mulgara/resolver/gis/tools/AbstractAngle.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -57,6 +57,7 @@
   /**
    * Logger. This is named after the class.
    */
+  @SuppressWarnings("unused")
   private final static Logger log = Logger.getLogger(AbstractAngle.class.
       getName());
 

Modified: trunk/src/jar/resolver-gis/java/org/mulgara/resolver/gis/tools/DistanceCalculatorFactory.java
===================================================================
--- trunk/src/jar/resolver-gis/java/org/mulgara/resolver/gis/tools/DistanceCalculatorFactory.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/resolver-gis/java/org/mulgara/resolver/gis/tools/DistanceCalculatorFactory.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -57,6 +57,7 @@
   /**
    * Logger. This is named after the class.
    */
+  @SuppressWarnings("unused")
   private final static Logger log = Logger.getLogger(DistanceCalculatorFactory.class.
       getName());
 

Modified: trunk/src/jar/resolver-gis/java/org/mulgara/resolver/gis/tools/LatitudeImpl.java
===================================================================
--- trunk/src/jar/resolver-gis/java/org/mulgara/resolver/gis/tools/LatitudeImpl.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/resolver-gis/java/org/mulgara/resolver/gis/tools/LatitudeImpl.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -55,6 +55,7 @@
   /**
    * Logger. This is named after the class.
    */
+  @SuppressWarnings("unused")
   private final static Logger log = Logger.getLogger(LatitudeImpl.class.getName());
 
   /**

Modified: trunk/src/jar/resolver-gis/java/org/mulgara/resolver/gis/tools/LongitudeImpl.java
===================================================================
--- trunk/src/jar/resolver-gis/java/org/mulgara/resolver/gis/tools/LongitudeImpl.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/resolver-gis/java/org/mulgara/resolver/gis/tools/LongitudeImpl.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -55,6 +55,7 @@
   /**
    * Logger. This is named after the class.
    */
+  @SuppressWarnings("unused")
   private final static Logger log = Logger.getLogger(LongitudeImpl.class.getName());
 
   /**

Modified: trunk/src/jar/resolver-gis/java/org/mulgara/resolver/gis/tools/SphericalDistanceEstimator.java
===================================================================
--- trunk/src/jar/resolver-gis/java/org/mulgara/resolver/gis/tools/SphericalDistanceEstimator.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/resolver-gis/java/org/mulgara/resolver/gis/tools/SphericalDistanceEstimator.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -56,6 +56,7 @@
   /**
    * Logger. This is named after the class.
    */
+  @SuppressWarnings("unused")
   private final static Logger log = Logger.getLogger(SphericalDistanceEstimator.class.getName());
 
   /** Size of the sphere (in metres). */

Modified: trunk/src/jar/resolver-lucene/java/org/mulgara/resolver/lucene/LuceneConstraint.java
===================================================================
--- trunk/src/jar/resolver-lucene/java/org/mulgara/resolver/lucene/LuceneConstraint.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/resolver-lucene/java/org/mulgara/resolver/lucene/LuceneConstraint.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -31,6 +31,7 @@
 import org.mulgara.query.Variable;
 import org.mulgara.resolver.spi.QueryEvaluationContext;
 import org.mulgara.resolver.spi.SymbolicTransformationException;
+import static org.mulgara.util.ObjectUtil.eq;
 
 /**
  * A constraint representing a lucene query and a score.
@@ -260,6 +261,13 @@
            ", binder=" + binder + "}";
   }
 
+  public boolean equals(Object o) {
+    if (!(o instanceof LuceneConstraint)) return false;
+    LuceneConstraint l = (LuceneConstraint)o;
+    return eq(model, l.model) && eq(subject, l.subject) && eq(predicate, l.predicate) &&
+           eq(object, l.object) && eq(binder, l.binder) && eq(score, l.score);
+  }
+
   /**
    * Not a binary operation, so not associative
    * @return <code>false</code>

Modified: trunk/src/jar/resolver-memory/java/org/mulgara/resolver/memory/Stating.java
===================================================================
--- trunk/src/jar/resolver-memory/java/org/mulgara/resolver/memory/Stating.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/resolver-memory/java/org/mulgara/resolver/memory/Stating.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -66,7 +66,7 @@
 
   public boolean equals(Object object)
   {
-    if (getClass().equals(object.getClass())) {
+    if (getClass() == object.getClass()) {
       return Arrays.equals(x, ((Stating) object).x);
     }
     else {

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	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalAnswer.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -52,12 +52,13 @@
 import java.sql.SQLException;
 
 // Local packages
+import org.mulgara.query.AbstractAnswer;
 import org.mulgara.query.Answer;
 import org.mulgara.query.Cursor;
 import org.mulgara.query.TuplesException;
 import org.mulgara.query.Variable;
 
-public class RelationalAnswer implements Answer {
+public class RelationalAnswer extends AbstractAnswer implements Answer {
   private static Logger logger = Logger.getLogger(RelationalAnswer.class.getName());
 
   private Connection conn;
@@ -79,14 +80,10 @@
 
 
   public Object clone() {
-    try {
-      RelationalAnswer cloned = (RelationalAnswer)super.clone();
-      cloned.result = null;
+    RelationalAnswer cloned = (RelationalAnswer)super.clone();
+    cloned.result = null;
 
-      return cloned;
-    } catch (CloneNotSupportedException ec) {
-      throw new IllegalStateException("CloneNotSupportedException thrown");
-    }
+    return cloned;
   }
 
   public Object getObject(int column) throws TuplesException {

Modified: trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalConstraint.java
===================================================================
--- trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalConstraint.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/resolver-relational/java/org/mulgara/resolver/relational/RelationalConstraint.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -42,6 +42,8 @@
 package org.mulgara.resolver.relational;
 
 // Java 2 standard packages
+import static org.mulgara.util.ObjectUtil.eq;
+
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Set;
@@ -253,4 +255,12 @@
   public String toString() {
     return "RC{" + variables + "} | " + rdfTypeConstraints + " # " + predConstraints;
   }
+
+  public boolean equals(Object o) {
+    if (!(o instanceof RelationalConstraint)) return false;
+    RelationalConstraint r = (RelationalConstraint)o;
+    return eq(model, r.model) && eq(variables, r.variables) &&
+           eq(rdfTypeConstraints, r.rdfTypeConstraints) && eq(predConstraints, r.predConstraints);
+  }
+
 }

Modified: trunk/src/jar/resolver-spi/java/org/mulgara/resolver/spi/ConjunctiveTransformerUnitTest.java
===================================================================
--- trunk/src/jar/resolver-spi/java/org/mulgara/resolver/spi/ConjunctiveTransformerUnitTest.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/resolver-spi/java/org/mulgara/resolver/spi/ConjunctiveTransformerUnitTest.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -584,8 +584,8 @@
     
     @SuppressWarnings("unchecked")
     SortedMap<ConstraintElement,?> createSortedMap(Map<ConstraintElement,?> m) {
-      SortedMap<ConstraintElement,?> sm = new TreeMap(m);
-      for (Map.Entry entry: sm.entrySet()) {
+      SortedMap<ConstraintElement,Object> sm = new TreeMap<ConstraintElement,Object>(m);
+      for (Map.Entry<ConstraintElement,Object> entry: sm.entrySet()) {
         Object v = entry.getValue();
         if (v instanceof Map) {
           entry.setValue(createSortedMap((Map<ConstraintElement,?>)v));

Modified: trunk/src/jar/resolver-spi/java/org/mulgara/resolver/spi/TuplesContext.java
===================================================================
--- trunk/src/jar/resolver-spi/java/org/mulgara/resolver/spi/TuplesContext.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/resolver-spi/java/org/mulgara/resolver/spi/TuplesContext.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -141,5 +141,9 @@
   public long getUnboundVal() {
     return Tuples.UNBOUND;
   }
-  
+
+  public boolean equals(Object o) {
+    return this == o;
+  }
+
 }

Modified: trunk/src/jar/resolver-xsd/java/org/mulgara/resolver/xsd/IntervalConstraint.java
===================================================================
--- trunk/src/jar/resolver-xsd/java/org/mulgara/resolver/xsd/IntervalConstraint.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/resolver-xsd/java/org/mulgara/resolver/xsd/IntervalConstraint.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -305,7 +305,7 @@
   public boolean equals(Object object) {
     if (object == null) return false;
 
-    if (!object.getClass().equals(IntervalConstraint.class)) return false;
+    if (object.getClass() != IntervalConstraint.class) return false;
 
     assert object instanceof IntervalConstraint;
     IntervalConstraint intervalConstraint = (IntervalConstraint) object;

Modified: trunk/src/jar/resolver-xsd/java/org/mulgara/resolver/xsd/IntervalConstraintDescriptor.java
===================================================================
--- trunk/src/jar/resolver-xsd/java/org/mulgara/resolver/xsd/IntervalConstraintDescriptor.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/resolver-xsd/java/org/mulgara/resolver/xsd/IntervalConstraintDescriptor.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -88,7 +88,7 @@
     throws Exception {
 
     // Validate "constraintExpression" parameter
-    if (!constraintExpression.getClass().equals(IntervalConstraint.class)) {
+    if (constraintExpression.getClass() != IntervalConstraint.class) {
       throw new IllegalArgumentException("Bad \"constraintExpression\" type: " + constraintExpression + " of class " + constraintExpression.getClass());
     }
 

Modified: trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/BlankNodeWrapperAnswer.java
===================================================================
--- trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/BlankNodeWrapperAnswer.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/BlankNodeWrapperAnswer.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -36,6 +36,7 @@
 import org.jrdf.graph.*;
 
 // Third party packages
+import org.mulgara.query.AbstractAnswer;
 import org.mulgara.query.Answer;
 import org.mulgara.query.TuplesException;
 import org.mulgara.query.Variable;
@@ -58,11 +59,11 @@
  *
  * @licence <a href="{@docRoot}/../../LICENCE">Mozilla Public License v1.1</a>
  */
-public class BlankNodeWrapperAnswer implements Answer {
+public class BlankNodeWrapperAnswer extends AbstractAnswer implements Answer {
 
   /** Logger */
   @SuppressWarnings("unused")
-  private static Logger logger = Logger.getLogger(BlankNodeWrapperAnswer.class.getName());
+  private static final Logger logger = Logger.getLogger(BlankNodeWrapperAnswer.class.getName());
 
   /**
    * The wrapped instance.
@@ -89,14 +90,9 @@
   }
 
   public Object clone() {
-    try {
-      BlankNodeWrapperAnswer cloned = (BlankNodeWrapperAnswer) super.clone();
-      cloned.answer = (Answer)this.answer.clone();
-      return cloned;
-    }
-    catch (CloneNotSupportedException e) {
-      throw new RuntimeException("BlankNodeWrapperAnswer not cloneable");
-    }
+    BlankNodeWrapperAnswer cloned = (BlankNodeWrapperAnswer) super.clone();
+    cloned.answer = (Answer)this.answer.clone();
+    return cloned;
   }
 
   public Object getObject(int column) throws TuplesException {
@@ -193,4 +189,5 @@
   public boolean next() throws TuplesException {
     return answer.next();
   }
+  
 }

Modified: trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/RemoteAnswerWrapperAnswer.java
===================================================================
--- trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/RemoteAnswerWrapperAnswer.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/server-rmi/java/org/mulgara/server/rmi/RemoteAnswerWrapperAnswer.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -34,6 +34,7 @@
 import org.apache.log4j.*;
 
 // Local packages
+import org.mulgara.query.AbstractAnswer;
 import org.mulgara.query.Answer;
 import org.mulgara.query.TuplesException;
 import org.mulgara.query.Variable;
@@ -52,7 +53,7 @@
  *      Software Pty Ltd</a>
  * @licence <a href="{@docRoot}/../../LICENCE">Mozilla Public License v1.1</a>
  */
-class RemoteAnswerWrapperAnswer implements Answer, Cloneable {
+class RemoteAnswerWrapperAnswer extends AbstractAnswer implements Answer, Cloneable {
   /** logger */
   private static Logger logger =
       Logger.getLogger(AnswerWrapperRemoteAnswer.class.getName());

Modified: trunk/src/jar/store-stringpool/java/org/mulgara/store/stringpool/AbstractSPObject.java
===================================================================
--- trunk/src/jar/store-stringpool/java/org/mulgara/store/stringpool/AbstractSPObject.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/store-stringpool/java/org/mulgara/store/stringpool/AbstractSPObject.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -215,4 +215,10 @@
     return a == b ? 0 : (a < b ? -1 : 1);
   }
 
+  /**
+   * Default equality test. Based on the data type and the raw buffer.
+   */
+  public boolean equals(Object o) {
+    return o.getClass() == getClass() && ((SPObject)o).getData().equals(getData());
+  }
 }

Modified: trunk/src/jar/store-stringpool/java/org/mulgara/store/stringpool/xa/SPBase64BinaryImpl.java
===================================================================
--- trunk/src/jar/store-stringpool/java/org/mulgara/store/stringpool/xa/SPBase64BinaryImpl.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/store-stringpool/java/org/mulgara/store/stringpool/xa/SPBase64BinaryImpl.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -298,4 +298,10 @@
   public SPComparator getSPComparator() {
     return SPBinaryComparator.getInstance();
   }
+
+  public boolean equals(Object o) {
+    if (!(o instanceof SPBase64BinaryImpl)) return false;
+    SPBase64BinaryImpl b = (SPBase64BinaryImpl)o;
+    return data.equals(b.data);
+  }
 }

Modified: trunk/src/jar/tuples/java/org/mulgara/store/tuples/AbstractTuples.java
===================================================================
--- trunk/src/jar/tuples/java/org/mulgara/store/tuples/AbstractTuples.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/tuples/java/org/mulgara/store/tuples/AbstractTuples.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -488,66 +488,72 @@
    * @return if the object is equal by row number, variables and row.
    */
   public boolean equals(Object o) {
+    return (o instanceof Tuples) && equals(this, (Tuples)o);
+  }
+
+  /**
+   * Tests if two tuples are identical
+   * @param first The first tuples to test.
+   * @param second The second tuples to test.
+   * @return true if both tuples compare equal by row number, variables and by row.
+   */
+  public static boolean equals(Tuples first, Tuples second) {
     boolean isEqual = false;
 
-    // Make sure it's not null
-    if (o != null) {
-      try {
-        // Try and cast the passed object - if not then they aren't equal.
-        Tuples testTuples = (Tuples) o;
+    if (first == second) return true;
 
-        // Ensure that the row count is the same
-        if (getRowCount() == testTuples.getRowCount()) {
-          // Ensure that the variable lists are equal
-          if (Arrays.asList(getVariables()).equals(
-              Arrays.asList(testTuples.getVariables()))) {
-            // Clone tuples to be compared
-            Tuples t1 = (Tuples) clone();
-            Tuples t2 = (Tuples) testTuples.clone();
+    if (first == null || second == null) return false;
 
-            try {
-              // Put them at the start.
-              t1.beforeFirst();
-              t2.beforeFirst();
+    try {
+      // Ensure that the row count is the same
+      if (first.getRowCount() == second.getRowCount()) {
+        // Ensure that the variable lists are equal
+        if (Arrays.asList(first.getVariables()).equals(
+            Arrays.asList(second.getVariables()))) {
+          // Clone tuples to be compared
+          Tuples t1 = (Tuples) first.clone();
+          Tuples t2 = (Tuples) second.clone();
 
-              boolean finished = false;
-              boolean tuplesEqual = true;
+          try {
+            // Put them at the start.
+            t1.beforeFirst();
+            t2.beforeFirst();
 
-              // Repeat until there are no more rows or we find an unequal row.
-              while (!finished) {
-                // Assume that if t1 has next so does t2.
-                finished = !t1.next();
-                t2.next();
+            boolean finished = false;
+            boolean tuplesEqual = true;
 
-                // If we're not finished compare the row.
-                if (!finished) {
-                  // Check if the elements in both rows are equal.
-                  for (int variableIndex = 0;
-                       variableIndex < t1.getNumberOfVariables();
-                       variableIndex++) {
-                    // If they're not equal quit the loop and set tuplesEqual to
-                    // false.
-                    if (t1.getColumnValue(variableIndex) !=
-                        t2.getColumnValue(variableIndex)) {
-                      tuplesEqual = false;
-                      finished = true;
-                    }
+            // Repeat until there are no more rows or we find an unequal row.
+            while (!finished) {
+              // Assume that if t1 has next so does t2.
+              finished = !t1.next();
+              t2.next();
+
+              // If we're not finished compare the row.
+              if (!finished) {
+                // Check if the elements in both rows are equal.
+                for (int variableIndex = 0;
+                     variableIndex < t1.getNumberOfVariables();
+                     variableIndex++) {
+                  // If they're not equal quit the loop and set tuplesEqual to
+                  // false.
+                  if (t1.getColumnValue(variableIndex) !=
+                      t2.getColumnValue(variableIndex)) {
+                    tuplesEqual = false;
+                    finished = true;
                   }
                 }
               }
+            }
 
-              isEqual = tuplesEqual;
-            } finally {
-              t1.close();
-              t2.close();
-            }
+            isEqual = tuplesEqual;
+          } finally {
+            t1.close();
+            t2.close();
           }
         }
-      } catch (ClassCastException cce) {
-        // Not of the correct type return false.
-      } catch (TuplesException ex) {
-        throw new RuntimeException(ex.toString(), ex);
       }
+    } catch (TuplesException ex) {
+      throw new RuntimeException(ex.toString(), ex);
     }
 
     return isEqual;

Modified: trunk/src/jar/tuples/java/org/mulgara/store/tuples/LeftJoin.java
===================================================================
--- trunk/src/jar/tuples/java/org/mulgara/store/tuples/LeftJoin.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/tuples/java/org/mulgara/store/tuples/LeftJoin.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -736,6 +736,13 @@
     public long getRowExpectedCount() throws TuplesException {
       return wrapped.getRowExpectedCount();
     }
-    
+
+    /**
+     * Required by Tuples.
+     */
+    public boolean equals(Object o) {
+      return (o instanceof Tuples) && AbstractTuples.equals(this, (Tuples)o);
+    }
+
   }
 }

Modified: trunk/src/jar/tuples/java/org/mulgara/store/tuples/WrappedTuples.java
===================================================================
--- trunk/src/jar/tuples/java/org/mulgara/store/tuples/WrappedTuples.java	2011-09-08 15:32:38 UTC (rev 2020)
+++ trunk/src/jar/tuples/java/org/mulgara/store/tuples/WrappedTuples.java	2011-09-09 03:49:39 UTC (rev 2021)
@@ -328,6 +328,13 @@
   }
 
   /**
+   * Required by Tuples.
+   */
+  public boolean equals(Object o) {
+    return (o instanceof Tuples) && AbstractTuples.equals(this, (Tuples)o);
+  }
+
+  /**
    * Copied from AbstractTuples.
    */
   public Annotation getAnnotation(Class<? extends Annotation> annotationClass) throws TuplesException {



More information about the Mulgara-svn mailing list