You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by sa...@apache.org on 2012/04/19 03:28:42 UTC

svn commit: r1327767 - in /incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client: ./ http/

Author: sallen
Date: Thu Apr 19 01:28:42 2012
New Revision: 1327767

URL: http://svn.apache.org/viewvc?rev=1327767&view=rev
Log:
jena-client - More refining of the API and the addition of a SPARQL HTTP Update implementation.

Added:
    incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/UpdaterBase.java
    incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/http/SparqlHttpConnection.java
    incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/http/SparqlHttpUpdater.java
Modified:
    incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/ConnectionBase.java
    incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/Deleter.java
    incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/Inserter.java
    incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/RDFFormat.java
    incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/Updater.java

Modified: incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/ConnectionBase.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/ConnectionBase.java?rev=1327767&r1=1327766&r2=1327767&view=diff
==============================================================================
--- incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/ConnectionBase.java (original)
+++ incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/ConnectionBase.java Thu Apr 19 01:28:42 2012
@@ -1,66 +1,17 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.apache.jena.client;
-
-import java.util.Iterator ;
-
-import com.hp.hpl.jena.graph.Graph ;
-import com.hp.hpl.jena.graph.Node ;
-import com.hp.hpl.jena.graph.Triple ;
-import com.hp.hpl.jena.sparql.core.DatasetGraph ;
-import com.hp.hpl.jena.sparql.core.Quad ;
-
-public abstract class ConnectionBase implements Inserter, Connection
-{
-
-    @Override
-    public void insert(Node graphName, Triple t)
-    {
-        insert(new Quad(graphName, t));
-    }
-
-    @Override
-    public void insert(Iterable<? extends Quad> quads)
-    {
-        for (Quad q : quads)
-        {
-            insert(q);
-        }
-    }
-
-    @Override
-    public void insert(DatasetGraph dsg)
-    {
-        for (Iterator<Quad> it = dsg.find(); it.hasNext(); )
-        {
-            insert(it.next());
-        }
-    }
-
-    @Override
-    public void insert(Node graphName, Graph g)
-    {
-        for (Iterator<Triple> it = g.find(null, null, null); it.hasNext(); )
-        {
-            insert(graphName, it.next());
-        }
-    }
-
-}
-
+package org.apache.jena.client;
+
+import java.io.InputStream;
+import java.util.Iterator;
+
+import com.hp.hpl.jena.graph.Graph;
+import com.hp.hpl.jena.graph.Node;
+import com.hp.hpl.jena.graph.Triple;
+import com.hp.hpl.jena.sparql.core.DatasetGraph;
+import com.hp.hpl.jena.sparql.core.Quad;
+
+public abstract class ConnectionBase extends UpdaterBase implements Connection
+{
+
+    
+
+}

Modified: incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/Deleter.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/Deleter.java?rev=1327767&r1=1327766&r2=1327767&view=diff
==============================================================================
--- incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/Deleter.java (original)
+++ incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/Deleter.java Thu Apr 19 01:28:42 2012
@@ -19,6 +19,9 @@
 package org.apache.jena.client;
 
 import java.io.InputStream;
+import java.util.Iterator;
+
+import org.openjena.riot.Lang;
 
 import com.hp.hpl.jena.graph.Graph;
 import com.hp.hpl.jena.graph.Node;
@@ -31,15 +34,17 @@ public interface Deleter
     // Quads
     void delete(Quad q);
     void delete(Iterable<? extends Quad> quads);
+    void delete(Iterator<? extends Quad> quadIter);
     void delete(DatasetGraph dsg);
-    void delete(InputStream in, RDFFormat lang);  // Lang must be NQUADS or TRIG
-    void delete(InputStream in, String base, RDFFormat lang);  // Lang must be NQUADS or TRIG
+    void delete(InputStream in, Lang lang);  // Lang must be NQUADS or TRIG
+    void delete(InputStream in, Lang lang, String base);  // Lang must be NQUADS or TRIG
     
     // Triples
     void delete(Node graphName, Triple t);
     void delete(Node graphName, Iterable<? extends Triple> triples);
