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/13 19:06:35 UTC

svn commit: r1550784 - in /jena/branches/jena-fuseki-new-ui: ./ src/main/java/org/apache/jena/fuseki/ src/main/java/org/apache/jena/fuseki/servlets/ src/test/java/org/apache/jena/fuseki/

Author: andy
Date: Fri Dec 13 18:06:35 2013
New Revision: 1550784

URL: http://svn.apache.org/r1550784
Log:
Add upload by multipart form to GSP.

Removed:
    jena/branches/jena-fuseki-new-ui/delete-ds
Modified:
    jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/FusekiLib.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/SPARQL_REST.java
    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/main/java/org/apache/jena/fuseki/servlets/SPARQL_Upload.java
    jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ServletBase.java
    jena/branches/jena-fuseki-new-ui/src/test/java/org/apache/jena/fuseki/ServerTest.java

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/FusekiLib.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/FusekiLib.java?rev=1550784&r1=1550783&r2=1550784&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/FusekiLib.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/FusekiLib.java Fri Dec 13 18:06:35 2013
@@ -140,4 +140,17 @@ public class FusekiLib {
         PrefixMapping pmapDest = dsg.getDefaultGraph().getPrefixMapping() ;
         pmapDest.withDefaultMappings(pmapSrc) ;
     }
+    
+    public static void addDataInto(DatasetGraph src, DatasetGraph dest) {
+        Iterator<Quad> iter = src.find(Node.ANY, Node.ANY, Node.ANY, Node.ANY) ;
+        for (; iter.hasNext();) {
+            Quad q = iter.next() ;
+            dest.add(q) ;
+        }
+
+        PrefixMapping pmapSrc = src.getDefaultGraph().getPrefixMapping() ;
+        PrefixMapping pmapDest = dest.getDefaultGraph().getPrefixMapping() ;
+        pmapDest.withDefaultMappings(pmapSrc) ;
+    }
+
 }

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=1550784&r1=1550783&r2=1550784&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 Fri Dec 13 18:06:35 2013
@@ -28,6 +28,7 @@ import javax.servlet.ServletException ;
 import javax.servlet.http.HttpServletRequest ;
 import javax.servlet.http.HttpServletResponse ;
 
+import org.apache.jena.fuseki.Fuseki ;
 import org.apache.jena.fuseki.HttpNames ;
 import org.apache.jena.web.HttpSC ;
 import org.slf4j.Logger ;
@@ -100,12 +101,9 @@ public abstract class ActionBase extends
     /** Return a fresh WebAction for this request */
     protected HttpAction allocHttpAction(long id, HttpServletRequest request, HttpServletResponse response) {
         // Need a way to set verbose logging on a per servlet and per request basis. 
-        return new HttpAction(id, log, request, response, verboseLogging) ;
+        return new HttpAction(id, log, request, response, Fuseki.verboseLogging) ;
     }
 
-//    protected abstract void validate(HttpAction action) ;
-//    protected abstract void perform(HttpAction action) ;
-
     // Default start/finish steps. 
     protected void startRequest(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=1550784&r1=1550783&r2=1550784&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 Fri Dec 13 18:06:35 2013
@@ -18,11 +18,27 @@
 
 package org.apache.jena.fuseki.servlets;
 
+import static java.lang.String.format ;
 import static org.apache.jena.fuseki.server.CounterName.Requests ;
 import static org.apache.jena.fuseki.server.CounterName.RequestsBad ;
 import static org.apache.jena.fuseki.server.CounterName.RequestsGood ;
+
+import java.io.InputStream ;
+import java.util.zip.GZIPInputStream ;
+
+import org.apache.commons.fileupload.FileItemIterator ;
+import org.apache.commons.fileupload.FileItemStream ;
+import org.apache.commons.fileupload.servlet.ServletFileUpload ;
+import org.apache.jena.atlas.web.ContentType ;
 import org.apache.jena.fuseki.Fuseki ;
 import org.apache.jena.fuseki.server.* ;
+import org.apache.jena.riot.* ;
+import org.apache.jena.riot.lang.LangRIOT ;
+import org.apache.jena.riot.lang.StreamRDFCounting ;
+import org.apache.jena.riot.system.ErrorHandler ;
+import org.apache.jena.riot.system.ErrorHandlerFactory ;
+import org.apache.jena.riot.system.StreamRDF ;
+import org.apache.jena.riot.system.StreamRDFLib ;
 
 import com.hp.hpl.jena.query.QueryCancelledException ;
 
@@ -123,4 +139,83 @@ public abstract class ActionSPARQL exten
             Fuseki.serverLog.warn("Exception on counter dec", ex) ;
         }
     }
