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);
+ }
+ }
+}