+    void delete(Node graphName, Iterator<? extends Triple> tripleIter);
     void delete(Node graphName, Graph g);
-    void delete(Node graphName, InputStream in, RDFFormat lang);
-    void delete(Node graphName, InputStream in, String base, RDFFormat lang);
+    void delete(Node graphName, InputStream in, Lang lang);
+    void delete(Node graphName, InputStream in, Lang lang, String base);
 }
 

Modified: incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/Inserter.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/Inserter.java?rev=1327767&r1=1327766&r2=1327767&view=diff
==============================================================================
--- incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/Inserter.java (original)
+++ incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/Inserter.java Thu Apr 19 01:28:42 2012
@@ -19,8 +19,9 @@
 package org.apache.jena.client;
 
 import java.io.InputStream;
+import java.util.Iterator;
 
-import org.apache.jena.iri.IRI;
+import org.openjena.riot.Lang;
 
 import com.hp.hpl.jena.graph.Graph;
 import com.hp.hpl.jena.graph.Node;
@@ -33,17 +34,19 @@ public interface Inserter
     // Quads
     void insert(Quad q);
     void insert(Iterable<? extends Quad> quads);
+    void insert(Iterator<? extends Quad> quadIter);
     void insert(DatasetGraph dsg);
-    void insert(InputStream in, RDFFormat lang);  // Lang must be NQUADS or TRIG
-    void insert(InputStream in, String base, RDFFormat lang);  // Lang must be NQUADS or TRIG
+    void insert(InputStream in, Lang lang);  // Lang must be NQUADS or TRIG
+    void insert(InputStream in, Lang lang, String base);  // Lang must be NQUADS or TRIG
     
     // Triples
     void insert(Node graphName, Triple t);
     void insert(Node graphName, Iterable<? extends Triple> triples);
+    void insert(Node graphName, Iterator<? extends Triple> tripleIter);
     void insert(Node graphName, Graph g);
-    void insert(Node graphName, InputStream in, RDFFormat lang);
-    void insert(Node graphName, InputStream in, String base, RDFFormat lang);
-    void insert(Node graphName, IRI sourceDocument);
+    void insert(Node graphName, InputStream in, Lang lang);
+    void insert(Node graphName, InputStream in, Lang lang, String base);
+    //void insert(Node graphName, IRI sourceDocument);
     
 }
 