+
+        public static void parse(HttpAction action, StreamRDF dest, InputStream input, Lang lang, String base) {
+            // Need to adjust the error handler.
+    //        try { RDFDataMgr.parse(dest, input, base, lang) ; }
+    //        catch (RiotException ex) { errorBadRequest("Parse error: "+ex.getMessage()) ; }
+            LangRIOT parser = RiotReader.createParser(input, lang, base, dest) ;
+            ErrorHandler errorHandler = ErrorHandlerFactory.errorHandlerStd(action.log); 
+            parser.getProfile().setHandler(errorHandler) ;
+            try { parser.parse() ; } 
+            catch (RiotException ex) { errorBadRequest("Parse error: "+ex.getMessage()) ; }
+        }
+
+    /**  Process an HTTP upload of RDF files (triples or quads)
+     *   Stream straight into a graph or dataset -- unlike SPARQL_Upload the destination
+     *   is known at the start of the multipart file body
+     */
+    
+    static public void fileUploadWorker(HttpAction action, StreamRDF dest, boolean isGraph) {
+        String base = wholeRequestURL(action.request) ;
+        String item = (isGraph)?"quad":"triple" ;
+        ServletFileUpload upload = new ServletFileUpload();
+        long count = -1 ;
+        
+        //log.info(format("[%d] Upload: Field=%s ignored", action.id, fieldName)) ;
+        
+        try {
+            FileItemIterator iter = upload.getItemIterator(action.request);
+            while (iter.hasNext()) {
+                FileItemStream fileStream = iter.next();
+                if (fileStream.isFormField())
+                    errorBadRequest("Only files accept in multipart file upload") ;
+                //Ignore the field name.
+                //String fieldName = fileStream.getFieldName();
+    
+                InputStream stream = fileStream.openStream();
+                // Process the input stream
+                String contentTypeHeader = fileStream.getContentType() ;
+                ContentType ct = ContentType.create(contentTypeHeader) ;
+                Lang lang = RDFLanguages.contentTypeToLang(ct.getContentType()) ;
+    
+                if ( lang == null ) {
+                    String name = fileStream.getName() ; 
+                    if ( name == null || name.equals("") ) 
+                        errorBadRequest("No name for content - can't determine RDF syntax") ;
+                    lang = RDFLanguages.filenameToLang(name) ;
+                    if (name.endsWith(".gz"))
+                        stream = new GZIPInputStream(stream);
+                }
+                if ( lang == null )
+                    // Desperate.
+                    lang = RDFLanguages.RDFXML ;
+    
+                String printfilename = fileStream.getName() ; 
+                if ( printfilename == null  || printfilename.equals("") )
+                    printfilename = "<none>" ; 
+    
+                // Before
+                // action.log.info(format("[%d] Filename: %s, Content-Type=%s, Charset=%s => %s", 
+                //                        action.id, printfilename,  ct.getContentType(), ct.getCharset(), lang.getName())) ;
+                
+                StreamRDFCounting countingDest =  StreamRDFLib.count(dest) ;
+                try {
+                    ActionSPARQL.parse(action, countingDest, stream, lang, base);
+                    long c = countingDest.count() ;
+                    
+                    action.log.info(format("[%d] Filename: %s, Content-Type=%s, Charset=%s => %s : %d %s%s", 
+                                           action.id, printfilename,  ct.getContentType(), ct.getCharset(), lang.getName(),
+                                           c, item, (c==1)?"":"s")) ;
+                } catch (RiotParseException ex) {
+                    action.log.info(format("[%d] Filename: %s, Content-Type=%s, Charset=%s => %s : %s",
+                                           action.id, printfilename,  ct.getContentType(), ct.getCharset(), lang.getName(),
+                                           ex.getMessage())) ;
+                    throw ex ;
+                }
+            }
+        }
+        catch (ActionErrorException ex) { throw ex ; }
+        catch (Exception ex)            { errorOccurred(ex) ; }
+    }
 }

