diff --git a/pom.xml b/pom.xml index 1a0b336bcf74a866bc8fbe1df3c943749c2a39ae..e4fb439f0c0dc909f8448a1ed96ce8908fa8e778 100644 --- a/pom.xml +++ b/pom.xml @@ -49,6 +49,11 @@ <artifactId>stringtemplate</artifactId> <version>3.2.1</version> </dependency> + <dependency> + <groupId>commons-cli</groupId> + <artifactId>commons-cli</artifactId> + <version>1.2</version> + </dependency> </dependencies> <developers> diff --git a/src/main/java/bdv/server/BigDataServer.java b/src/main/java/bdv/server/BigDataServer.java index d802e2bc8848483bdaab9c31b1b24f6b2515ad0f..9b1055f2d22edf76a5593559a39025a8aced0020 100644 --- a/src/main/java/bdv/server/BigDataServer.java +++ b/src/main/java/bdv/server/BigDataServer.java @@ -1,6 +1,8 @@ package bdv.server; import mpicbg.spim.data.SpimDataException; +import org.apache.commons.cli.*; +import org.apache.commons.lang.StringUtils; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.ConnectorStatistics; import org.eclipse.jetty.server.Server; @@ -12,7 +14,13 @@ import org.eclipse.jetty.server.handler.StatisticsHandler; import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.thread.QueuedThreadPool; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.HashMap; +import java.util.List; public class BigDataServer { @@ -20,14 +28,15 @@ public class BigDataServer private static final org.eclipse.jetty.util.log.Logger LOG = Log.getLogger( BigDataServer.class ); + static int port; + + static String serverName; + public static void main( final String[] args ) throws Exception { - final String fn = args.length > 0 ? args[ 0 ] : "/Users/moon/Projects/git-projects/BigDataViewer/data/HisYFP-SPIM.xml"; - - dataSet.put( "HisYFP-SPIM", fn ); - dataSet.put( "t1-head", "/Users/moon/Projects/git-projects/BigDataViewer/data/t1-head.xml" ); + if ( !processOptions( args ) ) + return; - final int port = args.length > 1 ? Integer.parseInt( args[ 1 ] ) : 8080; System.setProperty( "org.eclipse.jetty.util.log.class", "org.eclipse.jetty.util.log.StdErrLog" ); // Threadpool for multiple connections @@ -66,6 +75,99 @@ public class BigDataServer server.join(); } + static private boolean processOptions( String[] args ) throws ParseException, IOException + { + // create Options object + Options options = new Options(); + + // add p option + options.addOption( "p", true, "listening port" ); + + // add s baseurl + options.addOption( "s", true, "server name" ); + + // -d or multiple {name name.xml} pairs + options.addOption( "d", true, "dataset file" ); + + CommandLineParser parser = new BasicParser(); + CommandLine cmd = parser.parse( options, args ); + + // Getting port number option + String portString = cmd.getOptionValue( "p", "8080" ); + port = Integer.parseInt( portString ); + + // Getting server name option + String serverString = cmd.getOptionValue( "s", "localhost" ); + serverName = serverString; + + String datasetFile = cmd.getOptionValue( "d" ); + if ( cmd.hasOption( "d" ) ) + { + // process the file given with "-d" + + // check the file presence + Path path = Paths.get( datasetFile ); + + if ( Files.notExists( path ) ) + { + LOG.warn( "Dataset list file does not exist. Cannot start BigDataServer." ); + return false; + } + else + { + // Process dataset list file + List< String > lines = Files.readAllLines( path, StandardCharsets.UTF_8 ); + + for ( String str : lines ) + { + String[] tokens = str.split( "\t" ); + if ( StringUtils.isNotEmpty( tokens[ 0 ].trim() ) && StringUtils.isNotEmpty( tokens[ 1 ].trim() ) ) + { + dataSet.put( tokens[ 0 ].trim(), tokens[ 1 ].trim() ); + LOG.info( "Dataset added: {" + tokens[ 0 ].trim() + ", " + tokens[ 1 ].trim() + "}" ); + + if ( Files.notExists( Paths.get( tokens[ 1 ].trim() ) ) ) + { + LOG.warn( "Dataset file does not exist: \"" + tokens[ 1 ].trim() + "\". Cannot start BigDataServer." ); + return false; + } + } + else + { + LOG.warn( "Invalid dataset entry (will be skipped): {" + str + "}" ); + } + } + } + } + else + { + String keyHolder = null; + + // process {name, name.xml} pairs + for ( Object s : cmd.getArgList() ) + { + if ( keyHolder != null ) + { + dataSet.put( keyHolder, s.toString() ); + LOG.info( "Dataset added: {" + keyHolder + ", " + s.toString() + "}" ); + keyHolder = null; + } + else + { + keyHolder = s.toString(); + } + } + + if ( keyHolder != null ) + { + LOG.warn( "Dataset list has an error while processing. Cannot start BigDataServer." ); + return false; + } + } + + return true; + } + static private ContextHandlerCollection createHandlers( final String baseURL, final HashMap< String, String > dataSet ) throws SpimDataException { final ContextHandlerCollection handlers = new ContextHandlerCollection();