[Mulgara-svn] r1510 - in branches/mgr-183-project/src/jar: resolver-store/java/org/mulgara/resolver/store tuples/java/org/mulgara/store/tuples

andrae at mulgara.org andrae at mulgara.org
Tue Feb 17 11:45:48 UTC 2009


Author: andrae
Date: 2009-02-17 03:45:47 -0800 (Tue, 17 Feb 2009)
New Revision: 1510

Added:
   branches/mgr-183-project/src/jar/tuples/java/org/mulgara/store/tuples/ReresolveAnnotation.java
Modified:
   branches/mgr-183-project/src/jar/resolver-store/java/org/mulgara/resolver/store/StatementStoreResolution.java
   branches/mgr-183-project/src/jar/tuples/java/org/mulgara/store/tuples/AbstractTuples.java
   branches/mgr-183-project/src/jar/tuples/java/org/mulgara/store/tuples/Tuples.java
   branches/mgr-183-project/src/jar/tuples/java/org/mulgara/store/tuples/TuplesOperations.java
   branches/mgr-183-project/src/jar/tuples/java/org/mulgara/store/tuples/WrappedTuples.java
Log:
refs #183

Migrate the ReresolvableResolution interface to the ReresolveAnnotation.

This clears up the dependency on class introspection for optimisation, allowing the wrapping of reresolvable
tuples without losing their ability to participate in optimisation.



Modified: branches/mgr-183-project/src/jar/resolver-store/java/org/mulgara/resolver/store/StatementStoreResolution.java
===================================================================
--- branches/mgr-183-project/src/jar/resolver-store/java/org/mulgara/resolver/store/StatementStoreResolution.java	2009-02-17 11:37:18 UTC (rev 1509)
+++ branches/mgr-183-project/src/jar/resolver-store/java/org/mulgara/resolver/store/StatementStoreResolution.java	2009-02-17 11:45:47 UTC (rev 1510)
@@ -39,13 +39,15 @@
 
 // Locally written packages
 import org.mulgara.query.*;
-import org.mulgara.resolver.spi.ReresolvableResolution;
+//import org.mulgara.resolver.spi.ReresolvableResolution;
+import org.mulgara.resolver.spi.Resolution;
 import org.mulgara.store.nodepool.NodePool;
 import org.mulgara.store.statement.StatementStore;
 import org.mulgara.store.statement.StatementStoreException;
 import org.mulgara.store.tuples.Annotation;
 import org.mulgara.store.tuples.AbstractTuples;
 import org.mulgara.store.tuples.DefinablePrefixAnnotation;
+import org.mulgara.store.tuples.ReresolveAnnotation;
 import org.mulgara.store.tuples.StoreTuples;
 import org.mulgara.store.tuples.Tuples;
 import org.mulgara.store.tuples.TuplesOperations;
@@ -66,7 +68,8 @@
  *
  * @licence <a href="{@docRoot}/../../LICENCE">Mozilla Public License v1.1</a>
  */
-class StatementStoreResolution extends AbstractTuples implements ReresolvableResolution {
+//class StatementStoreResolution extends AbstractTuples implements ReresolvableResolution {
+class StatementStoreResolution extends AbstractTuples implements Resolution {
   private final static long ROWCOUNT_UNCALCULATED = -1;
   private final static int ROWCARD_UNCALCULATED = -1;
 
@@ -350,29 +353,7 @@
   }
 
 
-  public ReresolvableResolution reresolve(final Map<? extends ConstraintElement, Long> bindings) throws TuplesException {
-    boolean reconstrain = false;
-    ConstraintElement[] e = new ConstraintElement[4];
-    for (int i = 0; i < 4; i++) {
-      e[i] = constraint.getElement(i);
 
-      if (e[i] instanceof Variable) {
-        Long value = bindings.get(e[i]);
-        if (value != null) {
-          e[i] = new LocalNode(value.longValue());
-          reconstrain = true;
-        }
-      }
-    }
-    if (reconstrain) {
-      ConstraintImpl newConstraint = new ConstraintImpl(e[0], e[1], e[2], e[3]);
-      return new StatementStoreResolution(newConstraint, store);
-    } else {
-      return null;
-    }
-  }
-
-
   public void beforeFirst() throws TuplesException {
     beforeFirst(Tuples.NO_PREFIX, 0);
   }
@@ -578,6 +559,30 @@
           defineIndex(bound);
         }
       };