Modified: 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_REST.java?rev=1550784&r1=1550783&r2=1550784&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_REST.java Fri Dec 13 18:06:35 2013
@@ -18,29 +18,19 @@
 
 package org.apache.jena.fuseki.servlets;
 
-import static java.lang.String.format ;
 import static org.apache.jena.fuseki.HttpNames.* ;
 
 import java.io.IOException ;
-import java.io.InputStream ;
 import java.util.Enumeration ;
 import java.util.Locale ;
-import java.util.zip.GZIPInputStream ;
 
 import javax.servlet.ServletException ;
 import javax.servlet.http.HttpServletRequest ;
 import javax.servlet.http.HttpServletResponse ;
 
-import org.apache.commons.fileupload.FileItemIterator ;
-import org.apache.commons.fileupload.FileItemStream ;
-import org.apache.commons.fileupload.servlet.ServletFileUpload ;
-import org.apache.jena.atlas.web.ContentType ;
 import org.apache.jena.fuseki.HttpNames ;
 import org.apache.jena.fuseki.server.CounterName ;
-import org.apache.jena.riot.* ;
-import org.apache.jena.riot.lang.LangRIOT ;
-import org.apache.jena.riot.lang.StreamRDFCounting ;
-import org.apache.jena.riot.system.* ;
+import org.apache.jena.riot.system.IRIResolver ;
 import org.slf4j.Logger ;
 import org.slf4j.LoggerFactory ;
 
@@ -106,6 +96,13 @@ public abstract class SPARQL_REST extend
             return new Target(true, dsg, null, null) ;
         }
 
+        /** Create a new Target which is like the original but aimed at a different DatasetGraph */
+        static Target retarget(Target target, DatasetGraph dsg) {
+            Target target2 = new Target(target, dsg) ;
+            target2._graph = null ;
+            return target2 ;
+        }
+        
         private Target(boolean isDefault, DatasetGraph dsg, String name, Node graphName) {
             this.isDefault = isDefault ;
             this.dsg = dsg ;
@@ -125,6 +122,14 @@ public abstract class SPARQL_REST extend
             }                
         }
 
