Skip to content
Snippets Groups Projects
Commit 1c33a3a5 authored by HongKee Moon's avatar HongKee Moon
Browse files

Add .bdv / .xml file handlers

parent 4bc62982
No related branches found
No related tags found
No related merge requests found
...@@ -48,8 +48,12 @@ ...@@ -48,8 +48,12 @@
<groupId>org.eclipse.jetty</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-security</artifactId> <artifactId>jetty-security</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.antlr</groupId> <groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
</dependency>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>stringtemplate</artifactId> <artifactId>stringtemplate</artifactId>
<version>3.2.1</version> <version>3.2.1</version>
</dependency> </dependency>
......
...@@ -135,7 +135,13 @@ public class BigDataServer ...@@ -135,7 +135,13 @@ public class BigDataServer
final HandlerCollection handlers = new HandlerCollection(); final HandlerCollection handlers = new HandlerCollection();
final ContextHandlerCollection datasetHandlers = createHandlers( baseURL, params.getDatasets(), thumbnailsDirectoryName ); final ContextHandlerCollection datasetHandlers = createHandlers( baseURL, params.getDatasets(), thumbnailsDirectoryName );
final DataSetContextHandler dataSetContextHandler = new DataSetContextHandler( datasetHandlers );
handlers.addHandler( datasetHandlers ); handlers.addHandler( datasetHandlers );
handlers.addHandler( dataSetContextHandler );
handlers.addHandler( new JsonDatasetListHandler( server, datasetHandlers ) ); handlers.addHandler( new JsonDatasetListHandler( server, datasetHandlers ) );
Handler handler = handlers; Handler handler = handlers;
...@@ -705,7 +711,7 @@ public class BigDataServer ...@@ -705,7 +711,7 @@ public class BigDataServer
{ {
final String name = entry.getKey(); final String name = entry.getKey();
final DataSet ds = entry.getValue(); final DataSet ds = entry.getValue();
final String context = "/" + name; final String context = "/" + Constants.DATASET_CONTEXT_NAME + "/" + name;
final CellHandler ctx = new CellHandler( baseURL + context + "/", ds, thumbnailsDirectoryName ); final CellHandler ctx = new CellHandler( baseURL + context + "/", ds, thumbnailsDirectoryName );
ctx.setContextPath( context ); ctx.setContextPath( context );
handlers.addHandler( ctx ); handlers.addHandler( ctx );
......
...@@ -18,10 +18,12 @@ import bdv.util.ThumbnailGenerator; ...@@ -18,10 +18,12 @@ import bdv.util.ThumbnailGenerator;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import com.google.gson.stream.JsonWriter;
import mpicbg.spim.data.SpimDataException; import mpicbg.spim.data.SpimDataException;
import net.imglib2.img.basictypeaccess.volatiles.array.VolatileShortArray; import net.imglib2.img.basictypeaccess.volatiles.array.VolatileShortArray;
import net.imglib2.realtransform.AffineTransform3D; import net.imglib2.realtransform.AffineTransform3D;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.ContextHandler; import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Log;
...@@ -84,6 +86,8 @@ public class CellHandler extends ContextHandler ...@@ -84,6 +86,8 @@ public class CellHandler extends ContextHandler
private Hdf5ImageLoader imgLoader; private Hdf5ImageLoader imgLoader;
private String baseUrl;
/** /**
* DataSet information holder * DataSet information holder
*/ */
...@@ -92,7 +96,7 @@ public class CellHandler extends ContextHandler ...@@ -92,7 +96,7 @@ public class CellHandler extends ContextHandler
public CellHandler( final String baseUrl, final DataSet dataSet, final String thumbnailsDirectory ) throws SpimDataException, IOException public CellHandler( final String baseUrl, final DataSet dataSet, final String thumbnailsDirectory ) throws SpimDataException, IOException
{ {
active = true; active = true;
this.baseUrl = baseUrl;
this.dataSet = dataSet; this.dataSet = dataSet;
final XmlIoSpimDataMinimal io = new XmlIoSpimDataMinimal(); final XmlIoSpimDataMinimal io = new XmlIoSpimDataMinimal();
...@@ -139,6 +143,12 @@ public class CellHandler extends ContextHandler ...@@ -139,6 +143,12 @@ public class CellHandler extends ContextHandler
return; return;
} }
if ( target.startsWith( "/json" ) )
{
provideJson( baseRequest, response );
return;
}
if ( target.equals( "/png" ) ) if ( target.equals( "/png" ) )
{ {
provideThumbnail( baseRequest, response ); provideThumbnail( baseRequest, response );
...@@ -374,4 +384,56 @@ public class CellHandler extends ContextHandler ...@@ -374,4 +384,56 @@ public class CellHandler extends ContextHandler
{ {
return dataSet; return dataSet;
} }
private void provideJson( 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();
final JsonWriter writer = new JsonWriter( ow );
writer.setIndent( "\t" );
writer.beginObject();
writer.name( getDataSet().getName() ).beginObject();
writer.name( "id" ).value( getDataSet().getName() );
writer.name( "category" ).value( getDataSet().getCategory() );
writer.name( "description" ).value( getDataSet().getDescription() );
writer.name( "index" ).value( getDataSet().getIndex() );
writer.name( "thumbnailUrl" ).value( getDataSet().getThumbnailUrl() );
writer.name( "datasetUrl" ).value( getDataSet().getDatasetUrl() );
writer.endObject();
writer.endObject();
writer.flush();
writer.close();
ow.close();
}
public void handleXml( final Request baseRequest, final HttpServletResponse response ) throws IOException
{
respondWithString( baseRequest, response, "application/xml", datasetXmlString );
}
public void handleBdv( final Request baseRequest, final HttpServletResponse response ) throws IOException
{
String url = baseUrl;
if ( url.endsWith( "/" ) )
url = url.substring( 0, url.lastIndexOf( "/" ) );
respondWithString( baseRequest, response, "application/bdv", url );
}
} }
...@@ -6,6 +6,8 @@ public class Constants ...@@ -6,6 +6,8 @@ public class Constants
public static final String MANAGER_CONTEXT_NAME = "manager"; public static final String MANAGER_CONTEXT_NAME = "manager";
public static final String DATASET_CONTEXT_NAME = "dataset";
public static final String[] RESERVED_CONTEXT_NAMES = new String[] public static final String[] RESERVED_CONTEXT_NAMES = new String[]
{ {
DATASETLIST_CONTEXT_NAME, DATASETLIST_CONTEXT_NAME,
......
package bdv.server;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.servlet.DefaultServlet;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.util.log.Log;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* DataSet Handler handles /dataset context
*/
public class DataSetContextHandler extends ServletContextHandler
{
private static final org.eclipse.jetty.util.log.Logger LOG = Log.getLogger( DataSetContextHandler.class );
private final ContextHandlerCollection datasetHandlers;
private final ServletHandler servletHandler;
public DataSetContextHandler( final ContextHandlerCollection datasetHandlers )
{
this.datasetHandlers = datasetHandlers;
setContextPath( "/" + Constants.DATASET_CONTEXT_NAME );
servletHandler = new ServletHandler();
Servlet servlet = new DefaultServlet();
ServletHolder servletHolder = new ServletHolder( servlet );
servletHandler.addServletWithMapping( servletHolder, "/*.xml" );
servletHandler.addServletWithMapping( servletHolder, "/*.bdv" );
setHandler( _servletHandler );
}
@Override
public void doHandle( final String target, final Request baseRequest, final HttpServletRequest request, final HttpServletResponse response ) throws IOException, ServletException
{
String datasetName = target;
if ( datasetName.lastIndexOf( ".xml" ) != -1 )
{
datasetName = datasetName.substring( 0, datasetName.lastIndexOf( ".xml" ) );
findCellHandler( datasetName ).handleXml( baseRequest, response );
}
else if ( datasetName.lastIndexOf( ".bdv" ) != -1 )
{
datasetName = datasetName.substring( 0, datasetName.lastIndexOf( ".bdv" ) );
findCellHandler( datasetName ).handleBdv( baseRequest, response );
}
else
super.doHandle( Constants.DATASET_CONTEXT_NAME + "/" + target, baseRequest, request, response );
}
private CellHandler findCellHandler( final String datasetName )
{
CellHandler found = null;
for ( final Handler handler : datasetHandlers.getChildHandlersByClass( CellHandler.class ) )
{
final CellHandler contextHandler = ( CellHandler ) handler;
System.out.println( contextHandler );
if ( contextHandler.getContextPath().equals( getContextPath() + datasetName ) )
{
found = contextHandler;
break;
}
}
return found;
}
}
...@@ -118,6 +118,13 @@ public class IndexPageHandler extends ContextHandler ...@@ -118,6 +118,13 @@ public class IndexPageHandler extends ContextHandler
sb.append( "\t\tCategory: " + ds.getCategory() + "<br/>\n" ); sb.append( "\t\tCategory: " + ds.getCategory() + "<br/>\n" );
sb.append( "\t\tName: " + ds.getName() + "<br/>\n" ); sb.append( "\t\tName: " + ds.getName() + "<br/>\n" );
sb.append( "\t\tDescription: " + ds.getDescription() + "<br/>\n" ); sb.append( "\t\tDescription: " + ds.getDescription() + "<br/>\n" );
String url = ds.getDatasetUrl();
if ( url.endsWith( "/" ) )
url = url.substring( 0, url.lastIndexOf( "/" ) );
sb.append( "\t\t<a href=" + url + ".xml>XML</a>&nbsp;" );
sb.append( "\t\t<a href=" + url + ".bdv>BDV</a><br/>\n" );
sb.append( "\t</td>\n" ); sb.append( "\t</td>\n" );
sb.append( "</tr>\n" ); sb.append( "</tr>\n" );
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment