You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2013/03/11 18:56:41 UTC

svn commit: r1455261 - in /jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql: algebra/Transformer.java expr/Expr.java graph/NodeTransformLib.java lib/NodeConverters.java

Author: andy
Date: Mon Mar 11 17:56:41 2013
New Revision: 1455261

URL: http://svn.apache.org/r1455261
Log:
JENA-389
Allow the transformation to take separate algbera and expression transformation.
Renaming nodes takes full control of the process, not relying on
the Transformer to traverse expressions.

Removed:
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/lib/NodeConverters.java
Modified:
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/Transformer.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/Expr.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/graph/NodeTransformLib.java

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/Transformer.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/Transformer.java?rev=1455261&r1=1455260&r2=1455261&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/Transformer.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/Transformer.java Mon Mar 11 17:56:41 2013
@@ -47,10 +47,21 @@ public class Transformer
     public static Op transform(Transform transform, Op op)
     { return get().transformation(transform, op, null, null) ; }
     
+    /** Transform an algebra expression and the expressions */
+    public static Op transform(Transform transform, ExprTransform exprTransform, Op op)
+    { return get().transformation(transform, exprTransform, op, null, null) ; }
+
+    /** Transformation with specific Transform and default ExprTransform (apply transform inside pattern expressions like NOT EXISTS) */ 
     public static Op transform(Transform transform, Op op, OpVisitor beforeVisitor, OpVisitor afterVisitor)
     {
         return get().transformation(transform, op, beforeVisitor, afterVisitor) ;
     }
+    
+    /** Transformation with specific Transform and ExprTransform applied */
+    public static Op transform(Transform transform, ExprTransform exprTransform, Op op, OpVisitor beforeVisitor, OpVisitor afterVisitor)
+    {
+        return get().transformation(transform, exprTransform, op, beforeVisitor, afterVisitor) ;
+    }
 
     /** Transform an algebra expression except skip (leave alone) any OpService nodes */
     public static Op transformSkipService(Transform transform, Op op)
@@ -59,6 +70,13 @@ public class Transformer
     }
 
     /** Transform an algebra expression except skip (leave alone) any OpService nodes */
+    public static Op transformSkipService(Transform transform, ExprTransform exprTransform, Op op)
+    {
+        return transformSkipService(transform, exprTransform, op, null, null) ; 
+    }
+
+
+    /** Transform an algebra expression except skip (leave alone) any OpService nodes */
     public static Op transformSkipService(Transform transform, Op op, OpVisitor beforeVisitor, OpVisitor afterVisitor)
     {
         // Skip SERVICE
@@ -66,7 +84,6 @@ public class Transformer
         {
             // Simplest way but still walks the OpService subtree (and throws away the transformation).
             Transform walker = new TransformSkipService(transform) ;
-            ExprTransform exprTransform = new ExprTransformApplyTransform(transform, beforeVisitor, afterVisitor) ;
             return Transformer.transform(walker, op, beforeVisitor, afterVisitor) ;
         }
         else
@@ -79,7 +96,26 @@ public class Transformer
             return v.result() ;
         }
     }
-    
+
+    /** Transform an algebra expression except skip (leave alone) any OpService nodes */
+    public static Op transformSkipService(Transform transform, ExprTransform exprTransform, Op op, OpVisitor beforeVisitor, OpVisitor afterVisitor)
+    {
+        // Skip SERVICE
+        if ( true )
+        {
+            // Simplest way but still walks the OpService subtree (and throws away the transformation).
+            Transform walker = new TransformSkipService(transform) ;
+            return Transformer.transform(walker, exprTransform, op, beforeVisitor, afterVisitor) ;
+        }
+        else
+        {
+            ApplyTransformVisitorServiceAsLeaf v = new ApplyTransformVisitorServiceAsLeaf(transform, exprTransform) ;
+            WalkerVisitorSkipService walker = new WalkerVisitorSkipService(v, beforeVisitor, afterVisitor) ;
+            OpWalker.walk(walker, op) ;
+            return v.result() ;
+        }
+    }
+
     /** Transform an Op - not recursively */ 
     public static Op transformOne(Transform transform, Op op)
     {
@@ -93,6 +129,11 @@ public class Transformer
     protected Op transformation(Transform transform, Op op, OpVisitor beforeVisitor, OpVisitor afterVisitor)
     {
         ExprTransform exprTransform = new ExprTransformApplyTransform(transform, beforeVisitor, afterVisitor) ;
+        return transformation(transform, exprTransform, op, beforeVisitor, afterVisitor) ;
+    }
+        
+    protected Op transformation(Transform transform, ExprTransform exprTransform, Op op, OpVisitor beforeVisitor, OpVisitor afterVisitor)
+    {
         ApplyTransformVisitor v = new ApplyTransformVisitor(transform, exprTransform) ;
         return transformation(v, op, beforeVisitor, afterVisitor) ;
     }

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/Expr.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/Expr.java?rev=1455261&r1=1455260&r2=1455261&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/Expr.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/Expr.java Mon Mar 11 17:56:41 2013
@@ -61,7 +61,7 @@ public interface Expr
      */
     public NodeValue eval(Binding binding, FunctionEnv env) ;
     
-    // These (copySubstitute, copyNodeTransform) predate transform support and should be chnaged.
+    // These (copySubstitute, applyNodeTransform) predate transform support and should be changed.
     // But they work so there is no hurry.
     
     /** Deep copy with substitution */

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/graph/NodeTransformLib.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/graph/NodeTransformLib.java?rev=1455261&r1=1455260&r2=1455261&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/graph/NodeTransformLib.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/graph/NodeTransformLib.java Mon Mar 11 17:56:41 2013
@@ -43,9 +43,8 @@ public class NodeTransformLib
     public static Op transform(NodeTransform nodeTransform, Op op)
     {
         Transform opTransform = new NodeTransformOp(nodeTransform) ; 
-        return Transformer.transform(opTransform, op) ;
+        return Transformer.transform(opTransform, null, op) ;   // No expr transform - we do it ourselves.
     }
-
     
     /** Do a node->node conversion of a BGP - return original BGP for "no change" */
     public static BasicPattern transform(NodeTransform nodeTransform, BasicPattern pattern)