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.