Modified: incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/RDFFormat.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/RDFFormat.java?rev=1327767&r1=1327766&r2=1327767&view=diff
==============================================================================
--- incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/RDFFormat.java (original)
+++ incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/RDFFormat.java Thu Apr 19 01:28:42 2012
@@ -26,35 +26,38 @@ package org.apache.jena.client ;
 public enum RDFFormat
 {
     /** RDF/XML format */
-    RDFXML   (new String[] { "RDF/XML", "rdfxml", "rdf/xml-abbrev" }, new String[] { "rdf", "xml", "owl" }),
+    RDFXML   (true,  new String[] { "RDF/XML", "rdfxml", "rdf/xml-abbrev" }, new String[] { "rdf", "xml", "owl" }),
 
     /** N-Triples format */
-    NTRIPLES (new String[] { "N-TRIPLES", "ntriples", "nt"         }, new String[] { "nt"                }),
+    NTRIPLES (true,  new String[] { "N-TRIPLES", "ntriples", "nt"         }, new String[] { "nt"                }),
 
     /** N3 format */
-    N3       (new String[] { "N3"                                  }, new String[] { "n3"                }),
+    N3       (true,  new String[] { "N3"                                  }, new String[] { "n3"                }),
 
     /** Turtle format */
-    TURTLE   (new String[] { "TURTLE", "ttl"                       }, new String[] { "ttl"               }),
+    TURTLE   (true,  new String[] { "TURTLE", "ttl"                       }, new String[] { "ttl"               }),
 
     /** Trig format */
-    TRIG     (new String[] { "TURTLE"                              }, new String[] { "trig"              }),
+    TRIG     (false, new String[] { "TURTLE"                              }, new String[] { "trig"              }),
 
     /** NQuads format */
-    NQUADS   (new String[] { "NQUADS", "nq"                        }, new String[] { "nquads", "nq"      });
+    NQUADS   (false, new String[] { "NQUADS", "nq"                        }, new String[] { "nquads", "nq"      });
     
     // TODO Design question: should we use null or UNKNOWN for the parse* methods?
     //UNKNOWN  (new String[] { "UNKNOWN"                             }, new String[] { "unknown"           });
     
     private final String[] formatStrings;
     private final String[] fileNameExtensions;
+    private final boolean isTripleLang;
 
     /**
+     * @param isTripleLang Whether or not this language is a triple language
      * @param formatStrings The format strings.  The first item is the canonical format string.
      * @param fileNameExtensions The filename extensions.  The first item is the canonical extension.
      */
-    private RDFFormat(String[] formatStrings, String[] fileNameExtensions)
+    private RDFFormat(boolean isTripleLang, String[] formatStrings, String[] fileNameExtensions)
     {
+        this.isTripleLang = isTripleLang;
         this.formatStrings = formatStrings;
         this.fileNameExtensions = fileNameExtensions;
     }
@@ -178,6 +181,26 @@ public enum RDFFormat
         }
         return null;
     }
