Author: andy
Date: Wed Sep 10 13:11:35 2014
New Revision: 1623993

URL: http://svn.apache.org/r1623993
Log:
JENA-774 : Add RDF Thrift (result sets, graphs) to conneg.

Added:
    jena/Experimental/jena-fuseki2/pages/
Modified:
    jena/Experimental/jena-fuseki2/src/main/java/org/apache/jena/fuseki/DEF.java
    
jena/Experimental/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ResponseResultSet.java
    jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/DEF.java
    
jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/ResponseResultSet.java

Modified: 
jena/Experimental/jena-fuseki2/src/main/java/org/apache/jena/fuseki/DEF.java
URL: 
http://svn.apache.org/viewvc/jena/Experimental/jena-fuseki2/src/main/java/org/apache/jena/fuseki/DEF.java?rev=1623993&r1=1623992&r2=1623993&view=diff
==============================================================================
--- 
jena/Experimental/jena-fuseki2/src/main/java/org/apache/jena/fuseki/DEF.java 
(original)
+++ 
jena/Experimental/jena-fuseki2/src/main/java/org/apache/jena/fuseki/DEF.java 
Wed Sep 10 13:11:35 2014
@@ -38,7 +38,8 @@ public class DEF
                                                                           
contentTypeNTriplesAlt,
                                                                           
contentTypeRDFXML,
                                                                           
contentTypeJSONLD,
-                                                                          
contentTypeRDFJSON
+                                                                          
contentTypeRDFJSON,
+                                                                          
contentTypeRDFThrift
                                                                           ) ;
     
     public static final AcceptList quadsOffer         = 
AcceptList.create(contentTypeTriG,
@@ -50,12 +51,23 @@ public class DEF
                                                                           
contentTypeNQuadsAlt2 
                                                                           ) ;
     
