From 7e04addd225c45f3c83b384aea66fac1cea3626c Mon Sep 17 00:00:00 2001
From: HongKee Moon <hkmoon@me.com>
Date: Mon, 19 Jan 2015 14:41:04 +0100
Subject: [PATCH] Add a command-line parameters processor

-p PORT
-s HOSTNAME

-d DATASETS
DATASETS: simple text file with name-xmlfile pairs

or

name xmlfile name xmlfile name xmlfile
---
 pom.xml                                     |   5 +
 src/main/java/bdv/server/BigDataServer.java | 112 +++++++++++++++++++-
 2 files changed, 112 insertions(+), 5 deletions(-)

diff --git a/pom.xml b/pom.xml
index 1a0b336..e4fb439 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 d802e2b..9b1055f 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();
-- 
GitLab