+        private Target(Target other, DatasetGraph dsg) {
+            this.isDefault  = other.isDefault ;
+            this.dsg        = dsg ; //other.dsg ;
+            this._graph     = other._graph ;
+            this.name       = other.name ;
+            this.graphName  = other.graphName ;
+        }
+        
         /** Get a graph for the action - this may create a graph in the dataset - this is not a test for graph existence */
         public Graph graph() {
             if ( ! isGraphSet() )
@@ -290,19 +295,6 @@ public abstract class SPARQL_REST extend
     protected abstract void doPut(HttpAction action) ;
     protected abstract void doOptions(HttpAction action) ;
     
-    // XXX Move to SPARQL_ServletBase
-    // Check for all RiotReader
-    public static void parse(HttpAction action, StreamRDF dest, InputStream input, Lang lang, String base) {
-        // Need to adjust the error handler.
-//        try { RDFDataMgr.parse(dest, input, base, lang) ; }
-//        catch (RiotException ex) { errorBadRequest("Parse error: "+ex.getMessage()) ; }
-        LangRIOT parser = RiotReader.createParser(input, lang, base, dest) ;
-        ErrorHandler errorHandler = ErrorHandlerFactory.errorHandlerStd(action.log); 
-        parser.getProfile().setHandler(errorHandler) ;
-        try { parser.parse() ; } 
-        catch (RiotException ex) { errorBadRequest("Parse error: "+ex.getMessage()) ; }
-    }
-
     @Override
     protected void validate(HttpAction action)
     {
@@ -352,86 +344,4 @@ public abstract class SPARQL_REST extend
             errorBadRequest("Multiple occurrences of '"+name+"'") ;
         return values[0] ;
     }
-    
-    // XXX Where to put this?
-    /**  Process an HTTP upload of RDF files (triples or quads)
-     *   Stream straight into a graph or dataset -- unlike SPARQL_Upload the destination is known
-     *   at the start of the multipart file body
-     */
-    
-    static public void fileUploadWorker(HttpAction action, String base)
-    {
-        // XXX Extend determineTarget to allow for datasets.  Conflict with direct naming?
-        Target target = determineTarget(action) ;
-
-        String item = (target==null)?"quad":"triple" ;
-
-        // Load quads or triples.
-        // Caution: if a target grpah is given and then a quads format found,
-        // the default graph of the quad steram is sent to the target graph.
-        StreamRDF dest = 
-            (target == null) 
-            ? StreamRDFLib.dataset(action.getActiveDSG())
-            : StreamRDFLib.graph(target.graph()) ; 
-            
-        ServletFileUpload upload = new ServletFileUpload();
-        long count = -1 ;
-        
-        //log.info(format("[%d] Upload: Field=%s ignored", action.id, fieldName)) ;
-        
-        try {
-            FileItemIterator iter = upload.getItemIterator(action.request);
-            while (iter.hasNext()) {
-                FileItemStream fileStream = iter.next();
-                if (fileStream.isFormField())
-                    errorBadRequest("Only files accept in multipart file upload") ;
-                //Ignore the field name.
-                //String fieldName = fileStream.getFieldName();
-
-                InputStream stream = fileStream.openStream();
-                // Process the input stream
-                String contentTypeHeader = fileStream.getContentType() ;
-                ContentType ct = ContentType.create(contentTypeHeader) ;
-                Lang lang = RDFLanguages.contentTypeToLang(ct.getContentType()) ;
-
-                if ( lang == null ) {
-                    String name = fileStream.getName() ; 
-                    if ( name == null || name.equals("") ) 
-                        errorBadRequest("No name for content - can't determine RDF syntax") ;
-                    lang = RDFLanguages.filenameToLang(name) ;
-                    if (name.endsWith(".gz"))
-                        stream = new GZIPInputStream(stream);
-                }
-                if ( lang == null )
-                    // Desperate.
-                    lang = RDFLanguages.RDFXML ;
-
-                String printfilename = fileStream.getName() ; 
-                if ( printfilename == null  || printfilename.equals("") )
-                    printfilename = "<none>" ; 
-
-                // Before
-                // action.log.info(format("[%d] Filename: %s, Content-Type=%s, Charset=%s => %s", 
-                //                        action.id, printfilename,  ct.getContentType(), ct.getCharset(), lang.getName())) ;
-                
-                StreamRDFCounting countingDest =  StreamRDFLib.count(dest) ;
-                try {
-                    SPARQL_REST.parse(action, countingDest, stream, lang, base);
-                    long c = countingDest.count() ;
-                    
-                    action.log.info(format("[%d] Filename: %s, Content-Type=%s, Charset=%s => %s : %d %s%s", 
-                                           action.id, printfilename,  ct.getContentType(), ct.getCharset(), lang.getName(),
-                                           c, item, (c==1)?"":"s")) ;
-                } catch (RiotParseException ex) {
-                    action.log.info(format("[%d] Filename: %s, Content-Type=%s, Charset=%s => %s : %s",
-                                           action.id, printfilename,  ct.getContentType(), ct.getCharset(), lang.getName(),
-                                           ex.getMessage())) ;
-                    throw ex ;
-                }
-            }
-        }
-        catch (ActionErrorException ex) { throw ex ; }
-        catch (Exception ex)            { errorOccurred(ex) ; }
-    }            
-
 }

Modified: 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_REST_RW.java?rev=1550784&r1=1550783&r2=1550784&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_REST_RW.java Fri Dec 13 18:06:35 2013
@@ -36,6 +36,8 @@ import org.apache.jena.riot.system.Strea
 import org.apache.jena.web.HttpSC ;
 
 import com.hp.hpl.jena.graph.Graph ;
+import com.hp.hpl.jena.sparql.core.DatasetGraph ;
+import com.hp.hpl.jena.sparql.core.DatasetGraphFactory ;
 import com.hp.hpl.jena.sparql.graph.GraphFactory ;
 
 /** The WRITE operations added to the READ operations */
@@ -85,13 +87,6 @@ public class SPARQL_REST_RW extends SPAR
         if ( ct == null )
             errorBadRequest("No Content-Type:") ;
 
-        // Helper case - if it's a possible HTTP file upload, pretend that's the action.
-        if ( WebContent.contentTypeMultiFormData.equalsIgnoreCase(ct.getContentType()) ) {
-            String base = wholeRequestURL(action.request) ;
-            fileUpload(action, base);
-            return ; 
-        }
-
         if ( WebContent.contentTypeMultiMixed.equals(ct.getContentType()) ) {
             error(HttpSC.UNSUPPORTED_MEDIA_TYPE_415, "multipart/mixed not supported") ;
         }
