From 77ae51328034dfcd7457aa8fa3e4ae492b337efb Mon Sep 17 00:00:00 2001 From: HongKee Moon <hkmoon@me.com> Date: Tue, 20 Jan 2015 13:38:39 +0100 Subject: [PATCH] Add json format of dataset lists for BigDataBrowserPlugin --- src/main/java/bdv/server/BigDataServer.java | 1 + src/main/java/bdv/server/CellHandler.java | 17 ++++ src/main/java/bdv/server/JsonHandler.java | 99 +++++++++++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 src/main/java/bdv/server/JsonHandler.java diff --git a/src/main/java/bdv/server/BigDataServer.java b/src/main/java/bdv/server/BigDataServer.java index 071b8d0..67d05bd 100644 --- a/src/main/java/bdv/server/BigDataServer.java +++ b/src/main/java/bdv/server/BigDataServer.java @@ -65,6 +65,7 @@ public class BigDataServer handlers.addHandler( datasetHandlers ); handlers.addHandler( new ManagerHandler( baseURL, server, connectorStats, statHandler, datasetHandlers ) ); handlers.addHandler( new RequestLogHandler() ); + handlers.addHandler( new JsonHandler( server, datasetHandlers ) ); statHandler.setHandler( handlers ); diff --git a/src/main/java/bdv/server/CellHandler.java b/src/main/java/bdv/server/CellHandler.java index ee85085..ec16af1 100644 --- a/src/main/java/bdv/server/CellHandler.java +++ b/src/main/java/bdv/server/CellHandler.java @@ -20,6 +20,7 @@ import org.eclipse.jetty.server.handler.ContextHandler; import org.jdom2.Document; import org.jdom2.output.Format; import org.jdom2.output.XMLOutputter; +import sun.reflect.generics.reflectiveObjects.NotImplementedException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -151,6 +152,7 @@ public class CellHandler extends ContextHandler } response.setContentType( "application/xml" ); + response.setCharacterEncoding( "UTF-8" ); response.setStatus( HttpServletResponse.SC_OK ); baseRequest.setHandled( true ); @@ -163,4 +165,19 @@ public class CellHandler extends ContextHandler { return xmlFile; } + + public String getDataSetURL() + { + return dataSetURL; + } + + public String getThumbnailUrl() + { + throw new NotImplementedException(); + } + + public String getDescription() + { + throw new NotImplementedException(); + } } diff --git a/src/main/java/bdv/server/JsonHandler.java b/src/main/java/bdv/server/JsonHandler.java new file mode 100644 index 0000000..d1758ca --- /dev/null +++ b/src/main/java/bdv/server/JsonHandler.java @@ -0,0 +1,99 @@ +package bdv.server; + +import com.google.gson.stream.JsonWriter; +import org.eclipse.jetty.server.Handler; +import org.eclipse.jetty.server.Request; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.handler.ContextHandler; +import org.eclipse.jetty.server.handler.ContextHandlerCollection; +import org.eclipse.jetty.util.log.Log; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.net.URISyntaxException; + +/** + * Created by moon on 1/19/15. + */ +public class JsonHandler extends ContextHandler +{ + private static final org.eclipse.jetty.util.log.Logger LOG = Log.getLogger( JsonHandler.class ); + + private final Server server; + + private final ContextHandlerCollection handlers; + + public JsonHandler( final Server server, ContextHandlerCollection handlers ) throws IOException, URISyntaxException + { + this.server = server; + this.handlers = handlers; + setContextPath( "/json" ); + } + + @Override + public void doHandle( final String target, final Request baseRequest, final HttpServletRequest request, final HttpServletResponse response ) throws IOException, ServletException + { + list( baseRequest, response ); + } + + private void list( final Request baseRequest, final HttpServletResponse response ) throws IOException + { + response.setContentType( "application/json" ); + response.setStatus( HttpServletResponse.SC_OK ); + baseRequest.setHandled( true ); + + final PrintWriter ow = response.getWriter(); + getJsonDatasetList( ow ); + ow.close(); + } + + private void getJsonDatasetList( PrintWriter out ) throws IOException + { + JsonWriter writer = new JsonWriter( out ); + + writer.setIndent( "\t" ); + + writer.beginObject(); + + getContexts( writer ); + + writer.endObject(); // } + + writer.flush(); + + writer.close(); + } + + private String getContexts( JsonWriter writer ) throws IOException + { + StringBuilder sb = new StringBuilder(); + for ( final Handler handler : server.getChildHandlersByClass( CellHandler.class ) ) + { + CellHandler contextHandler = null; + if ( handler instanceof CellHandler ) + { + contextHandler = ( CellHandler ) handler; + + final String datasetName = contextHandler.getContextPath().replaceFirst( "/", "" ); + + writer.name( datasetName ).beginObject(); + + writer.name( "id" ).value( datasetName ); + + //writer.name( "desc" ).value( contextHandler.getDescription() ); + writer.name( "description" ).value( "NotImplemented" ); + + //writer.name( "thumbnailUrl" ).value( contextHandler.getThumbnailUrl() ); + writer.name( "thumbnailUrl" ).value( "http://fiji.sc/_images/a/ae/Fiji-icon.png" ); + + writer.name( "datasetUrl" ).value( contextHandler.getDataSetURL() ); + + writer.endObject(); + } + } + return sb.toString(); + } +} -- GitLab