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/05/22 01:48:08 UTC
svn commit: r1341275 - in /jena/Experimental/jena-client: ./
src/main/java/org/apache/jena/client/
src/main/java/org/apache/jena/client/graph/
src/main/java/org/apache/jena/client/http/
src/main/java/org/apache/jena/client/util/
Author: sallen
Date: Mon May 21 23:48:07 2012
New Revision: 1341275
URL: http://svn.apache.org/viewvc?rev=1341275&view=rev
Log:
jena-client 1) renamed SparqlHttp* to Http*. 2) Added DatasetGraph repo.
Added:
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphConnection.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphQueryStatement.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphRepository.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphService.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphUpdateStatement.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphUpdater.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpConnection.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpQueryService.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpQueryStatement.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpRepository.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpUpdateService.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpUpdateStatement.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpUpdater.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/util/
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/util/RDFFormat.java
Removed:
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/BulkDataHandler.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/DatasetGraphConnection.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/GraphOperations.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/RDFFormat.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/SPARQLConnection.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/SPARQLException.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/SparqlHttpConnection.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/SparqlHttpQueryService.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/SparqlHttpQueryStatement.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/SparqlHttpRepository.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/SparqlHttpUpdateService.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/SparqlHttpUpdateStatement.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/SparqlHttpUpdater.java
Modified:
jena/Experimental/jena-client/ (props changed)
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/Repository.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdateQuerier.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdateQuerierWrapper.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdateStatement.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdateStatementBase.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdaterBase.java
jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdaterWrapper.java
Propchange: jena/Experimental/jena-client/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Mon May 21 23:48:07 2012
@@ -0,0 +1,2 @@
+.classpath
+.project
Modified: jena/Experimental/jena-client/src/main/java/org/apache/jena/client/Repository.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-client/src/main/java/org/apache/jena/client/Repository.java?rev=1341275&r1=1341274&r2=1341275&view=diff
==============================================================================
--- jena/Experimental/jena-client/src/main/java/org/apache/jena/client/Repository.java (original)
+++ jena/Experimental/jena-client/src/main/java/org/apache/jena/client/Repository.java Mon May 21 23:48:07 2012
@@ -18,7 +18,6 @@
package org.apache.jena.client;
-import org.apache.jena.client.service.Service;
/**
* Represents an RDF database. This can be local or remote.
Modified: jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdateQuerier.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdateQuerier.java?rev=1341275&r1=1341274&r2=1341275&view=diff
==============================================================================
--- jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdateQuerier.java (original)
+++ jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdateQuerier.java Mon May 21 23:48:07 2012
@@ -25,6 +25,8 @@ public interface UpdateQuerier extends C
*/
void update(String updateQuery, String baseURI);
+ void update(UpdateStatement updateStmt);
+
// void update(String updateQuery, Syntax syntax);
void update(Update update);
Modified: jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdateQuerierWrapper.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdateQuerierWrapper.java?rev=1341275&r1=1341274&r2=1341275&view=diff
==============================================================================
--- jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdateQuerierWrapper.java (original)
+++ jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdateQuerierWrapper.java Mon May 21 23:48:07 2012
@@ -30,6 +30,12 @@ class UpdateQuerierWrapper implements Up
{
wrappedObject.update(updateQuery, baseURI);
}
+
+ @Override
+ public void update(UpdateStatement updateStmt)
+ {
+ wrappedObject.update(updateStmt);
+ }
@Override
public void update(Update update)
Modified: jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdateStatement.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdateStatement.java?rev=1341275&r1=1341274&r2=1341275&view=diff
==============================================================================
--- jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdateStatement.java (original)
+++ jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdateStatement.java Mon May 21 23:48:07 2012
@@ -1,6 +1,5 @@
package org.apache.jena.client;
-import java.util.concurrent.TimeUnit;
/**
@@ -17,38 +16,38 @@ public interface UpdateStatement extends
*/
Connection getConnection();
- /**
- * Execute an UPDATE query.
- */
- void execUpdate();
-
- /**
- * Cancels this <code>UpdateStatement</code> object mid-execution if the implementation supports it.
- * This method can be called by a different thread than is currently executing the query. There
- * is no guarantee that the concrete implementation actually will stop or that it will do so immediately.
- * <p/>
- * If the connection is not Transactional, then there are also no guarantees that implementation will honor
- * atomicity requirements. It may be possible for the update to be partially applied to the database.
- * <p/>
- * No operations on the statement are permitted after this call and may cause exceptions to be thrown.
- */
- void cancel();
-
- // TODO Need to update the implementations to follow the timeout behavior specified here, specifically the zero and negative timeout
- // TODO We need to emphasize that these are client-side options only. The server may enforce different timeouts.
- /**
- * Set the number of milliseconds to wait for an Update to be applied.
- * @param timeout the new query timeout limit in milliseconds; zero or a negative number means there is no limit
- * @see #setTimeout(long, TimeUnit)
- */
- void setTimeout(long timeout);
-
- /**
- * Set the number of milliseconds to wait for an Update to be applied.
- * @param timeout the new query timeout limit in <code>timeoutUnits</code>; zero or a negative number means there is no limit
- * @param timeoutUnits the time units in which <code>timeout</code> is specified
- */
- void setTimeout(long timeout, TimeUnit timeoutUnits);
+// /**
+// * Execute an UPDATE query.
+// */
+// void execUpdate();
+//
+// /**
+// * Cancels this <code>UpdateStatement</code> object mid-execution if the implementation supports it.
+// * This method can be called by a different thread than is currently executing the query. There
+// * is no guarantee that the concrete implementation actually will stop or that it will do so immediately.
+// * <p/>
+// * If the connection is not Transactional, then there are also no guarantees that implementation will honor
+// * atomicity requirements. It may be possible for the update to be partially applied to the database.
+// * <p/>
+// * No operations on the statement are permitted after this call and may cause exceptions to be thrown.
+// */
+// void cancel();
+//
+// // TODO Need to update the implementations to follow the timeout behavior specified here, specifically the zero and negative timeout
+// // TODO We need to emphasize that these are client-side options only. The server may enforce different timeouts.
+// /**
+// * Set the number of milliseconds to wait for an Update to be applied.
+// * @param timeout the new query timeout limit in milliseconds; zero or a negative number means there is no limit
+// * @see #setTimeout(long, TimeUnit)
+// */
+// void setTimeout(long timeout);
+//
+// /**
+// * Set the number of milliseconds to wait for an Update to be applied.
+// * @param timeout the new query timeout limit in <code>timeoutUnits</code>; zero or a negative number means there is no limit
+// * @param timeoutUnits the time units in which <code>timeout</code> is specified
+// */
+// void setTimeout(long timeout, TimeUnit timeoutUnits);
/**
Modified: jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdateStatementBase.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdateStatementBase.java?rev=1341275&r1=1341274&r2=1341275&view=diff
==============================================================================
--- jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdateStatementBase.java (original)
+++ jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdateStatementBase.java Mon May 21 23:48:07 2012
@@ -12,10 +12,10 @@ public abstract class UpdateStatementBas
this.connection = connection;
}
- public abstract void doExecUpdate();
-
- @Override
- public abstract void cancel();
+// public abstract void doExecUpdate();
+//
+// @Override
+// public abstract void cancel();
@Override
@@ -23,37 +23,38 @@ public abstract class UpdateStatementBas
{
return connection;
}
-
- @Override
- public void execUpdate()
- {
- startTimer();
- doExecUpdate();
- }
-
- @Override
- public void setTimeout(long timeout)
- {
- setTimeout(timeout, TimeUnit.MILLISECONDS);
- }
-
- @Override
- public void setTimeout(long timeout, TimeUnit timeoutUnits)
- {
- timeout1 = asMillis(timeout, timeoutUnits);
- }
-
- protected void startTimer()
- {
- // TODO what are the semantics of the timeouts? Does it even make sense for Update queries?
-
- //if (timeoutExpired) cancel();
- }
-
- private static long asMillis(long duration, TimeUnit timeUnit)
- {
- return (duration < 0 ) ? duration : timeUnit.toMillis(duration) ;
- }
+
+// @Override
+// public void execUpdate()
+// {
+// startTimer();
+// doExecUpdate();
+// }
+//
+// @Override
+// public void setTimeout(long timeout)
+// {
+// setTimeout(timeout, TimeUnit.MILLISECONDS);
+// }
+//
+// @Override
+// public void setTimeout(long timeout, TimeUnit timeoutUnits)
+// {
+// timeout1 = asMillis(timeout, timeoutUnits);
+// }
+//
+// protected void startTimer()
+// {
+// // TODO what are the semantics of the timeouts? Does it even make sense for Update queries?
+//
+// //if (timeoutExpired) cancel();
+// }
+//
+//
+// private static long asMillis(long duration, TimeUnit timeUnit)
+// {
+// return (duration < 0 ) ? duration : timeUnit.toMillis(duration) ;
+// }
}
Modified: jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdaterBase.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdaterBase.java?rev=1341275&r1=1341274&r2=1341275&view=diff
==============================================================================
--- jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdaterBase.java (original)
+++ jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdaterBase.java Mon May 21 23:48:07 2012
@@ -71,6 +71,12 @@ public abstract class UpdaterBase implem
update(UpdateFactory.create(updateQuery, baseURI));
}
+ @Override
+ public void update(UpdateStatement updateStmt)
+ {
+ update(updateStmt.toString());
+ }
+
// @Override
// public void update(String updateQuery, Syntax syntax)
// {
@@ -104,7 +110,7 @@ public abstract class UpdaterBase implem
{
graphName = Quad.defaultGraphIRI;
}
- insert(new Quad(graphName, t));
+ insert(Quad.create(graphName, t));
}
@Override
@@ -145,7 +151,7 @@ public abstract class UpdaterBase implem
@Override
public Quad convert(Triple item)
{
- return new Quad(graphName, item);
+ return Quad.create(graphName, item);
}
}));
}
@@ -194,7 +200,7 @@ public abstract class UpdaterBase implem
@Override
public Quad convert(Triple item)
{
- return new Quad(graphName, item);
+ return Quad.create(graphName, item);
}
});
}
@@ -209,7 +215,7 @@ public abstract class UpdaterBase implem
@Override
public Quad convert(Quad item)
{
- return new Quad(graphName, item.getSubject(), item.getPredicate(), item.getObject());
+ return Quad.create(graphName, item.getSubject(), item.getPredicate(), item.getObject());
}
});
}
@@ -247,7 +253,7 @@ public abstract class UpdaterBase implem
{
graphName = Quad.defaultGraphIRI;
}
- delete(new Quad(graphName, t));
+ delete(Quad.create(graphName, t));
}
@Override
@@ -287,7 +293,7 @@ public abstract class UpdaterBase implem
@Override
public Quad convert(Triple item)
{
- return new Quad(graphName, item);
+ return Quad.create(graphName, item);
}
}));
}
@@ -336,7 +342,7 @@ public abstract class UpdaterBase implem
@Override
public Quad convert(Triple item)
{
- return new Quad(graphName, item);
+ return Quad.create(graphName, item);
}
});
}
@@ -351,7 +357,7 @@ public abstract class UpdaterBase implem
@Override
public Quad convert(Quad item)
{
- return new Quad(graphName, item.getSubject(), item.getPredicate(), item.getObject());
+ return Quad.create(graphName, item.getSubject(), item.getPredicate(), item.getObject());
}
});
}
Modified: jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdaterWrapper.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdaterWrapper.java?rev=1341275&r1=1341274&r2=1341275&view=diff
==============================================================================
--- jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdaterWrapper.java (original)
+++ jena/Experimental/jena-client/src/main/java/org/apache/jena/client/UpdaterWrapper.java Mon May 21 23:48:07 2012
@@ -194,6 +194,12 @@ class UpdaterWrapper implements Updater
{
wrappedObject.update(updateQuery, baseURI);
}
+
+ @Override
+ public void update(UpdateStatement updateStmt)
+ {
+ wrappedObject.update(updateStmt);
+ }
@Override
public void update(Update update)
Added: jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphConnection.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphConnection.java?rev=1341275&view=auto
==============================================================================
--- jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphConnection.java (added)
+++ jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphConnection.java Mon May 21 23:48:07 2012
@@ -0,0 +1,115 @@
+package org.apache.jena.client.graph;
+
+import org.apache.jena.client.ConnectionBase;
+import org.apache.jena.client.QueryStatement;
+import org.apache.jena.client.Repository;
+import org.apache.jena.client.UpdateStatement;
+import org.apache.jena.client.Updater;
+
+import com.hp.hpl.jena.query.Query;
+import com.hp.hpl.jena.query.ReadWrite;
+import com.hp.hpl.jena.update.Update;
+
+public class DatasetGraphConnection extends ConnectionBase
+{
+ private final DatasetGraphRepository repo;
+
+ private DatasetGraphService activeService;
+
+ DatasetGraphConnection(DatasetGraphRepository repo, DatasetGraphService service)
+ {
+ if (null == repo)
+ {
+ throw new IllegalArgumentException("repo must not be null");
+ }
+
+ this.repo = repo;
+ this.activeService = service;
+
+ }
+
+ @Override
+ public boolean hasBulkUpdater()
+ {
+ return true;
+ }
+
+ @Override
+ protected Updater doCreateBulkUpdater()
+ {
+ DatasetGraphUpdater updater = new DatasetGraphUpdater(activeService);
+ updater.open();
+ return updater;
+ }
+
+ @Override
+ public Repository getRepository()
+ {
+ return repo;
+ }
+
+ @Override
+ public QueryStatement createQueryStatement(String queryString)
+ {
+ return new DatasetGraphQueryStatement(queryString, activeService, this);
+ }
+
+ @Override
+ public QueryStatement createQueryStatement(Query query)
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public UpdateStatement createUpdateStatement(String updateString)
+ {
+ return new DatasetGraphUpdateStatement(updateString, this);
+ }
+
+ @Override
+ public UpdateStatement createUpdateStatement(Update update)
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean supportsTransactions()
+ {
+ // We don't support transactions
+ return false;
+ }
+
+ @Override
+ public void begin(ReadWrite readWrite)
+ {
+ // We don't support transactions
+ }
+
+ @Override
+ public void commit()
+ {
+ // We don't support transactions
+ }
+
+ @Override
+ public void abort()
+ {
+ // We don't support transactions
+ }
+
+ @Override
+ public void end()
+ {
+ // We don't support transactions
+ }
+
+ @Override
+ public boolean isInTransaction()
+ {
+ // We don't support transactions
+ return false;
+ }
+
+}
Added: jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphQueryStatement.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphQueryStatement.java?rev=1341275&view=auto
==============================================================================
--- jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphQueryStatement.java (added)
+++ jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphQueryStatement.java Mon May 21 23:48:07 2012
@@ -0,0 +1,78 @@
+package org.apache.jena.client.graph;
+
+import java.util.Iterator;
+
+import org.apache.jena.client.QueryStatement;
+import org.apache.jena.client.QueryStatementBase;
+
+import com.hp.hpl.jena.graph.Triple;
+import com.hp.hpl.jena.query.QueryExecution;
+import com.hp.hpl.jena.query.QueryExecutionFactory;
+import com.hp.hpl.jena.query.ResultSet;
+import com.hp.hpl.jena.sparql.core.DatasetImpl;
+
+class DatasetGraphQueryStatement extends QueryStatementBase implements QueryStatement
+{
+ private final String queryString;
+ private final DatasetGraphService queryService;
+
+ private Object lock = new Object();
+ private QueryExecution qe;
+
+ DatasetGraphQueryStatement(String queryString, DatasetGraphService queryService, DatasetGraphConnection connection)
+ {
+ super(connection);
+ this.queryString = queryString;
+ this.queryService = queryService;
+ }
+
+ private QueryExecution createQueryExecution()
+ {
+ // TODO Handle Query object in addition to QueryString
+ String sparql = buildFromString(queryString, null);
+ QueryExecution qe = QueryExecutionFactory.create(sparql, DatasetImpl.wrap(queryService.getDatasetGraph()));
+ // TODO Set the options on qe, such as timeouts
+ synchronized (lock)
+ {
+ this.qe = qe;
+ }
+ return qe;
+ }
+
+ @Override
+ public ResultSet doExecSelect()
+ {
+ return createQueryExecution().execSelect();
+ }
+
+ @Override
+ public Iterator<Triple> doExecConstructTriples()
+ {
+ return createQueryExecution().execConstructTriples();
+ }
+
+ @Override
+ public Iterator<Triple> doExecDescribeTriples()
+ {
+ return createQueryExecution().execDescribeTriples();
+ }
+
+ @Override
+ public boolean doExecAsk()
+ {
+ return createQueryExecution().execAsk();
+ }
+
+ @Override
+ public void cancel()
+ {
+ synchronized (lock)
+ {
+ if (null != qe)
+ {
+ qe.abort();
+ }
+ }
+ }
+
+}
Added: jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphRepository.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphRepository.java?rev=1341275&view=auto
==============================================================================
--- jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphRepository.java (added)
+++ jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphRepository.java Mon May 21 23:48:07 2012
@@ -0,0 +1,23 @@
+package org.apache.jena.client.graph;
+
+import org.apache.jena.client.Connection;
+import org.apache.jena.client.Repository;
+
+import com.hp.hpl.jena.sparql.core.DatasetGraph;
+
+public class DatasetGraphRepository implements Repository
+{
+ private final DatasetGraphService service;
+
+ public DatasetGraphRepository(DatasetGraph dsg)
+ {
+ this.service = new DatasetGraphService(dsg);
+ }
+
+ @Override
+ public Connection getConnection()
+ {
+ return new DatasetGraphConnection(this, service);
+ }
+
+}
Added: jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphService.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphService.java?rev=1341275&view=auto
==============================================================================
--- jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphService.java (added)
+++ jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphService.java Mon May 21 23:48:07 2012
@@ -0,0 +1,30 @@
+package org.apache.jena.client.graph;
+
+import org.apache.jena.client.service.QueryService;
+import org.apache.jena.client.service.ServiceDescription;
+import org.apache.jena.client.service.UpdateService;
+
+import com.hp.hpl.jena.sparql.core.DatasetGraph;
+
+public class DatasetGraphService implements QueryService, UpdateService
+{
+ private final DatasetGraph dsg;
+
+ public DatasetGraphService(DatasetGraph dsg)
+ {
+ this.dsg = dsg;
+ }
+
+ public DatasetGraph getDatasetGraph()
+ {
+ return dsg;
+ }
+
+ @Override
+ public ServiceDescription getDescription()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
Added: jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphUpdateStatement.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphUpdateStatement.java?rev=1341275&view=auto
==============================================================================
--- jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphUpdateStatement.java (added)
+++ jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphUpdateStatement.java Mon May 21 23:48:07 2012
@@ -0,0 +1,34 @@
+package org.apache.jena.client.graph;
+
+import org.apache.jena.client.UpdateStatement;
+import org.apache.jena.client.UpdateStatementBase;
+
+class DatasetGraphUpdateStatement extends UpdateStatementBase implements UpdateStatement
+{
+ private final String updateString;
+
+ DatasetGraphUpdateStatement(String updateString, DatasetGraphConnection connection)
+ {
+ super(connection);
+ this.updateString = updateString;
+ }
+
+// @Override
+// public void doExecUpdate()
+// {
+// String sparql = buildFromString(updateString, null);
+// connection.update(sparql);
+// }
+//
+// @Override
+// public void cancel()
+// {
+// // TODO
+// }
+
+ @Override
+ public String toString()
+ {
+ return buildFromString(updateString, null);
+ }
+}
Added: jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphUpdater.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphUpdater.java?rev=1341275&view=auto
==============================================================================
--- jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphUpdater.java (added)
+++ jena/Experimental/jena-client/src/main/java/org/apache/jena/client/graph/DatasetGraphUpdater.java Mon May 21 23:48:07 2012
@@ -0,0 +1,83 @@
+package org.apache.jena.client.graph;
+
+import java.util.Iterator;
+
+import org.apache.jena.client.UpdaterBase;
+
+import com.hp.hpl.jena.sparql.core.DatasetGraph;
+import com.hp.hpl.jena.sparql.core.Quad;
+import com.hp.hpl.jena.update.Update;
+import com.hp.hpl.jena.update.UpdateAction;
+import com.hp.hpl.jena.update.UpdateRequest;
+
+// TODO This is not atomic! But the underlying DatasetGraph isn't atomic anyway...
+public class DatasetGraphUpdater extends UpdaterBase
+{
+ private final DatasetGraphService service;
+
+ private DatasetGraph dsg;
+ private boolean opened = false;
+
+ public DatasetGraphUpdater(DatasetGraphService service)
+ {
+ this.service = service;
+ }
+
+ public void open()
+ {
+ dsg = service.getDatasetGraph();
+ opened = true;
+ }
+
+ private void checkOpen()
+ {
+ if (!opened)
+ {
+ throw new IllegalStateException("DatasetGraphUpdater is not opened. Call open() first.");
+ }
+ }
+
+ @Override
+ protected void doInsert(Iterator<? extends Quad> it)
+ {
+ checkOpen();
+ while (it.hasNext())
+ {
+ dsg.add(it.next());
+ }
+ }
+
+ @Override
+ protected void doDelete(Iterator<? extends Quad> it)
+ {
+ checkOpen();
+ while (it.hasNext())
+ {
+ dsg.delete(it.next());
+ }
+ }
+
+ @Override
+ protected void doUpdate(Iterator<? extends Update> it)
+ {
+ checkOpen();
+
+ // TODO make this streaming
+ UpdateRequest req = new UpdateRequest();
+ while (it.hasNext())
+ {
+ req.add(it.next());
+ }
+ UpdateAction.execute(req, dsg);
+ }
+
+ @Override
+ public void close()
+ {
+ if (opened)
+ {
+ dsg = null;
+ opened = false;
+ }
+ }
+}
Added: jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpConnection.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpConnection.java?rev=1341275&view=auto
==============================================================================
--- jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpConnection.java (added)
+++ jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpConnection.java Mon May 21 23:48:07 2012
@@ -0,0 +1,212 @@
+package org.apache.jena.client.http;
+
+import org.apache.jena.client.ConnectionBase;
+import org.apache.jena.client.QueryStatement;
+import org.apache.jena.client.Repository;
+import org.apache.jena.client.UpdateStatement;
+import org.apache.jena.client.Updater;
+
+import com.hp.hpl.jena.query.Query;
+import com.hp.hpl.jena.query.ReadWrite;
+import com.hp.hpl.jena.update.Update;
+
+public class HttpConnection extends ConnectionBase
+{
+ private final HttpRepository repo;
+
+ private HttpQueryService activeQueryService;
+ private HttpUpdateService activeUpdateService;
+
+ HttpConnection(HttpRepository repo, HttpQueryService queryService, HttpUpdateService updateService)
+ {
+ if (null == repo)
+ {
+ throw new IllegalArgumentException("repo must not be null");
+ }
+
+ this.repo = repo;
+ this.activeQueryService = queryService;
+ this.activeUpdateService = updateService;
+
+ }
+
+ @Override
+ public boolean hasBulkUpdater()
+ {
+ return true;
+ }
+
+ @Override
+ protected Updater doCreateBulkUpdater()
+ {
+ HttpUpdater updater = new HttpUpdater(activeUpdateService);
+ updater.open();
+ return updater;
+ }
+
+// @Override
+// protected UpdateInserter doCreateBulkUpdateInserter()
+// {
+// return doCreateBulkUpdater();
+// }
+//
+// @Override
+// protected UpdateDeleter doCreateBulkUpdateDeleter()
+// {
+// return doCreateBulkUpdater();
+// }
+//
+// @Override
+// protected UpdateQuerier doCreateBulkUpdateQuerier()
+// {
+// return doCreateBulkUpdater();
+// }
+
+
+ @Override
+ public Repository getRepository()
+ {
+ return repo;
+ }
+
+ @Override
+ public QueryStatement createQueryStatement(String queryString)
+ {
+ return new HttpQueryStatement(queryString, activeQueryService, this);
+ }
+
+ @Override
+ public QueryStatement createQueryStatement(Query query)
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public UpdateStatement createUpdateStatement(String updateString)
+ {
+ return new HttpUpdateStatement(updateString, this);
+ }
+
+ @Override
+ public UpdateStatement createUpdateStatement(Update update)
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean supportsTransactions()
+ {
+ // We don't support transactions
+ return false;
+ }
+
+ @Override
+ public void begin(ReadWrite readWrite)
+ {
+ // We don't support transactions
+ }
+
+ @Override
+ public void commit()
+ {
+ // We don't support transactions
+ }
+
+ @Override
+ public void abort()
+ {
+ // We don't support transactions
+ }
+
+ @Override
+ public void end()
+ {
+ // We don't support transactions
+ }
+
+ @Override
+ public boolean isInTransaction()
+ {
+ // We don't support transactions
+ return false;
+ }
+
+// @Override
+// public Service getServices()
+// {
+// // 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;
+// }
+
+
+// /**
+// * @throws IllegalArgumentException if the QueryService is not a SparqlHttpQueryService
+// */
+// private SparqlHttpQueryService castUp(QueryService queryService)
+// {
+// if (!(queryService instanceof SparqlHttpUpdateService))
+// {
+// throw new IllegalArgumentException(String.format("%1$s only accepts %2$s for %3$s",
+// SparqlHttpConnection.class.getSimpleName(), SparqlHttpQueryService.class.getSimpleName(), QueryService.class.getSimpleName()));
+// }
+// return (SparqlHttpQueryService)queryService;
+// }
+//
+// /**
+// * @throws IllegalArgumentException if the UpdateService is not a SparqlHttpUpdateService
+// */
+// private SparqlHttpUpdateService castUp(UpdateService updateService)
+// {
+// if (!(updateService instanceof SparqlHttpUpdateService))
+// {
+// throw new IllegalArgumentException(String.format("%1$s only accepts %2$s for %3$s",
+// SparqlHttpConnection.class.getSimpleName(), SparqlHttpUpdateService.class.getSimpleName(), UpdateService.class.getSimpleName()));
+// }
+// return (SparqlHttpUpdateService)updateService;
+// }
+}
Added: jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpQueryService.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpQueryService.java?rev=1341275&view=auto
==============================================================================
--- jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpQueryService.java (added)
+++ jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpQueryService.java Mon May 21 23:48:07 2012
@@ -0,0 +1,27 @@
+package org.apache.jena.client.http;
+
+import org.apache.jena.client.service.QueryService;
+import org.apache.jena.client.service.ServiceDescription;
+
+public class HttpQueryService implements QueryService
+{
+ private final String endpointUrl;
+
+ public HttpQueryService(String endpointUrl)
+ {
+ this.endpointUrl = endpointUrl;
+ }
+
+ public String getEndpointUrl()
+ {
+ return endpointUrl;
+ }
+
+ @Override
+ public ServiceDescription getDescription()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
Added: jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpQueryStatement.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpQueryStatement.java?rev=1341275&view=auto
==============================================================================
--- jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpQueryStatement.java (added)
+++ jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpQueryStatement.java Mon May 21 23:48:07 2012
@@ -0,0 +1,63 @@
+package org.apache.jena.client.http;
+
+import java.util.Iterator;
+
+import org.apache.jena.client.QueryStatement;
+import org.apache.jena.client.QueryStatementBase;
+
+import com.hp.hpl.jena.graph.Triple;
+import com.hp.hpl.jena.query.ResultSet;
+import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP;
+
+class HttpQueryStatement extends QueryStatementBase implements QueryStatement
+{
+ private final String queryString;
+ private final HttpQueryService queryService;
+
+ HttpQueryStatement(String queryString, HttpQueryService queryService, HttpConnection connection)
+ {
+ super(connection);
+ this.queryString = queryString;
+ this.queryService = queryService;
+ }
+
+ private QueryEngineHTTP createQueryExecution()
+ {
+ // TODO Handle Query object in addition to QueryString
+ String sparql = buildFromString(queryString, null);
+ QueryEngineHTTP qe = new QueryEngineHTTP(queryService.getEndpointUrl(), sparql);
+ // TODO Set the options on qe, such as timeouts
+ return qe;
+ }
+
+ @Override
+ public ResultSet doExecSelect()
+ {
+ return createQueryExecution().execSelect();
+ }
+
+ @Override
+ public Iterator<Triple> doExecConstructTriples()
+ {
+ return createQueryExecution().execConstructTriples();
+ }
+
+ @Override
+ public Iterator<Triple> doExecDescribeTriples()
+ {
+ return createQueryExecution().execDescribeTriples();
+ }
+
+ @Override
+ public boolean doExecAsk()
+ {
+ return createQueryExecution().execAsk();
+ }
+
+ @Override
+ public void cancel()
+ {
+ // TODO
+ }
+
+}
Added: jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpRepository.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpRepository.java?rev=1341275&view=auto
==============================================================================
--- jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpRepository.java (added)
+++ jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpRepository.java Mon May 21 23:48:07 2012
@@ -0,0 +1,24 @@
+package org.apache.jena.client.http;
+
+import org.apache.jena.client.Connection;
+import org.apache.jena.client.Repository;
+
+public class HttpRepository implements Repository
+{
+ private final HttpQueryService defaultQueryService;
+ private final HttpUpdateService defaultUpdateService;
+
+
+ public HttpRepository(String queryEndpoint, String updateEndpoint)
+ {
+ this.defaultQueryService = new HttpQueryService(queryEndpoint);
+ this.defaultUpdateService = new HttpUpdateService(updateEndpoint);
+ }
+
+ @Override
+ public Connection getConnection()
+ {
+ return new HttpConnection(this, defaultQueryService, defaultUpdateService);
+ }
+
+}
Added: jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpUpdateService.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpUpdateService.java?rev=1341275&view=auto
==============================================================================
--- jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpUpdateService.java (added)
+++ jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpUpdateService.java Mon May 21 23:48:07 2012
@@ -0,0 +1,27 @@
+package org.apache.jena.client.http;
+
+import org.apache.jena.client.service.ServiceDescription;
+import org.apache.jena.client.service.UpdateService;
+
+public class HttpUpdateService implements UpdateService
+{
+ private final String endpointUrl;
+
+ public HttpUpdateService(String endpointUrl)
+ {
+ this.endpointUrl = endpointUrl;
+ }
+
+ public String getEndpointUrl()
+ {
+ return endpointUrl;
+ }
+
+ @Override
+ public ServiceDescription getDescription()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
Added: jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpUpdateStatement.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpUpdateStatement.java?rev=1341275&view=auto
==============================================================================
--- jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpUpdateStatement.java (added)
+++ jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpUpdateStatement.java Mon May 21 23:48:07 2012
@@ -0,0 +1,34 @@
+package org.apache.jena.client.http;
+
+import org.apache.jena.client.UpdateStatement;
+import org.apache.jena.client.UpdateStatementBase;
+
+class HttpUpdateStatement extends UpdateStatementBase implements UpdateStatement
+{
+ private final String updateString;
+
+ HttpUpdateStatement(String updateString, HttpConnection connection)
+ {
+ super(connection);
+ this.updateString = updateString;
+ }
+
+// @Override
+// public void doExecUpdate()
+// {
+// String sparql = buildFromString(updateString, null);
+// connection.update(sparql);
+// }
+//
+// @Override
+// public void cancel()
+// {
+// // TODO
+// }
+
+ @Override
+ public String toString()
+ {
+ return buildFromString(updateString, null);
+ }
+}
Added: jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpUpdater.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpUpdater.java?rev=1341275&view=auto
==============================================================================
--- jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpUpdater.java (added)
+++ jena/Experimental/jena-client/src/main/java/org/apache/jena/client/http/HttpUpdater.java Mon May 21 23:48:07 2012
@@ -0,0 +1,146 @@
+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 org.openjena.riot.WebContent;
+
+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.Update;
+import com.hp.hpl.jena.update.UpdateException;
+
+public class HttpUpdater extends UpdaterBase
+{
+ private final HttpUpdateService updateService;
+ private final SerializationContext sCxt;
+
+ private HttpURLConnection conn;
+ private OutputStream out;
+ private UpdateWriter writer;
+ private boolean opened = false;
+
+ public HttpUpdater(HttpUpdateService updateService)
+ {
+ this(updateService, null);
+ }
+
+ public HttpUpdater(HttpUpdateService updateService, SerializationContext sCxt)
+ {
+ this.updateService = updateService;
+ this.sCxt = sCxt;
+ }
+
+ public void open()
+ {
+ URL url;
+ try
+ {
+ url = new URL(updateService.getEndpointUrl());
+ URLConnection urlConn = url.openConnection();
+ if (!(urlConn instanceof HttpURLConnection))
+ {
+ throw new IllegalArgumentException("Must use an HTTP endpoint URL");
+ }
+ conn = (HttpURLConnection)urlConn;
+ conn.setDoOutput(true);
+ conn.setRequestMethod("POST");
+ conn.setRequestProperty("Content-Type", WebContent.contentTypeSPARQLUpdate);
+ //conn.setRequestProperty("Content-Type", WebContent.contentTypeForm);
+ // TODO Potential optimization: allow gzip when we know we're dealing with Fuseki (also update Fuseki to allow this!)
+ //conn.setRequestProperty("Content-Encoding", "gzip");
+ conn.setChunkedStreamingMode(4096);
+ conn.connect();
+
+ out = conn.getOutputStream();
+ //out = new GZIPOutputStream(conn.getOutputStream());
+
+ IndentedWriter iw = new IndentedWriter(out);
+ //iw.print("update=");
+
+ writer = new UpdateWriter(iw, sCxt);
+ writer.open();
+
+ opened = true;
+ }
+ catch (MalformedURLException e)
+ {
+ throw new UpdateException(e);
+ }
+ catch (IOException e)
+ {
+ throw new UpdateException(e);
+ }
+ }
+
+ private void checkOpen()
+ {
+ if (!opened)
+ {
+ throw new IllegalStateException("SparqlHttpUpdater is not opened. Call open() first.");
+ }
+ }
+
+ @Override
+ protected void doInsert(Iterator<? extends Quad> it)
+ {
+ checkOpen();
+ writer.insert(it);
+ }
+
+ @Override
+ protected void doDelete(Iterator<? extends Quad> it)
+ {
+ checkOpen();
+ writer.delete(it);
+ }
+
+ @Override
+ protected void doUpdate(Iterator<? extends Update> it)
+ {
+ checkOpen();
+ writer.update(it);
+ }
+
+ @Override
+ public void close()
+ {
+ if (opened)
+ {
+ writer.close();
+ try
+ {
+ out.close();
+
+ // Get the response
+ int responseCode = conn.getResponseCode();
+ String responseMessage = conn.getResponseMessage();
+ conn.disconnect();
+
+ 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);
+ }
+ }
+ }
+}
Added: jena/Experimental/jena-client/src/main/java/org/apache/jena/client/util/RDFFormat.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-client/src/main/java/org/apache/jena/client/util/RDFFormat.java?rev=1341275&view=auto
==============================================================================
--- jena/Experimental/jena-client/src/main/java/org/apache/jena/client/util/RDFFormat.java (added)
+++ jena/Experimental/jena-client/src/main/java/org/apache/jena/client/util/RDFFormat.java Mon May 21 23:48:07 2012
@@ -0,0 +1,234 @@
+/**
+ * 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.util ;
+
+
+/**
+ * Enum that specifies the various RDF formats Jena can handle. The .toString()
+ * method will return a string that can be used for Jena methods requiring a <code>lang</code> string.
+ */
+public enum RDFFormat
+{
+ /** RDF/XML format */
+ RDFXML (true, new String[] { "RDF/XML", "rdfxml", "rdf/xml-abbrev" }, new String[] { "rdf", "xml", "owl" }),
+
+ /** N-Triples format */
+ NTRIPLES (true, new String[] { "N-TRIPLES", "ntriples", "nt" }, new String[] { "nt" }),
+
+ /** N3 format */
+ N3 (true, new String[] { "N3" }, new String[] { "n3" }),
+
+ /** Turtle format */
+ TURTLE (true, new String[] { "TURTLE", "ttl" }, new String[] { "ttl" }),
+
+ /** Trig format */
+ TRIG (false, new String[] { "TURTLE" }, new String[] { "trig" }),
+
+ /** NQuads format */
+ 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(boolean isTripleLang, String[] formatStrings, String[] fileNameExtensions)
+ {
+ this.isTripleLang = isTripleLang;
+ this.formatStrings = formatStrings;
+ this.fileNameExtensions = fileNameExtensions;
+ }
+
+ /**
+ * Parses a string into the proper enum type. This can handle slightly non-standard variations.
+ *
+ * @param formatStr The string containing the format.
+ * @return An enum corresponding to the given string.
+ * @throws IllegalArgumentException if the format string does not correspond to a known RDF format
+ */
+ public static RDFFormat parse(String formatStr)
+ {
+ RDFFormat toReturn = tryParse(formatStr);
+ if (null != toReturn)
+ {
+ return toReturn;
+ }
+ throw new IllegalArgumentException("Unknown RDF format: " + formatStr);
+ }
+
+ /**
+ * Tries to parses a string into the proper enum type. This can handle slightly non-standard variations.
+ *
+ * @param formatStr The string containing the format.
+ * @return An enum corresponding to the given string, or null if the format string does not correspond to a known RDF format
+ */
+ public static RDFFormat tryParse(String formatStr)
+ {
+ if (null != formatStr)
+ {
+ for (RDFFormat f : RDFFormat.values())
+ {
+ for (String s : f.formatStrings)
+ {
+ if (s.equalsIgnoreCase(formatStr))
+ {
+ return f;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Parses a given filename, examines its extension and returns an RDFFormat
+ * that matches that extension.
+ *
+ * @param filename The filename to parse
+ * @return The RDFFormat that matches the filename extension
+ * @throws IllegalArgumentException if the filename does not have an extension that corresponds to a known RDF format
+ */
+ public static RDFFormat parseFilename(String filename)
+ {
+ RDFFormat toReturn = tryParseFilename(filename);
+ if (null != toReturn)
+ {
+ return toReturn;
+ }
+ throw new IllegalArgumentException("Unknown RDF extension for file: " + filename);
+ }
+
+ /**
+ * Tries to parses a given filename, examines its extension and returns an RDFFormat
+ * that matches that extension.
+ *
+ * @param filename The filename to parse
+ * @return The RDFFormat that matches the filename extension, or null if the filename does not have an extension that corresponds to a known RDF format
+ */
+ public static RDFFormat tryParseFilename(String filename)
+ {
+ if (null != filename)
+ {
+ int dotIndex = filename.lastIndexOf('.') ;
+ if ((dotIndex >= 0) && (dotIndex + 1 < filename.length()))
+ {
+ return tryParseExtension(filename.substring(dotIndex + 1));
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Parses a given extension string and returns the proper RDFFormat.
+ *
+ * @param extensionStr The extension string to parse
+ * @return The RDFFormat that matches the given extension string
+ * @throws IllegalArgumentException if the extension does not correspond to a known RDF format
+ */
+ public static RDFFormat parseExtension(String extensionStr)
+ {
+ RDFFormat toReturn = tryParseExtension(extensionStr);
+ if (null != toReturn)
+ {
+ return toReturn;
+ }
+ throw new IllegalArgumentException("Unknown RDF extension: " + extensionStr);
+ }
+
+ /**
+ * Tries to parse a given extension string and return the proper RDFFormat.
+ *
+ * @param extensionStr The extension string to parse
+ * @return The RDFFormat that matches the given extension string, or null if the extension does not correspond to a known RDF format
+ */
+ public static RDFFormat tryParseExtension(String extensionStr)
+ {
+ if (null != extensionStr)
+ {
+ for (RDFFormat f : RDFFormat.values())
+ {
+ for (String s : f.fileNameExtensions)
+ {
+ if (s.equalsIgnoreCase(extensionStr))
+ {
+ return f;
+ }
+ }
+ }
+ }
+ 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.
+ *
+ * @return Returns a filename extension string that matches this RDFFormat
+ */
+ public String getExtension()
+ {
+ return this.fileNameExtensions[0];
+ }
+
+ /**
+ * Returns a String that is suitable for passing into Jena methods that call
+ * for a <code>lang</code> parameter.
+ */
+ public String getFormatString()
+ {
+ return this.formatStrings[0];
+ }
+
+ /**
+ * Returns a String that is suitable for passing into Jena methods that call
+ * for a <code>lang</code> parameter.
+ */
+ @Override
+ public String toString()
+ {
+ return getFormatString();
+ }
+
+}