@@ -144,6 +139,9 @@ public class SPARQL_REST_RW extends SPAR
             action.endWrite() ;
         }
     }
+    
+    
+    
 
     /** Add data where the destination does not support full transactions.
      *  In particular, with no abort, and actions probably going to the real storage
@@ -187,9 +185,54 @@ public class SPARQL_REST_RW extends SPAR
         } finally { action.endWrite() ; }
     }
     
+     private static void uploadNonTxn(HttpAction action, String base) {
+         DatasetGraph dsg = DatasetGraphFactory.createMem() ;
+         // Need temporary destination
+         action.beginWrite() ;
+         try {
+             Target target = determineTarget(action) ;
+             boolean isGraph = (target == null) ;
+             // Load quads or triples.
+             // Caution: if a target graph is given and then a quads format found,
+             // the default graph of the quad steram is sent to the target graph.
+             Target target1 = Target.retarget(target, dsg) ;
+             StreamRDF dest = 
+                 (target == null) 
+                 ? StreamRDFLib.dataset(target1.dsg)
+                 : StreamRDFLib.graph(target1.graph()) ; 
+             
+             fileUploadWorker(action, dest, isGraph) ;
+         
+             // Copy temp dsg to target.dsg - hopefuly, nothing can go wrong.
+             FusekiLib.addDataInto(dsg, target.dsg);
+             action.commit() ;
+             success(action) ;
+         } catch (Exception ex) {
+             // Something else went wrong.  Try to backout (unlikely).
+             try { action.abort() ; } catch (Exception ex2) {} 
+             errorOccurred(ex.getMessage()) ;
+             return ;
+         } finally {
+             action.endWrite() ;
+         } 
+     }
+    
     private static void incomingData(HttpAction action, StreamRDF dest) {
-        String base = wholeRequestURL(action.request) ;
         ContentType ct = FusekiLib.getContentType(action) ;
+         
+        if ( WebContent.contentTypeMultiFormData.equalsIgnoreCase(ct.getContentType()) ) 
+        {
+            boolean isGraph = true ;    // Only for the tripels/quads logging.
+            fileUploadWorker(action, dest, isGraph) ;
+            return ;
+        }
+//        else
+//            incomingDataGraphBody(action, ct, dest) ;
+//    }
+//        
+//    private static void incomingDataGraphBody(HttpAction action, ContentType ct, StreamRDF dest) {
+        
+        String base = wholeRequestURL(action.request) ; // XXX Actually wrong?!
         Lang lang = RDFLanguages.contentTypeToLang(ct.getContentType()) ;
         if ( lang == null ) {
             errorBadRequest("Unknown content type for triples: " + ct) ;
@@ -209,60 +252,10 @@ public class SPARQL_REST_RW extends SPAR
                                 ct.getCharset(), lang.getName())) ;
         }
     
-        parse(action, dest, input, lang, base) ;
+        ActionSPARQL.parse(action, dest, input, lang, base) ;
     }
     
-    static public void fileUpload(HttpAction action, String base)
-    {
-        if ( action.isTransactional() )
-            uploadTxn(action, base) ;
-        else
-            uploadNonTxn(action, base) ;
-    }
-
-    /** Non-transaction - buffer to a temporary graph so that parse errors
-     * are caught before inserting any data. 
-     */
-     private static void uploadNonTxn(HttpAction action, String base) {
-         System.err.println("Dangerous fake") ; 
-         // Need tempoary destination
-         action.beginWrite() ;
-         fileUploadWorker(action, base) ;
-         action.commit() ;
-         // XXX
-//         Pair<String, Graph> p = null ;
-//         String graphName = p.getLeft() ;
-//         Graph graphTmp = p.getRight() ;
-//         long tripleCount = graphTmp.size() ;
-//
-//         action.log.info(format("[%d] Upload: Graph: %s (%d triple(s))", 
-//                         action.id, graphName,  tripleCount)) ;
-//
-//         Node gn = graphName.equals(HttpNames.valueDefault)
-//             ? Quad.defaultGraphNodeGenerated 
-//             : NodeFactory.createURI(graphName) ;
-//
-//         action.beginWrite() ;
-//         try {
-//            FusekiLib.addDataInto(graphTmp, action.getActiveDSG(), gn) ;
-//            action.commit() ;
-//            return ;
-//        } catch (RuntimeException ex)
-//        {
-//            // If anything went wrong, try to backout.
-//            try { action.abort() ; } catch (Exception ex2) {}
-//            errorOccurred(ex.getMessage()) ;
-//            return ;
-//        } 
-//        finally { action.endWrite() ; }
-    }
-
-     /** Transactional - data to go straight to the destination, with an abort on parse error.
-      */
-      private static void uploadTxn(HttpAction action, String base) {
-          fileUploadWorker(action, base) ;
-      }
-     
+    // XXX Tests for file upload.
     
     protected static void deleteGraph(HttpAction action) {
         Target target = determineTarget(action) ;

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Upload.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Upload.java?rev=1550784&r1=1550783&r2=1550784&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Upload.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Upload.java Fri Dec 13 18:06:35 2013
@@ -241,7 +241,7 @@ public class SPARQL_Upload extends Actio
                     
                     StreamRDF x = StreamRDFLib.graph(graphTmp) ;
                     StreamRDFCounting dest =  StreamRDFLib.count(x) ;
-                    SPARQL_REST.parse(action, dest, stream, lang, base);
+                    ActionSPARQL.parse(action, dest, stream, lang, base);
                     count = dest.count() ;
                 }
             }    

