From 26df9dfaad0c7425357953da08e2a3661c1e0346 Mon Sep 17 00:00:00 2001
From: HongKee Moon <hkmoon@me.com>
Date: Wed, 7 Jan 2015 14:51:34 +0100
Subject: [PATCH] Add context based handler for handling multiple datasets
Dataset can be created/removed during runtime.
---
src/main/java/bdv/server/BigDataServer.java | 28 ++++++++++--
src/main/java/bdv/server/CellHandler.java | 14 +++---
src/main/java/bdv/server/DataSetHandler.java | 46 --------------------
3 files changed, 33 insertions(+), 55 deletions(-)
delete mode 100644 src/main/java/bdv/server/DataSetHandler.java
diff --git a/src/main/java/bdv/server/BigDataServer.java b/src/main/java/bdv/server/BigDataServer.java
index d9faf64..a2329df 100644
--- a/src/main/java/bdv/server/BigDataServer.java
+++ b/src/main/java/bdv/server/BigDataServer.java
@@ -1,12 +1,16 @@
package bdv.server;
+import mpicbg.spim.data.SpimDataException;
import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.handler.HandlerCollection;
+import org.eclipse.jetty.util.log.Log;
import java.util.HashMap;
public class BigDataServer
{
static HashMap< String, String > dataSet = new HashMap<>();
+ private static final org.eclipse.jetty.util.log.Logger LOG = Log.getLogger( BigDataServer.class );
public static void main( final String[] args ) throws Exception
{
@@ -18,12 +22,30 @@ public class BigDataServer
System.setProperty( "org.eclipse.jetty.util.log.class", "org.eclipse.jetty.util.log.StdErrLog" );
final Server server = new Server( port );
- String baseURL = "http://" + server.getURI().getHost() + ":" + port + "/";
+ String baseURL = "http://" + server.getURI().getHost() + ":" + port;
-// System.out.println(baseURL);
+ HandlerCollection handlers = createHandlers( baseURL, dataSet );
+ handlers.addHandler( new ManagerHandler( baseURL, server, handlers ) );
- server.setHandler( new DataSetHandler( baseURL, dataSet ) );
+ LOG.info( "Set handler: " + handlers );
+ server.setHandler( handlers );
+ LOG.info( "BigDataServer starting" );
server.start();
server.join();
}
+
+ static private HandlerCollection createHandlers( String baseURL, HashMap< String, String > dataSet ) throws SpimDataException
+ {
+ HandlerCollection handlers = new HandlerCollection( true );
+
+ for ( String key : dataSet.keySet() )
+ {
+ String context = "/" + key;
+ CellHandler ctx = new CellHandler( baseURL + context + "/", dataSet.get( key ) );
+ ctx.setContextPath( context );
+ handlers.addHandler( ctx );
+ }
+
+ return handlers;
+ }
}
diff --git a/src/main/java/bdv/server/CellHandler.java b/src/main/java/bdv/server/CellHandler.java
index db215cc..42fefe1 100644
--- a/src/main/java/bdv/server/CellHandler.java
+++ b/src/main/java/bdv/server/CellHandler.java
@@ -15,7 +15,7 @@ import mpicbg.spim.data.SpimDataException;
import net.imglib2.img.basictypeaccess.volatiles.array.VolatileShortArray;
import net.imglib2.realtransform.AffineTransform3D;
import org.eclipse.jetty.server.Request;
-import org.eclipse.jetty.server.handler.AbstractHandler;
+import org.eclipse.jetty.server.handler.ContextHandler;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
@@ -28,7 +28,7 @@ import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
-public class CellHandler extends AbstractHandler
+public class CellHandler extends ContextHandler
{
private final VolatileGlobalCellCache< VolatileShortArray > cache;
@@ -62,11 +62,16 @@ public class CellHandler extends AbstractHandler
}
@Override
- public void handle( final String target, final Request baseRequest, final HttpServletRequest request, final HttpServletResponse response ) throws IOException, ServletException
+ public void doHandle( final String target, final Request baseRequest, final HttpServletRequest request, final HttpServletResponse response ) throws IOException, ServletException
{
final String cellString = request.getParameter( "p" );
+
if ( cellString == null )
+ {
+ provideXML( baseRequest, response );
return;
+ }
+
final String[] parts = cellString.split( "/" );
if ( parts[ 0 ].equals( "cell" ) )
{
@@ -140,9 +145,6 @@ public class CellHandler extends AbstractHandler
baseUrl.setText( dataSetURL );
ImageLoader.setContent( baseUrl );
-// System.out.println(ImageLoader.getAttribute( "format" ));
-// System.out.println(ImageLoader.getValue());
-
response.setContentType( "application/xml" );
response.setStatus( HttpServletResponse.SC_OK );
baseRequest.setHandled( true );
diff --git a/src/main/java/bdv/server/DataSetHandler.java b/src/main/java/bdv/server/DataSetHandler.java
deleted file mode 100644
index 8e66076..0000000
--- a/src/main/java/bdv/server/DataSetHandler.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package bdv.server;
-
-import mpicbg.spim.data.SpimDataException;
-import org.eclipse.jetty.server.Request;
-import org.eclipse.jetty.server.handler.AbstractHandler;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.util.HashMap;
-
-public class DataSetHandler extends AbstractHandler
-{
- final private HashMap< String, CellHandler > cellHandlers;
-
- public DataSetHandler( String baseURL, HashMap< String, String > ds ) throws SpimDataException, MalformedURLException
- {
- cellHandlers = new HashMap<>();
-
- for ( String dataSet : ds.keySet() )
- {
- cellHandlers.put( dataSet, new CellHandler( baseURL + dataSet + "/", ds.get( dataSet ) ) );
- }
- }
-
- @Override
- public void handle( final String target, final Request baseRequest, final HttpServletRequest request, final HttpServletResponse response ) throws IOException, ServletException
- {
- String dsName = target.replace( "/", "" );
-
- if ( cellHandlers.containsKey( dsName ) )
- {
- if ( request.getParameter( "p" ) != null )
- cellHandlers.get( dsName ).handle( target, baseRequest, request, response );
- else
- // Provide XML file
- cellHandlers.get( dsName ).provideXML( baseRequest, response );
- }
- else
- {
- return;
- }
- }
-}
--
GitLab