+    } else if (annotation.equals(ReresolveAnnotation.class)) {
+      return new ReresolveAnnotation() {
+        public Tuples reresolve(final Map<? extends ConstraintElement, Long> bindings) throws TuplesException {
+          boolean reconstrain = false;
+          ConstraintElement[] e = new ConstraintElement[4];
+          for (int i = 0; i < 4; i++) {
+            e[i] = constraint.getElement(i);
+
+            if (e[i] instanceof Variable) {
+              Long value = bindings.get(e[i]);
+              if (value != null) {
+                e[i] = new LocalNode(value.longValue());
+                reconstrain = true;
+              }
+            }
+          }
+          if (reconstrain) {
+            ConstraintImpl newConstraint = new ConstraintImpl(e[0], e[1], e[2], e[3]);
+            return new StatementStoreResolution(newConstraint, store);
+          } else {
+            return null;
+          }
+        }
+      };
     } else {
       return null;
     }

Modified: branches/mgr-183-project/src/jar/tuples/java/org/mulgara/store/tuples/AbstractTuples.java
===================================================================
--- branches/mgr-183-project/src/jar/tuples/java/org/mulgara/store/tuples/AbstractTuples.java	2009-02-17 11:37:18 UTC (rev 1509)
+++ branches/mgr-183-project/src/jar/tuples/java/org/mulgara/store/tuples/AbstractTuples.java	2009-02-17 11:45:47 UTC (rev 1510)
@@ -578,7 +578,7 @@
     variables = variableArray;
   }
 
-  public Annotation getAnnotation(Class<? extends Annotation> annotationClass) throws TuplesException {
+  public Annotation getAnnotation(Class<? extends Annotation> annotation) throws TuplesException {
     return null;
   }
 }

Added: branches/mgr-183-project/src/jar/tuples/java/org/mulgara/store/tuples/ReresolveAnnotation.java
===================================================================
--- branches/mgr-183-project/src/jar/tuples/java/org/mulgara/store/tuples/ReresolveAnnotation.java	                        (rev 0)
+++ branches/mgr-183-project/src/jar/tuples/java/org/mulgara/store/tuples/ReresolveAnnotation.java	2009-02-17 11:45:47 UTC (rev 1510)
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2009 Andrae Muys
+ * Licensed under the Open Software Licence  3.0
+ */
+
+package org.mulgara.store.tuples;
+
+// Java packages
+import java.util.Map;
+
+// Local packages
+import org.mulgara.query.ConstraintElement;
+import org.mulgara.query.TuplesException;
+
+/**
+ * Allows tuple to be partially reresolved based on bindings for variables.
+ *
+ * @author <a href="http://netymon.com/people/staff/andrae">Andrae Muys</a>
+ * @copyright &copy;2009 <a href="mailto:andrae at netymon.com">Andrae Muys</a>
+ */
+
+public interface ReresolveAnnotation extends Annotation {
+  /**
+   * Reresolve the annotation's tuples with the new bindings.
+   */
+  public Tuples reresolve(final Map<? extends ConstraintElement, Long> bindings) throws TuplesException;
+}

Modified: branches/mgr-183-project/src/jar/tuples/java/org/mulgara/store/tuples/Tuples.java
===================================================================
--- branches/mgr-183-project/src/jar/tuples/java/org/mulgara/store/tuples/Tuples.java	2009-02-17 11:37:18 UTC (rev 1509)
+++ branches/mgr-183-project/src/jar/tuples/java/org/mulgara/store/tuples/Tuples.java	2009-02-17 11:45:47 UTC (rev 1510)
@@ -274,5 +274,5 @@
    *
    * @return An annotation of the class requested, or null if none exists.
    */
