Author: andy
Date: Sat Nov  2 17:38:04 2013
New Revision: 1538240

URL: http://svn.apache.org/r1538240
Log:
First draft of /dataets description API.

Added:
    
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/DescriptionServlet.java
    
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/JsonDescription.java
Modified:
    
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ManagementServer.java
    
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/StatsServlet.java
    
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java

Added: 
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/DescriptionServlet.java
URL: 
http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/DescriptionServlet.java?rev=1538240&view=auto
==============================================================================
--- 
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/DescriptionServlet.java
 (added)
+++ 
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/DescriptionServlet.java
 Sat Nov  2 17:38:04 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.mgt;
+
+import java.io.IOException ;
+import java.io.PrintStream ;
+
+import javax.servlet.ServletOutputStream ;
+import javax.servlet.http.HttpServlet ;
+import javax.servlet.http.HttpServletRequest ;
+import javax.servlet.http.HttpServletResponse ;
+
+import org.apache.jena.atlas.json.* ;
+import org.apache.jena.fuseki.Fuseki ;
+import org.apache.jena.fuseki.server.DatasetRef ;
+import org.apache.jena.fuseki.server.DatasetRegistry ;
+import org.apache.jena.riot.WebContent ;
+import org.apache.jena.web.HttpSC ;
+
+/** Description of datasets for a server */ 
+public class DescriptionServlet extends HttpServlet
+{
+    @Override
+    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+        throws /*ServletException,*/ IOException
+    {
+        try {
+            // Conneg etc.
+            description(req, resp) ;
+        } catch (IOException e)
+        { 
+            resp.sendError(HttpSC.INTERNAL_SERVER_ERROR_500, e.getMessage()) ;
+            resp.setContentType(WebContent.contentTypeTextPlain) ;
+            resp.setCharacterEncoding(WebContent.charsetUTF8) ;
+            ServletOutputStream out = resp.getOutputStream() ;
+            PrintStream x = new PrintStream(out) ;
+            e.printStackTrace(x);
+            x.flush() ;
+        }
+    }
+    
+    private void description(HttpServletRequest req, HttpServletResponse resp) 
throws IOException
+    {
+        ServletOutputStream out = resp.getOutputStream() ;
+        resp.setContentType(WebContent.contentTypeJSON);
+        resp.setCharacterEncoding(WebContent.charsetUTF8) ;
+        
+        JsonBuilder builder = new JsonBuilder() ; 
+        builder.startObject() ;
+        describeServer(builder) ;
+        describeDataset(builder) ;
+        
+        
+        builder.finishObject() ;
+        
+        JsonValue v = builder.build() ;
+        JSON.write(out, v) ;
+        out.println() ; 
+        out.flush() ;
+    }
+
+    private void describeServer(JsonBuilder builder) {
+        builder
+            .key("server")
+            .startObject()
+            //.key("hostname").value(req.getLocalName())
+            .key("port").value(Fuseki.getServer().getPort())
+            .finishObject() ;
+    }
+
+    private void describeDataset(JsonBuilder builder) {
+        builder.key("datasets") ;
+        builder.startArray() ;
+        for ( String ds : DatasetRegistry.get().keys() ) {
+            DatasetRef desc = DatasetRegistry.get().get(ds) ;
+            JsonDescription.describe(builder, desc) ;
+        }
+        builder.finishArray() ;
+    }
+
+}
+

Added: 
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/JsonDescription.java
URL: 
http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/JsonDescription.java?rev=1538240&view=auto
==============================================================================
--- 
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/JsonDescription.java
 (added)
+++ 
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/JsonDescription.java
 Sat Nov  2 17:38:04 2013