-    public static final AcceptList rsOffer            = 
AcceptList.create(contentTypeResultsJSON,
+    // Offer for SELECT
+    public static final AcceptList rsOfferTable       = 
AcceptList.create(contentTypeResultsJSON,
                                                                           
contentTypeTextCSV,
                                                                           
contentTypeTextTSV,
                                                                           
contentTypeResultsXML,
+                                                                          
contentTypeResultsThrift,
                                                                           
contentTypeTextPlain
                                                                           ) ;
+         
+    // Offer for ASK
+    public static final AcceptList rsOfferBoolean      = 
AcceptList.create(contentTypeResultsJSON,
+                                                                           
contentTypeTextCSV,
+                                                                           
contentTypeTextTSV,
+                                                                           
contentTypeResultsXML,
+                                                                           
contentTypeTextPlain
+                                                                           ) ;
+
     
     // Names for services in the default configuration
     public static final String ServiceQuery         = "query" ;

Modified: 
jena/Experimental/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ResponseResultSet.java
URL: 
http://svn.apache.org/viewvc/jena/Experimental/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ResponseResultSet.java?rev=1623993&r1=1623992&r2=1623993&view=diff
==============================================================================
--- 
jena/Experimental/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ResponseResultSet.java
 (original)
+++ 
jena/Experimental/jena-fuseki2/src/main/java/org/apache/jena/fuseki/servlets/ResponseResultSet.java
 Wed Sep 10 13:11:35 2014
@@ -20,7 +20,15 @@ package org.apache.jena.fuseki.servlets;
 
 import static java.lang.String.format ;
 import static org.apache.jena.atlas.lib.Lib.equal ;
-import static org.apache.jena.riot.WebContent.* ;
+import static org.apache.jena.riot.WebContent.charsetUTF8 ;
+import static org.apache.jena.riot.WebContent.contentTypeRDFXML ;
+import static org.apache.jena.riot.WebContent.contentTypeResultsJSON ;
+import static org.apache.jena.riot.WebContent.contentTypeResultsThrift ;
+import static org.apache.jena.riot.WebContent.contentTypeResultsXML ;
+import static org.apache.jena.riot.WebContent.contentTypeTextCSV ;
+import static org.apache.jena.riot.WebContent.contentTypeTextPlain ;
+import static org.apache.jena.riot.WebContent.contentTypeTextTSV ;
+import static org.apache.jena.riot.WebContent.contentTypeXML ;
 
 import java.io.IOException ;
 import java.util.HashMap ;
@@ -35,6 +43,9 @@ import org.apache.jena.atlas.web.MediaTy
 import org.apache.jena.fuseki.DEF ;
 import org.apache.jena.fuseki.FusekiException ;
 import org.apache.jena.fuseki.conneg.ConNeg ;
+import org.apache.jena.riot.ResultSetMgr ;
+import org.apache.jena.riot.WebContent ;
+import org.apache.jena.riot.resultset.ResultSetLang ;
 import org.apache.jena.web.HttpSC ;
 import org.slf4j.Logger ;
 import org.slf4j.LoggerFactory ;
@@ -56,6 +67,7 @@ public class ResponseResultSet
     private static final String contentOutputText          = "text" ;
     private static final String contentOutputCSV           = "csv" ;
     private static final String contentOutputTSV           = "tsv" ;
+    private static final String contentOutputThrift        = "thrift" ;
     
     public static Map<String,String> shortNamesResultSet = new HashMap<>() ;
     static {
@@ -66,21 +78,19 @@ public class ResponseResultSet
         ResponseOps.put(shortNamesResultSet, contentOutputText,   
contentTypeTextPlain) ;
         ResponseOps.put(shortNamesResultSet, contentOutputCSV,    
contentTypeTextCSV) ;
         ResponseOps.put(shortNamesResultSet, contentOutputTSV,    
contentTypeTextTSV) ;
+        ResponseOps.put(shortNamesResultSet, contentOutputThrift, 
contentTypeResultsThrift) ;
     }
     
     interface OutputContent { void output(ServletOutputStream out) ; }
 
-    static AcceptList prefContentTypeResultSet     = DEF.rsOffer ; 
-    static AcceptList prefContentTypeRDF           = DEF.rdfOffer ;
-
     public static void doResponseResultSet(HttpAction action, Boolean 
booleanResult)
     {
-        doResponseResultSet$(action, null, booleanResult, null) ;
+        doResponseResultSet$(action, null, booleanResult, null, 
DEF.rsOfferBoolean) ;
     }
 
     public static void doResponseResultSet(HttpAction action, ResultSet 
resultSet, Prologue qPrologue)
     {
-        doResponseResultSet$(action, resultSet, null, qPrologue) ;
+        doResponseResultSet$(action, resultSet, null, qPrologue, 
DEF.rsOfferTable) ;
     }
     
     // If we refactor the conneg into a single function, we can split boolean 
and result set handling. 
@@ -88,7 +98,8 @@ public class ResponseResultSet
     // One or the other argument must be null
     private static void doResponseResultSet$(HttpAction action,
                                              ResultSet resultSet, Boolean 
booleanResult, 
-                                             Prologue qPrologue) 
+                                             Prologue qPrologue, 
+                                             AcceptList contentTypeOffer) 
     {
         HttpServletRequest request = action.request ;
         HttpServletResponse response = action.response ;
@@ -107,7 +118,7 @@ public class ResponseResultSet
         }
 
         String mimeType = null ; 
-        MediaType i = ConNeg.chooseContentType(request, DEF.rsOffer, 
DEF.acceptRSXML) ;
+        MediaType i = ConNeg.chooseContentType(request, contentTypeOffer, 
DEF.acceptRSXML) ;
         if ( i != null )
             mimeType = i.getContentType() ;
         
@@ -142,6 +153,8 @@ public class ResponseResultSet
             csvOutput(action, contentType, resultSet, booleanResult) ;
         else if (equal(serializationType, contentTypeTextTSV) )
             tsvOutput(action, contentType, resultSet, booleanResult) ;
+        else if (equal(serializationType, WebContent.contentTypeResultsThrift) 
)
+            thriftOutput(action, contentType, resultSet, booleanResult) ;
         else
             ServletOps.errorBadRequest("Can't determine output serialization: 
"+serializationType) ;
     }
@@ -264,6 +277,20 @@ public class ResponseResultSet
         } ;
         output(action, contentType, charsetUTF8, proc) ; 
     }
