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