+    
+    /**
+     * Returns whether or not this lang is a quad language.
+     * 
+     * @return true if this is a quad language.
+     */
+    public boolean isQuadLang()
+    {
+        return !isTripleLang;
+    }
+    
+    /**
+     * Returns whether or not this lang is a triple language.
+     * 
+     * @return true if this is a triple language.
+     */
+    public boolean isTripleLang()
+    {
+        return isTripleLang;
+    }
 
     /**
      * Returns a filename extension string that matches this RDFFormat.

Modified: incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/Updater.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/Updater.java?rev=1327767&r1=1327766&r2=1327767&view=diff
==============================================================================
--- incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/Updater.java (original)
+++ incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/Updater.java Thu Apr 19 01:28:42 2012
@@ -18,8 +18,10 @@
 
 package org.apache.jena.client;
 
+import org.openjena.atlas.lib.Closeable;
 
-public interface Updater extends Inserter, Deleter
+
+public interface Updater extends Inserter, Deleter, Closeable
 {
     
 }

Added: incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/UpdaterBase.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/UpdaterBase.java?rev=1327767&view=auto
==============================================================================
--- incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/UpdaterBase.java (added)
+++ incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/UpdaterBase.java Thu Apr 19 01:28:42 2012
@@ -0,0 +1,298 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.jena.client;
+
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.Iterator;
+
+import org.openjena.atlas.iterator.Iter;
+import org.openjena.atlas.iterator.Transform;
+import org.openjena.riot.Lang;
+import org.openjena.riot.RiotReader;
+
+import com.hp.hpl.jena.graph.Graph;
+import com.hp.hpl.jena.graph.Node;
+import com.hp.hpl.jena.graph.Triple;
+import com.hp.hpl.jena.sparql.core.DatasetGraph;
+import com.hp.hpl.jena.sparql.core.Quad;
+
+public abstract class UpdaterBase implements Updater
+{
+    
+    @Override
+    public abstract void insert(Iterator<? extends Quad> quadIter);
+    
+    @Override
+    public abstract void delete(Iterator<? extends Quad> quadIter);
+    
+    
+    // -- Inserter ----------------------
+    
+    @Override
+    public void insert(Quad q)
+    {
+        insert(Arrays.asList(q));
+    }
+
+    @Override
+    public void insert(Node graphName, Triple t)
+    {
+        insert(new Quad(graphName, t));
+    }
+
+    @Override
+    public void insert(Iterable<? extends Quad> quads)
+    {
+        insert(quads.iterator());
+    }
+
+    @Override
+    public void insert(DatasetGraph dsg)
+    {
+        insert(dsg.find());
+    }
+
+    @Override
+    public void insert(Node graphName, Graph g)
+    {
+        insert(graphName, g.find(null, null, null));
+    }
+    
+    @Override
+    public void insert(Node graphName, Iterable<? extends Triple> triples)
+    {
+        insert(graphName, triples.iterator());
+    }
+    
+    @Override
+    public void insert(final Node graphName, Iterator<? extends Triple> tripleIter)
+    {
+        insert(Iter.map(tripleIter, new Transform<Triple, Quad>()
+        {
+            @Override
+            public Quad convert(Triple item)
+            {
+                return new Quad(graphName, item);
+            }
+        }));
+    }
+    
+    @Override
+    public void insert(InputStream in, Lang lang)
+    {
+        insert(in, lang, null);
+    }
+
+    @Override
+    public void insert(InputStream in, Lang lang, String base)
+    {
+        if (!lang.isQuads())
+        {
+            throw new IllegalArgumentException("lang must be a Quad language, or you must call the insert() method with a graph name for Triple languages");
+        }
+        
+        Iterator<Quad> it = RiotReader.createIteratorQuads(in, lang, base);
+        try
+        {
+            insert(it);
+        }
+        finally
+        {
+            Iter.close(it);
+        }
+    }
+
+    @Override
+    public void insert(Node graphName, InputStream in, Lang lang)
+    {
+        insert(graphName, in, lang, null);
+    }
+
+    @Override
+    public void insert(final Node graphName, InputStream in, Lang lang, String base)
+    {
+        Iterator<Quad> it;
+        if (lang.isTriples())
+        {
+            Iterator<Triple> parser = RiotReader.createIteratorTriples(in, lang, base);
+            
+            it = Iter.map(parser, new Transform<Triple, Quad>()
+            {
+                @Override
+                public Quad convert(Triple item)
+                {
+                    return new Quad(graphName, item);
+                }
+            });
+        }
+        else
+        {
+            // We'll allow Quad languages, and ignore the graph specified in the inputstream in favor of the provided one
+            
+            Iterator<Quad> parser = RiotReader.createIteratorQuads(in, lang, base);
+            
+            it = Iter.map(parser, new Transform<Quad, Quad>()
+            {
+                @Override
+                public Quad convert(Quad item)
+                {
+                    return new Quad(graphName, item.getSubject(), item.getPredicate(), item.getObject());
+                }
+            });
+        }
+        
+        try
+        {
+            insert(it);
+        }
+        finally
+        {
+            Iter.close(it);
+        }
+    }
+
+    
+    
+    // -- Deleter -----------------
+    
+    @Override
+    public void delete(Quad q)
+    {
+        delete(Arrays.asList(q));
+    }
+    
+    @Override
+    public void delete(Node graphName, Triple t)
+    {
+        delete(new Quad(graphName, t));
+    }
+
+    @Override
+    public void delete(Iterable<? extends Quad> quads)
+    {
+        delete(quads.iterator());
+    }
+
+    @Override
+    public void delete(DatasetGraph dsg)
+    {
+        delete(dsg.find());
+    }
+
+    @Override
+    public void delete(Node graphName, Graph g)
+    {
+        delete(graphName, g.find(null, null, null));
+    }
+    
+    @Override
+    public void delete(Node graphName, Iterable<? extends Triple> triples)
+    {
+        delete(graphName, triples.iterator());
+    }
+    
+    @Override
+    public void delete(final Node graphName, Iterator<? extends Triple> tripleIter)
+    {
+        delete(Iter.map(tripleIter, new Transform<Triple, Quad>()
+        {
+            @Override
+            public Quad convert(Triple item)
+            {
+                return new Quad(graphName, item);
+            }
+        }));
+    }
+    
+    @Override
+    public void delete(InputStream in, Lang lang)
+    {
+        delete(in, lang, null);
+    }
+
+    @Override
+    public void delete(InputStream in, Lang lang, String base)
+    {
+        if (!lang.isQuads())
+        {
+            throw new IllegalArgumentException("lang must be a Quad language, or you must call the delete() method with a graph name for Triple languages");
+        }
+        
+        Iterator<Quad> it = RiotReader.createIteratorQuads(in, lang, base);
+        try
+        {
+            delete(it);
+        }
+        finally
+        {
+            Iter.close(it);
+        }
+    }
+
+    @Override
+    public void delete(Node graphName, InputStream in, Lang lang)
+    {
+        delete(graphName, in, lang, null);
+    }
+
+    @Override
+    public void delete(final Node graphName, InputStream in, Lang lang, String base)
+    {
+        Iterator<Quad> it;
+        if (lang.isTriples())
+        {
+            Iterator<Triple> parser = RiotReader.createIteratorTriples(in, lang, base);
+            
+            it = Iter.map(parser, new Transform<Triple, Quad>()
+            {
+                @Override
+                public Quad convert(Triple item)
+                {
+                    return new Quad(graphName, item);
+                }
+            });
+        }
+        else
+        {
+            // We'll allow Quad languages, and ignore the graph specified in the inputstream in favor of the provided one
+            
+            Iterator<Quad> parser = RiotReader.createIteratorQuads(in, lang, base);
+            
+            it = Iter.map(parser, new Transform<Quad, Quad>()
+            {
+                @Override
+                public Quad convert(Quad item)
+                {
+                    return new Quad(graphName, item.getSubject(), item.getPredicate(), item.getObject());
+                }
+            });
+        }
+        
+        try
+        {
+            delete(it);
+        }
+        finally
+        {
+            Iter.close(it);
+        }
+    }
+}
+

Added: incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/http/SparqlHttpConnection.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/http/SparqlHttpConnection.java?rev=1327767&view=auto
==============================================================================
--- incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/http/SparqlHttpConnection.java (added)
+++ incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/http/SparqlHttpConnection.java Thu Apr 19 01:28:42 2012
@@ -0,0 +1,180 @@
+package org.apache.jena.client.http;
+
+import java.io.InputStream;
+import java.util.Iterator;
+
+import org.apache.jena.client.BulkDataHandler;
+import org.apache.jena.client.ConnectionBase;
+import org.apache.jena.client.UpdaterBase;
+import org.apache.jena.client.RDFFormat;
+import org.apache.jena.client.Repository;
+import org.apache.jena.client.service.QueryService;
+import org.apache.jena.client.service.Service;
+import org.apache.jena.client.service.UpdateService;
+import org.apache.jena.iri.IRI;
+
+import com.hp.hpl.jena.graph.Node;
+import com.hp.hpl.jena.graph.Triple;
+import com.hp.hpl.jena.query.QueryExecution;
+import com.hp.hpl.jena.query.ReadWrite;
+import com.hp.hpl.jena.sparql.core.Quad;
+import com.hp.hpl.jena.update.UpdateProcessor;
+
+public class SparqlHttpConnection extends ConnectionBase
+{
+    
+    @Override
+    public void insert(Iterator<? extends Quad> it)
+    {
+        // TODO
+    }
+    
+    @Override
+    public void delete(Iterator<? extends Quad> it)
+    {
+        // TODO
+    }
+    
+    
+
+    @Override
+    public Service getServices()
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Repository getRepository()
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public void setQueryService(QueryService service)
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void setUpdateService(UpdateService service)
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void setBulkService(UpdateService service)
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public QueryService getQueryService()
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public UpdateService getUpdateService()
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public UpdateService getBulkService()
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public boolean supportsTransactions()
+    {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    @Override
+    public BulkDataHandler getBulkDataHandler()
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public QueryExecution createQuery(String query)
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public UpdateProcessor createUpdate(String updateQuery)
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public QueryExecution createParameterizedQuery(String query)
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public UpdateProcessor createPparameterizedUpdate(String updateQuery)
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public void begin(ReadWrite readWrite)
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void commit()
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void abort()
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public boolean isInTransaction()
+    {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    @Override
+    public void end()
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void close()
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+}

Added: incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/http/SparqlHttpUpdater.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/http/SparqlHttpUpdater.java?rev=1327767&view=auto
==============================================================================
--- incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/http/SparqlHttpUpdater.java (added)
+++ incubator/jena/Experimental/jena-client/trunk/src/main/java/org/apache/jena/client/http/SparqlHttpUpdater.java Thu Apr 19 01:28:42 2012
@@ -0,0 +1,112 @@
+package org.apache.jena.client.http;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.Iterator;
+
+import org.apache.jena.client.UpdaterBase;
+import org.openjena.atlas.io.IndentedWriter;
+
+import com.hp.hpl.jena.sparql.core.Quad;
+import com.hp.hpl.jena.sparql.modify.request.UpdateWriter;
+import com.hp.hpl.jena.sparql.serializer.SerializationContext;
+import com.hp.hpl.jena.update.UpdateException;
+
+public class SparqlHttpUpdater extends UpdaterBase
+{
+    private final String sparqlUpdateEndpoint;
+    private final SerializationContext sCxt;
+    
+    private HttpURLConnection conn;
+    private OutputStream out;
+    private UpdateWriter writer;
+    
+    public SparqlHttpUpdater(String sparqlUpdateEndpoint)
+    {
+        this(sparqlUpdateEndpoint, null);
+    }
+    
+    public SparqlHttpUpdater(String sparqlUpdateEndpoint, SerializationContext sCxt)
+    {
+        this.sparqlUpdateEndpoint = sparqlUpdateEndpoint;
+        this.sCxt = sCxt;
+    }
+    
+    public void open()
+    {
+        URL url;
+        try
+        {
+            url = new URL(sparqlUpdateEndpoint);
+            URLConnection urlConn = url.openConnection();
+            if (!(urlConn instanceof HttpURLConnection))
+            {
+                throw new IllegalArgumentException("Must use an HTTP endpoint URL");
+            }
+            conn = (HttpURLConnection)urlConn;
+            conn.setDoOutput(true);
+            
+            // TODO Need to enable chunking mode to support streaming.  Otherwise it is all buffered up in memory.
+            //conn.setChunkedStreamingMode(chunklen);
+            
+            out = conn.getOutputStream();
+            
+            writer = new UpdateWriter(new IndentedWriter(out), sCxt);
+            writer.open();
+        }
+        catch (MalformedURLException e)
+        {
+            throw new UpdateException(e);
+        }
+        catch (IOException e)
+        {
+            throw new UpdateException(e);
+        }
+    }
+
+    @Override
+    public void insert(Iterator<? extends Quad> it)
+    {
+        writer.insert(it);
+    }
+
+    @Override
+    public void delete(Iterator<? extends Quad> it)
+    {
+        writer.delete(it);
+    }
+    
+    @Override
+    public void close()
+    {
+        writer.close();
+        try
+        {
+            out.close();
+            
+            // Get the response
+            int responseCode = conn.getResponseCode();
+            String responseMessage = conn.getResponseMessage();
+            
+            if (responseCode == 204) // No content
+            {
+                return;
+            }
+            if (responseCode == 200) // OK
+            {
+                // But what was the content?
+                // TODO read body 
+                return;
+            }
+            throw new UpdateException(responseCode+" "+responseMessage) ;
+        }
+        catch (IOException e)
+        {
+            throw new UpdateException(e);
+        }
+    }
+}