@@ -0,0 +1,62 @@
+/**
+ * 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.mgt;
+
+import org.apache.jena.atlas.json.JsonBuilder ;
+import org.apache.jena.fuseki.server.DatasetRef ;
+import org.apache.jena.fuseki.server.ServiceRef ;
+
+/** Create a description of a service */
+public class JsonDescription {
+    
+    static final String dsName = "ds.name" ;
+    static final String dsService = "ds.services" ;
+    
+    static final String srvType = "srv.type" ;
+    static final String srvEndpoints = "srv.endpoints" ;
+    
+    static void describe(JsonBuilder builder, ServiceRef serviceref) {
+        builder.startObject() ;
+        
+        builder.key(srvType).value(serviceref.name) ;
+
+        builder.key(srvEndpoints) ;
+        builder.startArray() ;
+        for ( String ep : serviceref.endpoints )
+            builder.value(ep) ;
+        builder.finishArray() ;
+        
+        builder.finishObject() ;
+    }
+    
+    static void describe(JsonBuilder builder, DatasetRef ds) {
+        
+        builder.startObject() ;
+        
+        builder.key(dsName).value(ds.getName()) ;
+        
+        builder.key(dsService) ;
+        builder.startArray() ;
+        for ( ServiceRef sRef : ds.getServiceRefs() )
+            describe(builder, sRef) ;
+        builder.finishArray() ;
+        builder.finishObject() ;
+    }
+}
+

Modified: 
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ManagementServer.java
URL: 
http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ManagementServer.java?rev=1538240&r1=1538239&r2=1538240&view=diff
==============================================================================
--- 
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ManagementServer.java
 (original)
+++ 
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/ManagementServer.java
 Sat Nov  2 17:38:04 2013
@@ -61,6 +61,7 @@ public class ManagementServer
         addServlet(context, new MgtCmdServlet(),    "/mgt") ;
         addServlet(context, new DumpServlet(),      "/dump") ;
         addServlet(context, new StatsServlet(),     "/stats") ;
+        addServlet(context, new DescriptionServlet(),     "/server/datasets") ;
         
         return server ; 
         // Old plan

Modified: 
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/StatsServlet.java
URL: 
http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/StatsServlet.java?rev=1538240&r1=1538239&r2=1538240&view=diff
==============================================================================
--- 
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/StatsServlet.java
 (original)
+++ 
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/mgt/StatsServlet.java
 Sat Nov  2 17:38:04 2013
@@ -19,6 +19,7 @@
 package org.apache.jena.fuseki.mgt;
 
 import java.io.IOException ;
+import java.io.PrintStream ;
 import java.util.Iterator ;
 
 import javax.servlet.ServletOutputStream ;
@@ -31,18 +32,27 @@ import org.apache.jena.atlas.json.JsonAr
 import org.apache.jena.atlas.json.JsonObject ;
 import org.apache.jena.fuseki.server.* ;
 import org.apache.jena.riot.WebContent ;
+import org.apache.jena.web.HttpSC ;
 
 public class StatsServlet extends HttpServlet
 {
+    // Convert to JsonBuilder-style
     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp)
-        //throws ServletException, IOException
+        throws /*ServletException,*/ IOException
     {
         try {
             // Conneg etc.
             statsJSON(req, resp) ;
-        } catch (IOException e)
-        { }
+        } catch (IOException e) {
+            resp.sendError(HttpSC.INTERNAL_SERVER_ERROR_500, e.getMessage()) ;
+            resp.setContentType(WebContent.contentTypeTextPlain) ;
+            resp.setCharacterEncoding(WebContent.charsetUTF8) ;
+            ServletOutputStream out = resp.getOutputStream() ;
+            PrintStream x = new PrintStream(out) ;
+            e.printStackTrace(x) ;
+            x.flush() ;
+        }
     }
     
     private void statsJSON(HttpServletRequest req, HttpServletResponse resp) 
throws IOException
@@ -61,6 +71,7 @@ public class StatsServlet extends HttpSe
         
         JsonObject obj = new JsonObject() ;
         JsonObject datasets = new JsonObject() ;
+        
         JsonObject server = new JsonObject() ;
         server.put("host", req.getLocalName()+":"+req.getLocalPort()) ;
         

Modified: 
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java
URL: 
http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java?rev=1538240&r1=1538239&r2=1538240&view=diff
==============================================================================
--- 
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java
 (original)
+++ 
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java
 Sat Nov  2 17:38:04 2013
@@ -149,6 +149,10 @@ public class SPARQLServer {
     public Server getServer() {
         return server ;
     }
+    
+    public int getPort() {
+        return server.getConnectors()[0].getPort() ;
+    }
 
     /**
      * Get the datasets associated with the server.


Reply via email to