diff --git a/src/main/java/bdv/server/BigDataServer.java b/src/main/java/bdv/server/BigDataServer.java
index 071b8d0a7a8eb529801298993b5eabccb0946bef..67d05bd2791e7bd7d769489f8678e7a429320d03 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 ee85085bcdb744400667acc7ffeebcf8d5f028d8..ec16af1dc2bd97d37d9ac41c6dfb3e4c7577e597 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 0000000000000000000000000000000000000000..d1758ca0e980499db3312c61989653bf74974978
--- /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();
+ }
+}