Modified: jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ServletBase.java
URL: http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ServletBase.java?rev=1550784&r1=1550783&r2=1550784&view=diff
==============================================================================
--- jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ServletBase.java (original)
+++ jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/servlets/ServletBase.java Fri Dec 13 18:06:35 2013
@@ -31,8 +31,8 @@ import org.apache.jena.fuseki.Fuseki ;
 import org.apache.jena.fuseki.HttpNames ;
 import org.apache.jena.web.HttpSC ;
 
+// 
 public abstract class ServletBase extends HttpServlet {
-    public final boolean          verboseLogging = Fuseki.verboseLogging ;
     private static AtomicLong     requestIdAlloc = new AtomicLong(0) ;
 
     protected ServletBase() {}
@@ -47,7 +47,7 @@ public abstract class ServletBase extend
      *            HTTP Response
      * @return Request ID
      */
-    protected long allocRequestId(HttpServletRequest request, HttpServletResponse response) {
+    protected static long allocRequestId(HttpServletRequest request, HttpServletResponse response) {
         long id = requestIdAlloc.incrementAndGet() ;
         addRequestId(response, id) ;
         return id ;
@@ -61,11 +61,11 @@ public abstract class ServletBase extend
      * @param id
      *            Request ID
      */
-    protected void addRequestId(HttpServletResponse response, long id) {
+    protected static void addRequestId(HttpServletResponse response, long id) {
         response.addHeader("Fuseki-Request-ID", Long.toString(id)) ;
     }
 
-    protected void responseSendError(HttpServletResponse response, int statusCode, String message) {
+    protected static void responseSendError(HttpServletResponse response, int statusCode, String message) {
         try {
             response.sendError(statusCode, message) ;
         } catch (IOException ex) {
@@ -73,7 +73,7 @@ public abstract class ServletBase extend
         } catch (IllegalStateException ex) {}
     }
 
-    protected void responseSendError(HttpServletResponse response, int statusCode) {
+    protected static void responseSendError(HttpServletResponse response, int statusCode) {
         try {
             response.sendError(statusCode) ;
         } catch (IOException ex) {
@@ -136,11 +136,11 @@ public abstract class ServletBase extend
         }
     }
 
-    protected void warning(HttpAction action, String string) {
+    protected static void warning(HttpAction action, String string) {
         action.log.warn(string) ;
     }
 
-    protected void warning(HttpAction action, String string, Throwable thorwable) {
+    protected static void warning(HttpAction action, String string, Throwable thorwable) {
         action.log.warn(string, thorwable) ;
     }
 

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=1550784&r1=1550783&r2=1550784&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 Fri Dec 13 18:06:35 2013
@@ -18,6 +18,9 @@
 
 package org.apache.jena.fuseki;
 
+import java.util.Collection ;
+
+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 ;
@@ -109,7 +112,12 @@ public class ServerTest
         if ( server != null )
             server.stop() ;
         server = null ;
+        // Clear out the registry.
+        Collection<String> keys = DatasetRegistry.get().keys() ;
+        for ( String k : keys )
+            DatasetRegistry.get().remove(k);
     }
+    
     public static void resetServer()
     {
         Update clearRequest = new UpdateDrop(Target.ALL) ;