+    
+    private static void thriftOutput(HttpAction action, String contentType, 
final ResultSet resultSet, final Boolean booleanResult) {
+        OutputContent proc = new OutputContent(){
+            @Override
+            public void output(ServletOutputStream out)
+            {
+                if ( resultSet != null )
+                    ResultSetMgr.write(out, resultSet, 
ResultSetLang.SPARQLResultSetThrift) ;
+                if ( booleanResult != null )
+                    xlog.error("Can't write boolen result in thrift") ;
+            }
+        } ;
+        output(action, contentType, WebContent.charsetUTF8, proc) ; 
+    }
 
     private static void output(HttpAction action, String contentType, String 
charset, OutputContent proc) 
     {

Modified: jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/DEF.java
URL: 
http://svn.apache.org/viewvc/jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/DEF.java?rev=1623993&r1=1623992&r2=1623993&view=diff
==============================================================================
--- jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/DEF.java 
(original)
+++ jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/DEF.java Wed 
Sep 10 13:11:35 2014
@@ -35,7 +35,8 @@ public class DEF
                                                                           
contentTypeNTriplesAlt,
                                                                           
contentTypeRDFXML,
                                                                           
contentTypeJSONLD,
-                                                                          
contentTypeRDFJSON
+                                                                          
contentTypeRDFJSON,
+                                                                          
contentTypeRDFThrift
                                                                           ) ;
     
     public static final AcceptList quadsOffer         = 
AcceptList.create(contentTypeTriG,
@@ -47,10 +48,19 @@ public class DEF
                                                                           
contentTypeNQuadsAlt2 
                                                                           ) ;
     
-    public static final AcceptList rsOffer            = 
AcceptList.create(contentTypeResultsJSON,
+    public static final AcceptList rsOfferTable            = 
AcceptList.create(contentTypeResultsJSON,
                                                                           
contentTypeTextCSV,
                                                                           
contentTypeTextTSV,
                                                                           
contentTypeResultsXML,
+                                                                          
contentTypeResultsThrift,
                                                                           
contentTypeTextPlain
                                                                           ) ;
+    
+    public static final AcceptList rsOfferBoolean            = 
AcceptList.create(contentTypeResultsJSON,
+                                                                          
contentTypeTextCSV,
+                                                                          
contentTypeTextTSV,
+                                                                          
contentTypeResultsXML,
+                                                                          
contentTypeTextPlain
+                                                                          ) ;
+
 }

Modified: 
jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/ResponseResultSet.java
URL: 
http://svn.apache.org/viewvc/jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/ResponseResultSet.java?rev=1623993&r1=1623992&r2=1623993&view=diff
==============================================================================
--- 
jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/ResponseResultSet.java
 (original)
+++ 
jena/trunk/jena-fuseki/src/main/java/org/apache/jena/fuseki/servlets/ResponseResultSet.java
 Wed Sep 10 13:11:35 2014
@@ -38,7 +38,9 @@ import org.apache.jena.atlas.web.MediaTy
 import org.apache.jena.fuseki.DEF ;
 import org.apache.jena.fuseki.FusekiException ;
 import org.apache.jena.fuseki.conneg.ConNeg ;
+import org.apache.jena.riot.ResultSetMgr ;
 import org.apache.jena.riot.WebContent ;
+import org.apache.jena.riot.resultset.ResultSetLang ;
 import org.apache.jena.web.HttpSC ;
 import org.slf4j.Logger ;
 import org.slf4j.LoggerFactory ;
@@ -61,6 +63,7 @@ public class ResponseResultSet
     private static final String contentOutputText          = "text" ;
     private static final String contentOutputCSV           = "csv" ;
     private static final String contentOutputTSV           = "tsv" ;
+    private static final String contentOutputThrift        = "thrift" ;
     
     public static Map<String,String> shortNamesResultSet = new HashMap<String, 
