You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2013/12/15 22:29:27 UTC
svn commit: r1551061 - in /jena/branches/jena-fuseki-new-ui: src-dev/dev/
src/main/java/org/apache/jena/fuseki/server/
src/main/java/org/apache/jena/fuseki/servlets/
src/test/java/org/apache/jena/fuseki/
src/test/java/org/apache/jena/fuseki/http/
Author: andy
Date: Sun Dec 15 21:29:27 2013
New Revision: 1551061
URL: http://svn.apache.org/r1551061
Log:
First class REST actions on datasets.
Tests for extended GSP operations.
Rename SPARA_REST* as SPARQL_GSP*.
Added:
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionREST.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_R.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_RW.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP.java
- copied, changed from r1550957, jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP_R.java
- copied, changed from r1550957, jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST_R.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP_RW.java
- copied, changed from r1550957, jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST_RW.java
jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/FileSender.java
jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestGSP.java
Removed:
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST_R.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST_RW.java
Modified:
jena/branches/jena-fuseki-new-ui/src-dev/dev/PROJECT.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServletContextListener.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_UberServlet.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/Upload.java
jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/ServerTest.java
jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TS_Fuseki.java
jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestAuth.java
jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestFileUpload.java
jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/http/TestDatasetAccessorHTTP.java
Modified: jena/branches/jena-fuseki-new-ui/src-dev/dev/PROJECT.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src-dev/dev/PROJECT.java?rev=1551061&r1=1551060&r2=1551061&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src-dev/dev/PROJECT.java (original)
+++ jena/branches/jena-fuseki-new-ui/src-dev/dev/PROJECT.java Sun Dec 15 21:29:27 2013
@@ -23,6 +23,12 @@ public class PROJECT {
// All TODO and XXX
// Graph upload in ActionDatasets == Upload.
+ // GSP, and no query string => quads operation. JENA-607
+
+ // txn and nonTxn server set up for tests.
+
+ // Enables, disable R/RW on SPARQL_UberServlet(renamed) and quads operations.
+
// Remove all direct naming (put in separate servlet if ever needed)
// last place : SPARQL_UberServlet
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServletContextListener.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServletContextListener.java?rev=1551061&r1=1551060&r2=1551061&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServletContextListener.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/FusekiServletContextListener.java Sun Dec 15 21:29:27 2013
@@ -51,7 +51,6 @@ public class FusekiServletContextListene
public void contextInitialized(ServletContextEvent sce) {
//confLog.info("contextInitialized");
ServletContext cxt = sce.getServletContext() ;
- confLog.info(cxt.getServletContextName()) ;
init() ;
}
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java?rev=1551061&r1=1551060&r2=1551061&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionBase.java Sun Dec 15 21:29:27 2013
@@ -28,7 +28,7 @@ import javax.servlet.ServletException ;
import javax.servlet.http.HttpServletRequest ;
import javax.servlet.http.HttpServletResponse ;
-import org.apache.jena.atlas.logging.Log ;
+//import org.apache.jena.atlas.logging.Log ;
import org.apache.jena.fuseki.Fuseki ;
import org.apache.jena.fuseki.HttpNames ;
import org.apache.jena.web.HttpSC ;
@@ -50,7 +50,7 @@ public abstract class ActionBase extends
@Override
public void init() {
- Log.info(this, getServletContext().getServletContextName()) ;
+ log.info("ServletContextName="+getServletContext().getServletContextName()) ;
//super.init() ;
}
Added: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionREST.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionREST.java?rev=1551061&view=auto
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionREST.java (added)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionREST.java Sun Dec 15 21:29:27 2013
@@ -0,0 +1,161 @@
+/*
+ * 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.fuseki.servlets;
+
+import static org.apache.jena.fuseki.HttpNames.* ;
+
+import java.io.IOException ;
+import java.util.Locale ;
+
+import javax.servlet.ServletException ;
+import javax.servlet.http.HttpServletRequest ;
+import javax.servlet.http.HttpServletResponse ;
+
+import org.apache.jena.fuseki.server.CounterName ;
+
+/** Common point for */
+public abstract class ActionREST extends ActionSPARQL
+{
+ public ActionREST()
+ { super() ; }
+
+ @Override
+ protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ // Direct all verbs to our common framework.
+ doCommon(request, response) ;
+ }
+
+ @Override
+ protected void perform(HttpAction action) {
+ dispatch(action) ;
+ }
+
+ private void dispatch(HttpAction action) {
+ HttpServletRequest req = action.request ;
+ HttpServletResponse resp = action.response ;
+ String method = req.getMethod().toUpperCase(Locale.ROOT) ;
+
+ if (method.equals(METHOD_GET))
+ doGet$(action);
+ else if (method.equals(METHOD_HEAD))
+ doHead$(action);
+ else if (method.equals(METHOD_POST))
+ doPost$(action);
+ else if (method.equals(METHOD_PATCH))
+ doPatch$(action) ;
+ else if (method.equals(METHOD_OPTIONS))
+ doOptions$(action) ;
+ else if (method.equals(METHOD_TRACE))
+ //doTrace(action) ;
+ ServletOps.errorMethodNotAllowed("TRACE") ;
+ else if (method.equals(METHOD_PUT))
+ doPut$(action) ;
+ else if (method.equals(METHOD_DELETE))
+ doDelete$(action) ;
+ else
+ ServletOps.errorNotImplemented("Unknown method: "+method) ;
+ }
+
+ // Counter wrappers
+
+ private final void doGet$(HttpAction action) {
+ incCounter(action.srvRef, CounterName.GSPget) ;
+ try {
+ doGet(action) ;
+ incCounter(action.srvRef, CounterName.GSPgetGood) ;
+ } catch ( ActionErrorException ex) {
+ incCounter(action.srvRef, CounterName.GSPgetBad) ;
+ throw ex ;
+ }
+ }
+
+ private final void doHead$(HttpAction action) {
+ incCounter(action.srvRef, CounterName.GSPhead) ;
+ try {
+ doHead(action) ;
+ incCounter(action.srvRef, CounterName.GSPheadGood) ;
+ } catch ( ActionErrorException ex) {
+ incCounter(action.srvRef, CounterName.GSPheadBad) ;
+ throw ex ;
+ }
+ }
+
+ private final void doPost$(HttpAction action) {
+ incCounter(action.srvRef, CounterName.GSPpost) ;
+ try {
+ doPost(action) ;
+ incCounter(action.srvRef, CounterName.GSPpostGood) ;
+ } catch ( ActionErrorException ex) {
+ incCounter(action.srvRef, CounterName.GSPpostBad) ;
+ throw ex ;
+ }
+ }
+
+ private final void doPatch$(HttpAction action) {
+ incCounter(action.srvRef, CounterName.GSPpatch) ;
+ try {
+ doPatch(action) ;
+ incCounter(action.srvRef, CounterName.GSPpatchGood) ;
+ } catch ( ActionErrorException ex) {
+ incCounter(action.srvRef, CounterName.GSPpatchBad) ;
+ throw ex ;
+ }
+ }
+
+ private final void doDelete$(HttpAction action) {
+ incCounter(action.srvRef, CounterName.GSPdelete) ;
+ try {
+ doDelete(action) ;
+ incCounter(action.srvRef, CounterName.GSPdeleteGood) ;
+ } catch ( ActionErrorException ex) {
+ incCounter(action.srvRef, CounterName.GSPdeleteBad) ;
+ throw ex ;
+ }
+ }
+
+ private final void doPut$(HttpAction action) {
+ incCounter(action.srvRef, CounterName.GSPput) ;
+ try {
+ doPut(action) ;
+ incCounter(action.srvRef, CounterName.GSPputGood) ;
+ } catch ( ActionErrorException ex) {
+ incCounter(action.srvRef, CounterName.GSPputBad) ;
+ throw ex ;
+ }
+ }
+
+ private final void doOptions$(HttpAction action) {
+ incCounter(action.srvRef, CounterName.GSPoptions) ;
+ try {
+ doOptions(action) ;
+ incCounter(action.srvRef, CounterName.GSPoptionsGood) ;
+ } catch ( ActionErrorException ex) {
+ incCounter(action.srvRef, CounterName.GSPoptionsBad) ;
+ throw ex ;
+ }
+ }
+
+ protected abstract void doGet(HttpAction action) ;
+ protected abstract void doHead(HttpAction action) ;
+ protected abstract void doPost(HttpAction action) ;
+ protected abstract void doPatch(HttpAction action) ;
+ protected abstract void doDelete(HttpAction action) ;
+ protected abstract void doPut(HttpAction action) ;
+ protected abstract void doOptions(HttpAction action) ;
+}
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java?rev=1551061&r1=1551060&r2=1551061&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ActionSPARQL.java Sun Dec 15 21:29:27 2013
@@ -70,8 +70,7 @@ public abstract class ActionSPARQL exten
executeAction(action) ;
}
- // Execute - no stats.
- // Intercept point for the UberServlet
+ // Execute - allow interception before stats added.
protected void executeAction(HttpAction action) {
executeLifecycle(action) ;
}
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java?rev=1551061&r1=1551060&r2=1551061&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads.java Sun Dec 15 21:29:27 2013
@@ -43,7 +43,7 @@ import com.hp.hpl.jena.sparql.core.Datas
* dataset URI.
*/
-public class REST_Quads extends SPARQL_REST {
+public abstract class REST_Quads extends SPARQL_GSP {
// Not supported: GSP direct naming.
public REST_Quads() {
Added: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_R.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_R.java?rev=1551061&view=auto
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_R.java (added)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_R.java Sun Dec 15 21:29:27 2013
@@ -0,0 +1,98 @@
+/**
+ * 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.fuseki.servlets ;
+
+import static java.lang.String.format ;
+
+import java.io.IOException ;
+
+import javax.servlet.ServletOutputStream ;
+
+import org.apache.jena.atlas.web.MediaType ;
+import org.apache.jena.atlas.web.TypedOutputStream ;
+import org.apache.jena.fuseki.HttpNames ;
+import org.apache.jena.riot.Lang ;
+import org.apache.jena.riot.RDFDataMgr ;
+import org.apache.jena.riot.RDFLanguages ;
+
+import com.hp.hpl.jena.sparql.core.DatasetGraph ;
+
+/**
+ * Servlet for operations directly on a dataset - REST(ish) behaviour on the
+ * dataset URI.
+ */
+
+public class REST_Quads_R extends REST_Quads {
+ public REST_Quads_R() {
+ super() ;
+ }
+
+ @Override
+ protected void validate(HttpAction action) { }
+
+ @Override
+ protected void doGet(HttpAction action) {
+ MediaType mediaType = HttpAction.contentNegotationQuads(action) ;
+ ServletOutputStream output ;
+ try {
+ output = action.response.getOutputStream() ;
+ } catch (IOException ex) {
+ ServletOps.errorOccurred(ex) ;
+ output = null ;
+ }
+
+ TypedOutputStream out = new TypedOutputStream(output, mediaType) ;
+ Lang lang = RDFLanguages.contentTypeToLang(mediaType.getContentType()) ;
+ if ( lang == null )
+ lang = RDFLanguages.TRIG ;
+
+ if ( action.verbose )
+ action.log.info(format("[%d] Get: Content-Type=%s, Charset=%s => %s", action.id,
+ mediaType.getContentType(), mediaType.getCharset(), lang.getName())) ;
+ if ( !RDFLanguages.isQuads(lang) )
+ ServletOps.errorBadRequest("Not a quads format: " + mediaType) ;
+
+ action.beginRead() ;
+ try {
+ DatasetGraph dsg = action.getActiveDSG() ;
+ RDFDataMgr.write(out, dsg, lang) ;
+ ServletOps.success(action) ;
+ } finally {
+ action.endRead() ;
+ }
+ }
+
+ @Override
+ protected void doOptions(HttpAction action) {
+ action.response.setHeader(HttpNames.hAllow, "GET, HEAD, OPTIONS") ;
+ action.response.setHeader(HttpNames.hContentLengh, "0") ;
+ ServletOps.success(action) ;
+ }
+
+ @Override
+ protected void doHead(HttpAction action) {
+ action.beginRead() ;
+ try {
+ MediaType mediaType = HttpAction.contentNegotationQuads(action) ;
+ ServletOps.success(action) ;
+ } finally {
+ action.endRead() ;
+ }
+ }
+}
Added: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_RW.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_RW.java?rev=1551061&view=auto
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_RW.java (added)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/REST_Quads_RW.java Sun Dec 15 21:29:27 2013
@@ -0,0 +1,158 @@
+/**
+ * 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.fuseki.servlets ;
+
+import org.apache.jena.fuseki.FusekiLib ;
+import org.apache.jena.riot.RiotException ;
+import org.apache.jena.riot.system.StreamRDF ;
+import org.apache.jena.riot.system.StreamRDFLib ;
+
+import com.hp.hpl.jena.sparql.core.DatasetGraph ;
+import com.hp.hpl.jena.sparql.core.DatasetGraphFactory ;
+
+/**
+ * Servlet for operations directly on a dataset - REST(ish) behaviour on the
+ * dataset URI.
+ */
+
+public class REST_Quads_RW extends REST_Quads_R {
+
+ public REST_Quads_RW() {
+ super() ;
+ }
+
+ @Override
+ protected void validate(HttpAction action) { }
+
+ @Override
+ protected void doPost(HttpAction action) {
+ if ( !action.getDatasetRef().allowDatasetUpdate )
+ ServletOps.errorMethodNotAllowed("POST") ;
+
+ if ( action.isTransactional() )
+ doPutPostTxn(action, false) ;
+ else
+ doPutPostNonTxn(action, false) ;
+ }
+
+ @Override
+ protected void doPut(HttpAction action) {
+ if ( !action.getDatasetRef().allowDatasetUpdate )
+ ServletOps.errorMethodNotAllowed("POST") ;
+
+ if ( action.isTransactional() )
+ doPutPostTxn(action, false) ;
+ else
+ doPutPostNonTxn(action, false) ;
+ }
+
+ // These are very similar to SPARQL_REST_RW.addDataIntoTxn/nonTxn
+ // Maybe can be usually DRYed.
+
+ @Override
+ protected void doDelete(HttpAction action) {
+ ServletOps.errorMethodNotAllowed("DELETE") ;
+ }
+
+ @Override
+ protected void doPatch(HttpAction action) {
+ ServletOps.errorMethodNotAllowed("PATCH") ;
+ }
+
+ private void doPutPostTxn(HttpAction action, boolean clearFirst) {
+ action.beginWrite() ;
+ try {
+ DatasetGraph dsg = action.getActiveDSG() ;
+ StreamRDF dest = StreamRDFLib.dataset(dsg) ;
+ Upload.incomingData(action, dest, false) ;
+ action.commit() ;
+ ServletOps.success(action) ;
+ } catch (RiotException ex) {
+ // Parse error
+ action.abort() ;
+ ServletOps.errorBadRequest(ex.getMessage()) ;
+ } catch (Exception ex) {
+ // Something else went wrong. Backout.
+ action.abort() ;
+ ServletOps.errorOccurred(ex.getMessage()) ;
+ } finally {
+ action.endWrite() ;
+ }
+ }
+
+ private void doPutPostNonTxn(HttpAction action, boolean clearFirst) {
+ DatasetGraph dsgTmp = DatasetGraphFactory.createMem() ;
+ StreamRDF dest = StreamRDFLib.dataset(dsgTmp) ;
+
+ try {
+ Upload.incomingData(action, dest, false) ;
+ } catch (RiotException ex) {
+ ServletOps.errorBadRequest(ex.getMessage()) ;
+ }
+ // Now insert into dataset
+ action.beginWrite() ;
+ try {
+ FusekiLib.addDataInto(dsgTmp, action.getActiveDSG()) ;
+ action.commit() ;
+ ServletOps.success(action) ;
+ } catch (Exception ex) {
+ // We're in the non-transactional branch, this probably will not
+ // work
+ // but it might and there is no harm safely trying.
+ try {
+ action.abort() ;
+ } catch (Exception ex2) {}
+ ServletOps.errorOccurred(ex.getMessage()) ;
+ } finally {
+ action.endWrite() ;
+ }
+
+ }
+
+// static int counter = 0 ;
+//
+// protected void doPostTriplesGSP(HttpAction action, Lang lang) {
+// // Old code.
+// // Assumes transactional.
+// action.beginWrite() ;
+// try {
+// DatasetGraph dsg = action.getActiveDSG() ;
+// // log.info(format("[%d] ** Content-length: %d", action.id,
+// // action.request.getContentLength())) ;
+//
+// String name = action.request.getRequestURL().toString() ;
+// if ( !name.endsWith("/") )
+// name = name + "/" ;
+// name = name + (++counter) ;
+// Node gn = NodeFactory.createURI(name) ;
+// Graph g = dsg.getGraph(gn) ;
+// StreamRDF dest = StreamRDFLib.graph(g) ;
+// LangRIOT parser = RiotReader.createParser(action.request.getInputStream(), lang, name, dest) ;
+// parser.parse() ;
+// action.log.info(format("[%d] Location: %s", action.id, name)) ;
+// action.response.setHeader("Location", name) ;
+// action.commit() ;
+// ServletOps.successCreated(action) ;
+// } catch (IOException ex) {
+// action.abort() ;
+// } finally {
+// action.endWrite() ;
+// }
+// }
+}
Copied: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP.java (from r1550957, jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST.java)
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP.java?p2=jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP.java&p1=jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST.java&r1=1550957&r2=1551061&rev=1551061&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP.java Sun Dec 15 21:29:27 2013
@@ -18,31 +18,20 @@
package org.apache.jena.fuseki.servlets;
-import static org.apache.jena.fuseki.HttpNames.* ;
-
-import java.io.IOException ;
import java.util.Enumeration ;
-import java.util.Locale ;
-import javax.servlet.ServletException ;
import javax.servlet.http.HttpServletRequest ;
-import javax.servlet.http.HttpServletResponse ;
import org.apache.jena.fuseki.HttpNames ;
-import org.apache.jena.fuseki.server.CounterName ;
import org.apache.jena.riot.system.IRIResolver ;
-import org.slf4j.Logger ;
-import org.slf4j.LoggerFactory ;
import com.hp.hpl.jena.graph.Graph ;
import com.hp.hpl.jena.graph.Node ;
import com.hp.hpl.jena.graph.NodeFactory ;
import com.hp.hpl.jena.sparql.core.DatasetGraph ;
-public abstract class SPARQL_REST extends ActionSPARQL
+public abstract class SPARQL_GSP extends ActionREST
{
- protected static Logger classLog = LoggerFactory.getLogger(SPARQL_REST.class) ;
-
protected final static Target determineTarget(HttpAction action) {
// Delayed until inside a transaction.
if ( action.getActiveDSG() == null )
@@ -61,14 +50,8 @@ public abstract class SPARQL_REST extend
ServletOps.errorBadRequest("Neither default graph nor named graph specified; no direct name") ;
}
-// // Put these in action.
-// String datasetUri = mapRequestToDataset(action) ;
-// String reqUri = action.request.getRequestURI() ;
-// String serviceName = ActionLib.mapRequestToService(dsRef, reqUri, reqUri) ;
-
String dsTarget = action.datasetName ;
-
if ( dftGraph )
return Target.createDefault(action.getActiveDSG()) ;
@@ -80,7 +63,7 @@ public abstract class SPARQL_REST extend
// Strictly, a bit naughty on the URI resolution. But more sensible.
// Base is dataset.
- // XXX Remove service.
+ // XXX Remove any service.
String base = action.request.getRequestURL().toString() ; //wholeRequestURL(request) ;
// Make sure it ends in "/", ie. dataset as container.
@@ -176,139 +159,10 @@ public abstract class SPARQL_REST extend
}
}
- public SPARQL_REST()
+ public SPARQL_GSP()
{ super() ; }
@Override
- protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // Direct all verbs to our common framework.
- doCommon(request, response) ;
- }
-
- private void maybeSetLastModified(HttpServletResponse resp, long lastModified) {
- if (resp.containsHeader(HEADER_LASTMOD)) return ;
- if (lastModified >= 0) resp.setDateHeader(HEADER_LASTMOD, lastModified);
- }
-
- @Override
- protected void perform(HttpAction action) {
- dispatch(action) ;
- }
-
- private void dispatch(HttpAction action) {
- HttpServletRequest req = action.request ;
- HttpServletResponse resp = action.response ;
- String method = req.getMethod().toUpperCase(Locale.ROOT) ;
-
- if (method.equals(METHOD_GET))
- doGet$(action);
- else if (method.equals(METHOD_HEAD))
- doHead$(action);
- else if (method.equals(METHOD_POST))
- doPost$(action);
- else if (method.equals(METHOD_PATCH))
- doPatch$(action) ;
- else if (method.equals(METHOD_OPTIONS))
- doOptions$(action) ;
- else if (method.equals(METHOD_TRACE))
- //doTrace(action) ;
- ServletOps.errorMethodNotAllowed("TRACE") ;
- else if (method.equals(METHOD_PUT))
- doPut$(action) ;
- else if (method.equals(METHOD_DELETE))
- doDelete$(action) ;
- else
- ServletOps.errorNotImplemented("Unknown method: "+method) ;
- }
-
- // Counter wrappers
-
- private final void doGet$(HttpAction action) {
- incCounter(action.srvRef, CounterName.GSPget) ;
- try {
- doGet(action) ;
- incCounter(action.srvRef, CounterName.GSPgetGood) ;
- } catch ( ActionErrorException ex) {
- incCounter(action.srvRef, CounterName.GSPgetBad) ;
- throw ex ;
- }
- }
-
- private final void doHead$(HttpAction action) {
- incCounter(action.srvRef, CounterName.GSPhead) ;
- try {
- doHead(action) ;
- incCounter(action.srvRef, CounterName.GSPheadGood) ;
- } catch ( ActionErrorException ex) {
- incCounter(action.srvRef, CounterName.GSPheadBad) ;
- throw ex ;
- }
- }
-
- private final void doPost$(HttpAction action) {
- incCounter(action.srvRef, CounterName.GSPpost) ;
- try {
- doPost(action) ;
- incCounter(action.srvRef, CounterName.GSPpostGood) ;
- } catch ( ActionErrorException ex) {
- incCounter(action.srvRef, CounterName.GSPpostBad) ;
- throw ex ;
- }
- }
-
- private final void doPatch$(HttpAction action) {
- incCounter(action.srvRef, CounterName.GSPpatch) ;
- try {
- doPatch(action) ;
- incCounter(action.srvRef, CounterName.GSPpatchGood) ;
- } catch ( ActionErrorException ex) {
- incCounter(action.srvRef, CounterName.GSPpatchBad) ;
- throw ex ;
- }
- }
-
- private final void doDelete$(HttpAction action) {
- incCounter(action.srvRef, CounterName.GSPdelete) ;
- try {
- doDelete(action) ;
- incCounter(action.srvRef, CounterName.GSPdeleteGood) ;
- } catch ( ActionErrorException ex) {
- incCounter(action.srvRef, CounterName.GSPdeleteBad) ;
- throw ex ;
- }
- }
-
- private final void doPut$(HttpAction action) {
- incCounter(action.srvRef, CounterName.GSPput) ;
- try {
- doPut(action) ;
- incCounter(action.srvRef, CounterName.GSPputGood) ;
- } catch ( ActionErrorException ex) {
- incCounter(action.srvRef, CounterName.GSPputBad) ;
- throw ex ;
- }
- }
-
- private final void doOptions$(HttpAction action) {
- incCounter(action.srvRef, CounterName.GSPoptions) ;
- try {
- doOptions(action) ;
- incCounter(action.srvRef, CounterName.GSPoptionsGood) ;
- } catch ( ActionErrorException ex) {
- incCounter(action.srvRef, CounterName.GSPoptionsBad) ;
- throw ex ;
- }
- }
-
- protected abstract void doGet(HttpAction action) ;
- protected abstract void doHead(HttpAction action) ;
- protected abstract void doPost(HttpAction action) ;
- protected abstract void doPatch(HttpAction action) ;
- protected abstract void doDelete(HttpAction action) ;
- protected abstract void doPut(HttpAction action) ;
- protected abstract void doOptions(HttpAction action) ;
-
- @Override
protected void validate(HttpAction action)
{
HttpServletRequest request = action.request ;
Copied: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP_R.java (from r1550957, jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST_R.java)
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP_R.java?p2=jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP_R.java&p1=jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST_R.java&r1=1550957&r2=1551061&rev=1551061&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST_R.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP_R.java Sun Dec 15 21:29:27 2013
@@ -32,9 +32,9 @@ import org.apache.jena.riot.* ;
import com.hp.hpl.jena.graph.Graph ;
/** Only the READ operations */
-public class SPARQL_REST_R extends SPARQL_REST
+public class SPARQL_GSP_R extends SPARQL_GSP
{
- public SPARQL_REST_R()
+ public SPARQL_GSP_R()
{ super() ; }
Copied: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP_RW.java (from r1550957, jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST_RW.java)
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP_RW.java?p2=jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP_RW.java&p1=jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST_RW.java&r1=1550957&r2=1551061&rev=1551061&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_REST_RW.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_GSP_RW.java Sun Dec 15 21:29:27 2013
@@ -31,9 +31,9 @@ import com.hp.hpl.jena.graph.Graph ;
import com.hp.hpl.jena.sparql.graph.GraphFactory ;
/** The WRITE operations added to the READ operations */
-public class SPARQL_REST_RW extends SPARQL_REST_R
+public class SPARQL_GSP_RW extends SPARQL_GSP_R
{
- public SPARQL_REST_RW()
+ public SPARQL_GSP_RW()
{ super() ; }
@Override
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_UberServlet.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_UberServlet.java?rev=1551061&r1=1551060&r2=1551061&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_UberServlet.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_UberServlet.java Sun Dec 15 21:29:27 2013
@@ -96,9 +96,10 @@ public abstract class SPARQL_UberServlet
private final ActionSPARQL queryServlet = new SPARQL_QueryDataset() ;
private final ActionSPARQL updateServlet = new SPARQL_Update() ;
private final ActionSPARQL uploadServlet = new SPARQL_Upload() ;
- private final ActionSPARQL restServlet_RW = new SPARQL_REST_RW() ;
- private final ActionSPARQL restServlet_R = new SPARQL_REST_R() ;
- private final ActionSPARQL restQuads = new REST_Quads() ;
+ private final ActionSPARQL gspServlet_R = new SPARQL_GSP_R() ;
+ private final ActionSPARQL gspServlet_RW = new SPARQL_GSP_RW() ;
+ private final ActionSPARQL restQuads_R = new REST_Quads_R() ;
+ private final ActionSPARQL restQuads_RW = new REST_Quads_RW() ;
public SPARQL_UberServlet() { super(); }
@@ -169,7 +170,10 @@ public abstract class SPARQL_UberServlet
if ( ! hasTrailing && ! hasParams )
{
- restQuads.executeLifecycle(action) ;
+ // Check enabled. But no trailing here.
+ // if ( serviceDispatch(action, desc.readGraphStore, trailing, restQuads_R) ) return ;
+ // if ( serviceDispatch(action, desc.readWriteGraphStore, trailing, restQuads_RW) ) return ;
+ restQuads_RW.executeLifecycle(action) ;
return ;
}
@@ -212,9 +216,17 @@ public abstract class SPARQL_UberServlet
// If so, dispatch to that service.
if ( serviceDispatch(action, desc.query, trailing, queryServlet) ) return ;
if ( serviceDispatch(action, desc.update, trailing, updateServlet) ) return ;
- if ( serviceDispatch(action, desc.upload, trailing, uploadServlet) ) return ;
- if ( serviceDispatch(action, desc.readGraphStore, trailing, restServlet_R) ) return ;
- if ( serviceDispatch(action, desc.readWriteGraphStore, trailing, restServlet_RW) ) return ;
+ if ( serviceDispatch(action, desc.upload, trailing, uploadServlet) ) return ;
+ if ( hasParams ) {
+ if ( serviceDispatch(action, desc.readGraphStore, trailing, gspServlet_R) ) return ;
+ if ( serviceDispatch(action, desc.readWriteGraphStore, trailing, gspServlet_RW) ) return ;
+ } else {
+ // No parameters - do as a quads operation on the dataset.
+ if ( serviceDispatch(action, desc.readGraphStore, trailing, restQuads_R) ) return ;
+ if ( serviceDispatch(action, desc.readWriteGraphStore, trailing, restQuads_RW) ) return ;
+ }
+
+ // If no params, its a daatset operation.
}
// There is a trailing part - params are illegal by this point.
if ( hasParams )
@@ -245,9 +257,9 @@ public abstract class SPARQL_UberServlet
// Graphs Store Protocol, indirect naming, read
// Indirect naming. Prefer the R service if available.
if ( desc.readGraphStore.isActive() )
- executeRequest(action, restServlet_R, desc.readGraphStore) ;
+ executeRequest(action, gspServlet_R, desc.readGraphStore) ;
else if ( desc.readWriteGraphStore.isActive() )
- executeRequest(action, restServlet_RW, desc.readWriteGraphStore) ;
+ executeRequest(action, gspServlet_RW, desc.readWriteGraphStore) ;
else
ServletOps.errorMethodNotAllowed(method) ;
return ;
@@ -256,7 +268,7 @@ public abstract class SPARQL_UberServlet
// Graphs Store Protocol, indirect naming, write
if ( ! allowREST_W(action))
ServletOps.errorForbidden("Forbidden: SPARQL Graph Store Protocol : Write operation : "+method) ;
- executeRequest(action, restServlet_RW, desc.readWriteGraphStore) ;
+ executeRequest(action, gspServlet_RW, desc.readWriteGraphStore) ;
return ;
}
Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/Upload.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/Upload.java?rev=1551061&r1=1551060&r2=1551061&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/Upload.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/Upload.java Sun Dec 15 21:29:27 2013
@@ -30,10 +30,7 @@ import org.apache.commons.fileupload.ser
import org.apache.jena.atlas.io.IO ;
import org.apache.jena.atlas.web.ContentType ;
import org.apache.jena.fuseki.FusekiLib ;
-import org.apache.jena.riot.Lang ;
-import org.apache.jena.riot.RDFLanguages ;
-import org.apache.jena.riot.RiotParseException ;
-import org.apache.jena.riot.WebContent ;
+import org.apache.jena.riot.* ;
import org.apache.jena.riot.lang.StreamRDFCounting ;
import org.apache.jena.riot.system.StreamRDF ;
import org.apache.jena.riot.system.StreamRDFLib ;
@@ -97,7 +94,9 @@ public class Upload {
// Process the input stream
String contentTypeHeader = fileStream.getContentType() ;
ContentType ct = ContentType.create(contentTypeHeader) ;
- Lang lang = RDFLanguages.contentTypeToLang(ct.getContentType()) ;
+ Lang lang = null ;
+ if ( ! WebContent.contentTypeTextPlain.equals(ct.getContentType()) )
+ lang = RDFLanguages.contentTypeToLang(ct.getContentType()) ;
if ( lang == null ) {
String name = fileStream.getName() ;
Added: jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/FileSender.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/FileSender.java?rev=1551061&view=auto
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/FileSender.java (added)
+++ jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/FileSender.java Sun Dec 15 21:29:27 2013
@@ -0,0 +1,90 @@
+/**
+ * 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.fuseki;
+
+import java.io.IOException ;
+import java.io.PrintStream ;
+import java.net.HttpURLConnection ;
+import java.net.URL ;
+import java.util.ArrayList ;
+import java.util.List ;
+import java.util.UUID ;
+
+import org.apache.jena.atlas.io.IO ;
+
+public class FileSender {
+ // HttpClient 4.3 has MultipartEntity but the 4.2->4.3 change is less
+ // than trivial (and it seems some environemnt fix the HttpClient)
+ // so here's some code for testing support.
+// MultipartEntity entity = new MultipartEntity();
+// entity.addPart(...)
+// HttpPost request = new HttpPost(url);
+// request.setEntity(entity);
+// HttpClient client = new DefaultHttpClient();
+// HttpResponse response = client.execute(request);
+
+ class Entry {
+ String fileName ;
+ String content ;
+ String contentType ;
+ }
+
+ private List<Entry> items = new ArrayList<Entry>() ;
+
+ private String url ;
+
+ public FileSender(String url ) { this.url = url ; }
+
+ public void add(String filename, String content, String type) {
+ Entry e = new Entry() ;
+ e.fileName = filename ;
+ e.content = content ;
+ e.contentType = type ;
+ items.add(e) ;
+ }
+
+ public void send(String method) {
+ try {
+ String WNL = "\r\n" ; // Web newline
+ String boundary = UUID.randomUUID().toString() ;
+
+ HttpURLConnection connection = (HttpURLConnection)new URL(url).openConnection();
+ connection.setRequestMethod(method);
+ connection.setDoOutput(true) ;
+ connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
+ PrintStream ps = new PrintStream(connection.getOutputStream()) ;
+ try {
+ for ( Entry e : items ) {
+ ps.print("--" + boundary+WNL) ;
+ ps.print("Content-Disposition: form-data; name=\"FILE\"; filename=\""+e.fileName+"\""+WNL) ;
+ ps.print("Content-Type: "+e.contentType+";charset=UTF-8"+WNL) ;
+ ps.print(WNL);
+ ps.print(e.content) ;
+ ps.print(WNL);
+ }
+ ps.print("--" + boundary + "--"+WNL);
+ } finally {
+ ps.close();
+ }
+ connection.connect();
+ int responseCode = connection.getResponseCode();
+ } catch (IOException ex) { IO.exception(ex); }
+ }
+}
+
Modified: jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/ServerTest.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/ServerTest.java?rev=1551061&r1=1551060&r2=1551061&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/ServerTest.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/ServerTest.java Sun Dec 15 21:29:27 2013
@@ -54,9 +54,10 @@ public class ServerTest
public static final int port = 3535 ;
public static final String urlRoot = "http://localhost:"+port+"/" ;
public static final String datasetPath = "/dataset" ;
- public static final String serviceUpdate = "http://localhost:"+port+datasetPath+"/update" ;
- public static final String serviceQuery = "http://localhost:"+port+datasetPath+"/query" ;
- public static final String serviceREST = "http://localhost:"+port+datasetPath+"/data" ;
+ public static final String urlDataset = "http://localhost:"+port+datasetPath ;
+ public static final String serviceUpdate = urlDataset+"/update" ;
+ public static final String serviceQuery = urlDataset+"/query" ;
+ public static final String serviceREST = urlDataset+"/data" ;
public static final String gn1 = "http://graph/1" ;
public static final String gn2 = "http://graph/2" ;
@@ -104,6 +105,7 @@ public class ServerTest
ServerConfig conf = FusekiConfig.defaultConfiguration(ServerTest.datasetPath, dsg, true, true) ;
conf.port = ServerTest.port ;
conf.pagesPort = ServerTest.port ;
+
server = new SPARQLServer(conf) ;
server.start() ;
}
Modified: jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TS_Fuseki.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TS_Fuseki.java?rev=1551061&r1=1551060&r2=1551061&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TS_Fuseki.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TS_Fuseki.java Sun Dec 15 21:29:27 2013
@@ -38,6 +38,8 @@ import org.junit.runners.Suite ;
, TestDatasetAccessorHTTP.class
, TestQuery.class
, TestAuth.class
+ , TestGSP.class
+ , TestFileUpload.class
})
public class TS_Fuseki extends ServerTest
{
Modified: jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestAuth.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestAuth.java?rev=1551061&r1=1551060&r2=1551061&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestAuth.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestAuth.java Sun Dec 15 21:29:27 2013
@@ -23,6 +23,7 @@ import java.io.FileWriter ;
import java.io.IOException ;
import java.net.URI ;
import java.net.URISyntaxException ;
+import java.util.Collection ;
import java.util.HashMap ;
import java.util.Map ;
@@ -32,6 +33,7 @@ import org.apache.jena.atlas.web.auth.Pr
import org.apache.jena.atlas.web.auth.ScopedAuthenticator ;
import org.apache.jena.atlas.web.auth.ServiceAuthenticator ;
import org.apache.jena.atlas.web.auth.SimpleAuthenticator ;
+import org.apache.jena.fuseki.server.DatasetRegistry ;
import org.apache.jena.fuseki.server.FusekiConfig ;
import org.apache.jena.fuseki.server.SPARQLServer ;
import org.apache.jena.fuseki.server.ServerConfig ;
@@ -98,7 +100,9 @@ public class TestAuth extends ServerTest
@AfterClass
public static void teardown() {
server.stop();
-
+ Collection<String> keys = DatasetRegistry.get().keys() ;
+ for ( String k : keys )
+ DatasetRegistry.get().remove(k);
realmFile.delete();
}
Modified: jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestFileUpload.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestFileUpload.java?rev=1551061&r1=1551060&r2=1551061&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestFileUpload.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestFileUpload.java Sun Dec 15 21:29:27 2013
@@ -21,6 +21,7 @@ package org.apache.jena.fuseki;
import static org.apache.jena.fuseki.ServerTest.serviceREST ;
import org.apache.jena.atlas.junit.BaseTest ;
import org.junit.AfterClass ;
+import org.junit.Before ;
import org.junit.BeforeClass ;
import org.junit.Test ;
@@ -41,7 +42,11 @@ public class TestFileUpload extends Base
ServerTest.freeServer() ;
}
- @Test public void upload_01()
+ @Before public void beforeTest() {
+ ServerTest.resetServer() ;
+ }
+
+ @Test public void upload_gsp_01()
{
FileSender x = new FileSender(ServerTest.serviceREST+"?default") ;
x.add("D.ttl", "<http://example/s> <http://example/p> <http://example/o> .", "text/turtle") ;
@@ -52,7 +57,7 @@ public class TestFileUpload extends Base
assertEquals(1, m.size()) ;
}
- @Test public void upload_02()
+ @Test public void upload_gsp_02()
{
FileSender x = new FileSender(ServerTest.serviceREST+"?default") ;
x.add("D.ttl", "<http://example/s> <http://example/p> 123 .", "text/turtle") ;
@@ -64,4 +69,60 @@ public class TestFileUpload extends Base
assertEquals(2, m.size()) ;
}
+ // Beyond strict GSP - no graph selector => dataset
+ @Test public void upload_gsp_03()
+ {
+ FileSender x = new FileSender(ServerTest.serviceREST) ;
+ x.add("D.ttl", "<http://example/s> <http://example/p> <http://example/o> .", "text/turtle") ;
+ x.add("D.trig", "<http://example/g> { <http://example/s> <http://example/p> <http://example/o> }", "text/trig") ;
+ x.send("POST") ;
+
+ DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
+ Model m = du.getModel() ;
+ assertEquals(1, m.size()) ;
+ }
+
+ @Test public void upload_gsp_04()
+ {
+ {
+ DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
+ Model m = du.getModel() ;
+ assertEquals(0, m.size()) ;
+ }
+ FileSender x = new FileSender(ServerTest.urlDataset) ;
+ x.add("D.ttl", "<http://example/s> <http://example/p> <http://example/o> .", "text/plain") ;
+ x.add("D.trig", "<http://example/g> { <http://example/s> <http://example/p> 123,456 }", "text/plain") ;
+ x.send("POST") ;
+
+ DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
+ Model m = du.getModel() ;
+ assertEquals(1, m.size()) ;
+ m = du.getModel("http://example/g") ;
+ assertEquals(2, m.size()) ;
+ }
+
+ @Test public void upload_dataset_01() {
+ FileSender x = new FileSender(ServerTest.urlDataset) ;
+ x.add("D.nq", "", "application/-n-quads") ;
+ x.send("PUT") ;
+
+ DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
+ Model m = du.getModel() ;
+ assertEquals(0, m.size()) ;
+
+ }
+
+ @Test public void upload_dataset_02() {
+ FileSender x = new FileSender(ServerTest.urlDataset) ;
+ x.add("D.nq", "<http://example/s> <http://example/p> <http://example/o-456> <http://example/g> .", "application/-n-quads") ;
+ x.send("PUT") ;
+
+ DatasetAccessor du = DatasetAccessorFactory.createHTTP(serviceREST) ;
+ Model m = du.getModel("http://example/g") ;
+ assertEquals(1, m.size()) ;
+ m = du.getModel() ;
+ assertEquals(0, m.size()) ;
+
+ }
+
}
Added: jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestGSP.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestGSP.java?rev=1551061&view=auto
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestGSP.java (added)
+++ jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/TestGSP.java Sun Dec 15 21:29:27 2013
@@ -0,0 +1,127 @@
+/*
+ * 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.fuseki;
+
+import static org.apache.jena.fuseki.ServerTest.serviceQuery ;
+import static org.apache.jena.fuseki.ServerTest.serviceREST ;
+import static org.apache.jena.fuseki.ServerTest.urlDataset ;
+
+import java.io.IOException ;
+import java.io.OutputStream ;
+import java.io.StringReader ;
+
+import org.apache.http.HttpEntity ;
+import org.apache.http.entity.ContentProducer ;
+import org.apache.http.entity.EntityTemplate ;
+import org.apache.jena.atlas.junit.BaseTest ;
+import org.apache.jena.atlas.lib.StrUtils ;
+import org.apache.jena.atlas.web.HttpException ;
+import org.apache.jena.riot.Lang ;
+import org.apache.jena.riot.RDFDataMgr ;
+import org.apache.jena.riot.RDFFormat ;
+import org.apache.jena.riot.web.HttpOp ;
+import org.apache.jena.web.HttpSC ;
+import org.junit.AfterClass ;
+import org.junit.Before ;
+import org.junit.BeforeClass ;
+import org.junit.Test ;
+
+import com.hp.hpl.jena.sparql.core.DatasetGraph ;
+import com.hp.hpl.jena.sparql.core.DatasetGraphFactory ;
+import com.hp.hpl.jena.sparql.sse.SSE ;
+
+/** TestDatasetAccessorHTTP does most of the GSP testing.
+ * This class adds the testing of Fuseki extras.
+ */
+public class TestGSP extends BaseTest
+{
+ @BeforeClass
+ public static void beforeClass() {
+ ServerTest.allocServer() ;
+ //ServerTest.resetServer() ;
+ }
+
+ @AfterClass
+ public static void afterClass() {
+ ServerTest.freeServer() ;
+ }
+
+ @Before public void beforeTest() {
+ ServerTest.resetServer() ;
+ }
+
+ static DatasetGraph data = SSE.parseDatasetGraph(StrUtils.strjoinNL
+ ("(prefix ((: <http://example/>))",
+ " (dataset",
+ " (graph (_:x :p 1) (_:x :p 2))" ,
+ " (graph :g (_:x :p 3))",
+ "))"
+ )) ;
+
+ /** Create an HttpEntity for the graph */
+ protected HttpEntity datasetToHttpEntity(final DatasetGraph dsg) {
+
+ final RDFFormat syntax = RDFFormat.NQUADS ;
+ ContentProducer producer = new ContentProducer() {
+ @Override
+ public void writeTo(OutputStream out) throws IOException {
+ RDFDataMgr.write(out, dsg, syntax) ;
+ }
+ } ;
+ EntityTemplate entity = new EntityTemplate(producer) ;
+ String ct = syntax.getLang().getContentType().getContentType() ;
+ entity.setContentType(ct) ;
+ return entity ;
+ }
+
+ @Test public void gsp_x_01() {
+ gsp_x(urlDataset, urlDataset) ;
+ }
+
+ @Test public void gsp_x_02() {
+ gsp_x(urlDataset, serviceREST) ;
+ }
+
+ @Test public void gsp_x_03() {
+ gsp_x(serviceREST, urlDataset) ;
+ }
+
+ @Test public void gsp_x_04() {
+ gsp_x(serviceREST, urlDataset) ;
+ }
+ private void gsp_x(String outward, String inward) {
+ HttpEntity e = datasetToHttpEntity(data) ;
+ HttpOp.execHttpPut(outward, e);
+ String x = HttpOp.execHttpGetString(inward, "application/n-quads") ;
+ DatasetGraph dsg = DatasetGraphFactory.createMem() ;
+ RDFDataMgr.read(dsg, new StringReader(x), null, Lang.NQUADS) ;
+ assertEquals(2, dsg.getDefaultGraph().size()) ;
+ }
+
+ @Test
+ public void gsp_x_10()
+ {
+ HttpEntity e = datasetToHttpEntity(data) ;
+ try {
+ HttpOp.execHttpPost(serviceQuery, e);
+ } catch (HttpException ex) {
+ assertTrue(HttpSC.isClientError(ex.getResponseCode())) ;
+ }
+ }
+}
\ No newline at end of file
Modified: jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/http/TestDatasetAccessorHTTP.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/http/TestDatasetAccessorHTTP.java?rev=1551061&r1=1551060&r2=1551061&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/http/TestDatasetAccessorHTTP.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/http/TestDatasetAccessorHTTP.java Sun Dec 15 21:29:27 2013
@@ -47,10 +47,10 @@ public class TestDatasetAccessorHTTP ext
@AfterClass public static void afterClass() { ServerTest.freeServer() ; }
@Before public void before() { ServerTest.resetServer() ; }
- @Test(expected=HttpException.class)
+ @Test
public void test_ds_1()
{
- // Can't GET the dataset service.
+ // Can GET the dataset service.
try {
HttpOp.execHttpGet(serviceREST) ;
} catch (HttpException ex) {