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 2014/05/28 22:22:41 UTC

svn commit: r1598126 - /jena/Experimental/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Upload.java

Author: andy
Date: Wed May 28 20:22:40 2014
New Revision: 1598126

URL: http://svn.apache.org/r1598126
Log:
Upload to include quad loading

Modified:
    jena/Experimental/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Upload.java

Modified: jena/Experimental/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Upload.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Upload.java?rev=1598126&r1=1598125&r2=1598126&view=diff
==============================================================================
--- jena/Experimental/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Upload.java (original)
+++ jena/Experimental/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/SPARQL_Upload.java Wed May 28 20:22:40 2014
@@ -33,7 +33,6 @@ import org.apache.commons.fileupload.Fil
 import org.apache.commons.fileupload.FileItemStream ;
 import org.apache.commons.fileupload.servlet.ServletFileUpload ;
 import org.apache.commons.fileupload.util.Streams ;
-import org.apache.jena.atlas.lib.Pair ;
 import org.apache.jena.atlas.web.ContentType ;
 import org.apache.jena.fuseki.Fuseki ;
 import org.apache.jena.fuseki.FusekiLib ;
@@ -47,11 +46,11 @@ import org.apache.jena.riot.system.Strea
 import org.apache.jena.riot.web.HttpNames ;
 import org.apache.jena.web.HttpSC ;
 
-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 ;
+import com.hp.hpl.jena.sparql.core.DatasetGraphFactory ;
 import com.hp.hpl.jena.sparql.core.Quad ;
-import com.hp.hpl.jena.sparql.graph.GraphFactory ;
 
 public class SPARQL_Upload extends ActionSPARQL 
 {
@@ -81,7 +80,9 @@ public class SPARQL_Upload extends Actio
         boolean isMultipart = ServletFileUpload.isMultipartContent(action.request);
         if ( ! isMultipart )
             ServletOps.error(HttpSC.BAD_REQUEST_400 , "Not a file upload") ;
+        
         long count = upload(action, Fuseki.BaseUpload) ;
+        ServletOps.success(action) ;
         try {
             action.response.setContentType("text/html") ;
             action.response.setStatus(HttpSC.OK_200);
@@ -122,24 +123,34 @@ public class SPARQL_Upload extends Actio
      * are caught before inserting any data. 
      */
      private static long uploadNonTxn(HttpAction action, String base) {
-         Pair<String, Graph> p = uploadWorker(action, base) ;
-         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) ;
+         UploadDetails upload = uploadWorker(action, base) ;
+         String graphName = upload.graphName ;
+         DatasetGraph dataTmp = upload.data ;
+         long count = upload.count ;
+         
+         if ( graphName == null )
+             action.log.info(format("[%d] Upload: %d Quads(s)",action.id, count)) ;
+
+         else
+             action.log.info(format("[%d] Upload: Graph: %s, %d triple(s)", action.id, graphName,  count)) ;
+
+         Node gn = null ;
+         if ( graphName != null ) {
+             gn = graphName.equals(HttpNames.valueDefault)
+                 ? Quad.defaultGraphNodeGenerated 
+                 : NodeFactory.createURI(graphName) ;
+         }
 
          action.beginWrite() ;
          try {
-            FusekiLib.addDataInto(graphTmp, action.getActiveDSG(), gn) ;
-            action.commit() ;
-            return tripleCount ;
-        } catch (RuntimeException ex)
+             if ( gn != null )
+                 FusekiLib.addDataInto(dataTmp.getDefaultGraph(), action.getActiveDSG(), gn) ;
+             else
+                 FusekiLib.addDataInto(dataTmp, action.getActiveDSG()) ;
+
+             action.commit() ;
+             return count ;
+         } catch (RuntimeException ex)
         {
             // If anything went wrong, try to backout.
             try { action.abort() ; } catch (Exception ex2) {}
@@ -160,16 +171,28 @@ public class SPARQL_Upload extends Actio
           return uploadNonTxn(action, base) ;
       }
      
+    static class UploadDetails {
+        final String graphName  ;
+        final DatasetGraph data ;
+        final long count ;
+        UploadDetails(String gn, DatasetGraph dsg, long parserCount) {
+            this.graphName = gn ;
+            this.data = dsg ;
+            this.count = parserCount ;
+        }
+    }
+      
     /**  process an HTTP upload of RDF.
      *   We can't stream straight into a dataset because the graph name can be after the data. 
      *  @return graph name and count
      */
     
-    static private Pair<String, Graph> uploadWorker(HttpAction action, String base)
+    static private UploadDetails uploadWorker(HttpAction action, String base)
     {
-        Graph graphTmp = GraphFactory.createDefaultGraph() ;
+        DatasetGraph dsgTmp = DatasetGraphFactory.createMem() ;
         ServletFileUpload upload = new ServletFileUpload();
         String graphName = null ;
+        boolean isQuads = false ;
         long count = -1 ;
         
         String name = null ;  
@@ -236,11 +259,13 @@ public class SPARQL_Upload extends Actio
                     if ( lang == null )
                         // Desperate.
                         lang = RDFLanguages.RDFXML ;
+                    
+                    isQuads = RDFLanguages.isQuads(lang) ; 
 
                     action.log.info(format("[%d] Upload: Filename: %s, Content-Type=%s, Charset=%s => %s", 
                                     action.id, name,  ct.getContentType(), ct.getCharset(), lang.getName())) ;
                     
-                    StreamRDF x = StreamRDFLib.graph(graphTmp) ;
+                    StreamRDF x = StreamRDFLib.dataset(dsgTmp) ;
                     StreamRDFCounting dest =  StreamRDFLib.count(x) ;
                     ActionSPARQL.parse(action, dest, stream, lang, base);
                     count = dest.count() ;
@@ -249,7 +274,9 @@ public class SPARQL_Upload extends Actio
 
             if ( graphName == null || graphName.equals("") ) 
                 graphName = HttpNames.valueDefault ;
-            return Pair.create(graphName, graphTmp) ;
+            if ( isQuads )
+                graphName = null ;
+            return new UploadDetails(graphName, dsgTmp, count) ;
         }
         catch (ActionErrorException ex) { throw ex ; }
         catch (Exception ex)            { ServletOps.errorOccurred(ex) ; return null ; }