-  public Annotation getAnnotation(Class<? extends Annotation> annotationClass) throws TuplesException;
+  public Annotation getAnnotation(Class<? extends Annotation> annotation) throws TuplesException;
 }

Modified: branches/mgr-183-project/src/jar/tuples/java/org/mulgara/store/tuples/TuplesOperations.java
===================================================================
--- branches/mgr-183-project/src/jar/tuples/java/org/mulgara/store/tuples/TuplesOperations.java	2009-02-17 11:37:18 UTC (rev 1509)
+++ branches/mgr-183-project/src/jar/tuples/java/org/mulgara/store/tuples/TuplesOperations.java	2009-02-17 11:45:47 UTC (rev 1510)
@@ -466,9 +466,9 @@
     }
 
     List<Tuples> result = extractNonReresolvableTuples(operands);
-    // operands is now effectively a List<ReresolvableResolution>
+    // operands is now a list of reresolvable tuples.
 
-    List<ReresolvableResolution> reresolved;
+    List<Tuples> reresolved;
     do {
       reresolved = resolveNewlyBoundFreeNames(operands, bindings);
       if (!bindSingleRowOperands(bindings, reresolved)) {
@@ -540,7 +540,7 @@
     Iterator<Tuples> iter = workingSet.iterator();
     while (iter.hasNext()) {
       Tuples operand = iter.next();
-      if (!(operand instanceof ReresolvableResolution)) {
+      if (operand.getAnnotation(ReresolveAnnotation.class) == null) {
         nonReresolvable.add(operand);
         iter.remove();
       }
@@ -553,15 +553,20 @@
   /**
    * Compares the free names in the working-set against the current bindings
    * and resolves any constraints found with bindings.
-   * @param workingSet A set of ReresolvableResolution, though it will be represented as a set of Tuples
+   * @param workingSet A set of reresolvable tuples.
    * @return List of ConstrainedTuples resulting from any resolutions required.
    */
-  private static List<ReresolvableResolution> resolveNewlyBoundFreeNames(List<Tuples> workingSet, Map<Variable,Long> bindings) throws TuplesException {
-    List<ReresolvableResolution> reresolved = new ArrayList<ReresolvableResolution>();
+  private static List<Tuples> resolveNewlyBoundFreeNames(List<Tuples> workingSet, Map<Variable,Long> bindings) throws TuplesException {
+    List<Tuples> reresolved = new ArrayList<Tuples>();
     Iterator<Tuples> iter = workingSet.iterator();
     while (iter.hasNext()) {
-      ReresolvableResolution tuples = (ReresolvableResolution)iter.next();
-      ReresolvableResolution updated = tuples.reresolve(bindings);
+      Tuples tuples = (Tuples)iter.next();
+      ReresolveAnnotation annotation = (ReresolveAnnotation)tuples.getAnnotation(ReresolveAnnotation.class);
+      if (annotation == null) {
+        logger.warn("Non-reresolvable annotation found in reresolve working set - skipping");
+        continue;
+      }
+      Tuples updated = annotation.reresolve(bindings);
       if (updated != null) {
         reresolved.add(updated);
         tuples.close();

Modified: branches/mgr-183-project/src/jar/tuples/java/org/mulgara/store/tuples/WrappedTuples.java
===================================================================
--- branches/mgr-183-project/src/jar/tuples/java/org/mulgara/store/tuples/WrappedTuples.java	2009-02-17 11:37:18 UTC (rev 1509)
+++ branches/mgr-183-project/src/jar/tuples/java/org/mulgara/store/tuples/WrappedTuples.java	2009-02-17 11:45:47 UTC (rev 1510)
@@ -328,7 +328,7 @@
   /**
    * Copied from AbstractTuples.
    */
-  public Annotation getAnnotation(Class<? extends Annotation> annotationClass) throws TuplesException {
+  public Annotation getAnnotation(Class<? extends Annotation> annotation) throws TuplesException {
     return null;
   }
 }




More information about the Mulgara-svn mailing list