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/02/06 13:13:15 UTC

svn commit: r1442922 - in /jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify: UpdateEngine.java UpdateEngineBase.java UpdateEngineMain.java UpdateEngineNonStreaming.java UpdateProcessorBase.java

Author: andy
Date: Wed Feb  6 12:13:15 2013
New Revision: 1442922

URL: http://svn.apache.org/viewvc?rev=1442922&view=rev
Log:
Add UpdateEngine.execute
Move loop to push update operations to the UpdateEngineWorker
from UpdateProcessorBase to UpdateEngineMain using UpdateEngine.execute

Modified:
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngine.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineBase.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineMain.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineNonStreaming.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateProcessorBase.java

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngine.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngine.java?rev=1442922&r1=1442921&r2=1442922&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngine.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngine.java Wed Feb  6 12:13:15 2013
@@ -18,8 +18,19 @@
 
 package com.hp.hpl.jena.sparql.modify;
 
+import com.hp.hpl.jena.update.UpdateRequest ;
+
 /**
  * An UpdateEngine provides an interface to execute a SPARQL update request.
+ * An update engine is use-once; that is, it executes a single SPARQL Update request
+ * (there may be multiple operations in one request).
+ * 
+ * An UpdateEngine is called in the sequence:
+ * <ul>
+ * <li>startRequest()</li> 
+ * <li>execute()</li> 
+ * <li>finishRequest()</li> 
+ * </ul>  
  */
 public interface UpdateEngine
 {
@@ -29,6 +40,11 @@ public interface UpdateEngine
     public void startRequest();
     
     /**
+     *  Signal start of a request being executed
+     */
+    public void execute(UpdateRequest request);
+
+    /**
      * Signal end of a request being executed 
      */
     public void finishRequest();

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineBase.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineBase.java?rev=1442922&r1=1442921&r2=1442922&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineBase.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineBase.java Wed Feb  6 12:13:15 2013
@@ -18,12 +18,15 @@
 
 package com.hp.hpl.jena.sparql.modify;
 
+import org.apache.jena.atlas.iterator.Iter ;
+
 import com.hp.hpl.jena.query.ARQ ;
 import com.hp.hpl.jena.sparql.ARQConstants ;
 import com.hp.hpl.jena.sparql.core.DatasetGraph ;
 import com.hp.hpl.jena.sparql.util.Context ;
 import com.hp.hpl.jena.sparql.util.NodeFactory ;
 import com.hp.hpl.jena.update.GraphStore ;
+import com.hp.hpl.jena.update.UpdateRequest ;
 
 public abstract class UpdateEngineBase implements UpdateEngine
 {
@@ -37,6 +40,13 @@ public abstract class UpdateEngineBase i
         this.context = setupContext(context, graphStore) ;
     }
     
+    @Override
+    public void execute(UpdateRequest request)
+    {
+        UpdateSink sink = getUpdateSink();
+        Iter.sendToSink(request, sink);  // Will call close on sink if there are no exceptions
+    }
+    
     // Put any 
     private static Context setupContext(Context context, DatasetGraph dataset)
     {

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineMain.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineMain.java?rev=1442922&r1=1442921&r2=1442922&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineMain.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineMain.java Wed Feb  6 12:13:15 2013
@@ -18,9 +18,12 @@
 
 package com.hp.hpl.jena.sparql.modify;
 
+import org.apache.jena.atlas.iterator.Iter ;
+
 import com.hp.hpl.jena.sparql.modify.request.UpdateVisitor ;
 import com.hp.hpl.jena.sparql.util.Context ;
 import com.hp.hpl.jena.update.GraphStore ;
+import com.hp.hpl.jena.update.UpdateRequest ;
 
 /**
  * Default implementation of an update engine
@@ -52,13 +55,26 @@ public class UpdateEngineMain extends Up
         graphStore.finishRequest();
     }
     
+    @Override
+    public void execute(UpdateRequest request)
+    {
+        UpdateSink sink = getUpdateSink();
+        Iter.sendToSink(request, sink);  // Will call close on sink if there are no exceptions
+    }
+    
+    private UpdateSink updateSink = null ;
+    
     /**
-     * Creates an {@link UpdateVisitorSink} by using the {@link UpdateVisitor} provided by the {@link #prepareWorker()} method, which will be used to visit each update operation.
+     * Returns the {@link UpdateSink}.  In this implementation, this is done by
+     * with an {@link UpdateVisitor} which will visit each update operation
+     * and send the operation to the associated {@link UpdateEngineWorker}.
      */
     @Override
     public UpdateSink getUpdateSink()
     {
-        return new UpdateVisitorSink(this.prepareWorker());
+        if ( updateSink == null )
+            updateSink = new UpdateVisitorSink(this.prepareWorker());
+        return updateSink ;
     }
     
     /**

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineNonStreaming.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineNonStreaming.java?rev=1442922&r1=1442921&r2=1442922&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineNonStreaming.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateEngineNonStreaming.java Wed Feb  6 12:13:15 2013
@@ -25,12 +25,14 @@ import com.hp.hpl.jena.update.Update ;
 import com.hp.hpl.jena.update.UpdateRequest ;
 
 /**
- * Default implementation of an update engine that does not stream data, instead it will build it up into an
+ * Example implementation of an update engine that does not stream data, instead it will build it up into an
  * in-memory UpdateRequest, and then traverse it after all update operations have finished.
  */
-public class UpdateEngineNonStreaming extends UpdateEngineBase 
+public class UpdateEngineNonStreaming extends UpdateEngineMain
 {
-    protected final UpdateRequest request;
+    // This is the internal accumulator of upate operations used to not change the
+    // UpdateRequest at the application level.
+    protected final UpdateRequest accRequests;
     
     /**
      * Creates a new Update Engine
@@ -40,19 +42,19 @@ public class UpdateEngineNonStreaming ex
     public UpdateEngineNonStreaming(GraphStore graphStore, Context context)
     {
         super(graphStore, context) ;
-        request = new UpdateRequest();
+        accRequests = new UpdateRequest();
     }
 
     @Override
     public void startRequest()
     {
-        // Do nothing, we will call startRequest() on the graphstore in the execute() method
+        graphStore.startRequest() ;
     }
     
     @Override
     public void finishRequest()
     {
-        // Do nothing, we will call finishRequest() on the graphstore in the execute() method
+        graphStore.finishRequest();
     }
     
     /**
@@ -63,7 +65,7 @@ public class UpdateEngineNonStreaming ex
     public UpdateSink getUpdateSink()
     {
         // Override the close() method to call execute() when we're done accepting update operations
-        return new UpdateRequestSink(request)
+        return new UpdateRequestSink(accRequests)
         {
             @Override
             public void close()
@@ -75,25 +77,15 @@ public class UpdateEngineNonStreaming ex
     }
     
     /**
-     * Called after all of the update operations have been added to {@link #request}.
+     * Called after all of the update operations have been added to {@link #accRequests}.
      */
     protected void execute()
     {
-        graphStore.startRequest() ;
         UpdateVisitor worker = this.prepareWorker() ;
-        for ( Update up : request )
+        for ( Update up : accRequests )
         {
             up.visit(worker) ;
         }
-        graphStore.finishRequest();
-    }
-    
-    /**
-     * Creates the {@link UpdateVisitor} which will do the work of applying the updates
-     * @return The update visitor to be used to apply the updates
-     */
-    protected UpdateVisitor prepareWorker() {
-        return new UpdateEngineWorker(graphStore, context) ;
     }
     
     private static UpdateEngineFactory factory = new UpdateEngineFactory()

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateProcessorBase.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateProcessorBase.java?rev=1442922&r1=1442921&r2=1442922&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateProcessorBase.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/modify/UpdateProcessorBase.java Wed Feb  6 12:13:15 2013
@@ -18,8 +18,6 @@
 
 package com.hp.hpl.jena.sparql.modify;
 
-import org.apache.jena.atlas.iterator.Iter ;
-
 import com.hp.hpl.jena.sparql.util.Context ;
 import com.hp.hpl.jena.update.GraphStore ;
 import com.hp.hpl.jena.update.UpdateProcessor ;
@@ -51,14 +49,11 @@ public class UpdateProcessorBase impleme
     {
         UpdateEngine uProc = factory.create(graphStore, context);
         uProc.startRequest();
-        try
-        {
-            UpdateSink sink = uProc.getUpdateSink();
-            Iter.sendToSink(request, sink);  // Will call close on sink if there are no exceptions
-        }
-        finally
-        {
-            uProc.finishRequest();
+        
+        try {
+            uProc.execute(request) ; 
+        } finally {
+            uProc.finishRequest() ;
         }
     }