String>() ;
     static {
@@ -71,21 +74,19 @@ public class ResponseResultSet
         ResponseOps.put(shortNamesResultSet, contentOutputText,   
WebContent.contentTypeTextPlain) ;
         ResponseOps.put(shortNamesResultSet, contentOutputCSV,    
WebContent.contentTypeTextCSV) ;
         ResponseOps.put(shortNamesResultSet, contentOutputTSV,    
WebContent.contentTypeTextTSV) ;
+        ResponseOps.put(shortNamesResultSet, contentOutputThrift, 
WebContent.contentTypeResultsThrift) ;
     }
     
     interface OutputContent { void output(ServletOutputStream out) ; }
 
-    static AcceptList prefContentTypeResultSet     = DEF.rsOffer ; 
-    static AcceptList prefContentTypeRDF           = DEF.rdfOffer ;
-
     public static void doResponseResultSet(HttpAction action, Boolean 
booleanResult)
     {
-        doResponseResultSet$(action, null, booleanResult, null) ;
+        doResponseResultSet$(action, null, booleanResult, null, 
DEF.rsOfferTable) ;
     }
 
     public static void doResponseResultSet(HttpAction action, ResultSet 
resultSet, Prologue qPrologue)
     {
-        doResponseResultSet$(action, resultSet, null, qPrologue) ;
+        doResponseResultSet$(action, resultSet, null, qPrologue, 
DEF.rsOfferTable) ;
     }
     
     // If we refactor the conneg into a single function, we can split boolean 
and result set handling. 
@@ -93,7 +94,8 @@ public class ResponseResultSet
     // One or the other argument must be null
     private static void doResponseResultSet$(HttpAction action,
                                              ResultSet resultSet, Boolean 
booleanResult, 
-                                             Prologue qPrologue) 
+                                             Prologue qPrologue, 
+                                             AcceptList contentTypeOffer) 
     {
         HttpServletRequest request = action.request ;
         HttpServletResponse response = action.response ;
@@ -112,7 +114,7 @@ public class ResponseResultSet
         }
 
         String mimeType = null ; 
-        MediaType i = ConNeg.chooseContentType(request, DEF.rsOffer, 
DEF.acceptRSXML) ;
+        MediaType i = ConNeg.chooseContentType(request, contentTypeOffer, 
DEF.acceptRSXML) ;
         if ( i != null )
             mimeType = i.getContentType() ;
         
@@ -137,6 +139,7 @@ public class ResponseResultSet
             contentType = WebContent.contentTypeTextPlain ;
 
         // Better : dispatch on MediaType
+        // Fuseki2 uses the SPARQL parser/write registry.
         if ( equal(serializationType, WebContent.contentTypeResultsXML) )
             sparqlXMLOutput(action, contentType, resultSet, stylesheetURL, 
booleanResult) ;
         else if ( equal(serializationType, WebContent.contentTypeResultsJSON) )
@@ -147,6 +150,8 @@ public class ResponseResultSet
             csvOutput(action, contentType, resultSet, booleanResult) ;
         else if (equal(serializationType, WebContent.contentTypeTextTSV) )
             tsvOutput(action, contentType, resultSet, booleanResult) ;
+        else if (equal(serializationType, WebContent.contentTypeResultsThrift) 
)
+            thriftOutput(action, contentType, resultSet, booleanResult) ;
         else
             errorBadRequest("Can't determine output serialization: 
"+serializationType) ;
     }
@@ -272,6 +277,20 @@ public class ResponseResultSet
         output(action, contentType, WebContent.charsetUTF8, proc) ; 
     }
 
+    private static void thriftOutput(HttpAction action, String contentType, 
final ResultSet resultSet, final Boolean booleanResult) {
+        OutputContent proc = new OutputContent(){
+            @Override
+            public void output(ServletOutputStream out)
+            {
+                if ( resultSet != null )
+                    ResultSetMgr.write(out, resultSet, 
ResultSetLang.SPARQLResultSetThrift) ;
+                if ( booleanResult != null )
+                    slog.error("Can't write boolen result in thrift") ;
+            }
+        } ;
+        output(action, contentType, WebContent.charsetUTF8, proc) ; 
+    }
+
     private static void output(HttpAction action, String contentType, String 
charset, OutputContent proc) 
     {
         try {


Reply via email to