Beefed up command-line usage string.

git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@629 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
hanna 2009-05-07 19:08:19 +00:00
parent 5a6892900e
commit c241d386a7
3 changed files with 45 additions and 15 deletions

View File

@ -1,6 +1,8 @@
package org.broadinstitute.sting.utils.cmdLine; package org.broadinstitute.sting.utils.cmdLine;
import org.apache.log4j.*; import org.apache.log4j.*;
import org.broadinstitute.sting.utils.JVMUtils;
import org.broadinstitute.sting.utils.StingException;
import java.io.IOException; import java.io.IOException;
import java.text.DateFormat; import java.text.DateFormat;
@ -73,12 +75,43 @@ public abstract class CommandLineProgram {
required=false) required=false)
protected Boolean debugMode = false; protected Boolean debugMode = false;
/**
* this is used to indicate if they've asked for help
*/
@Argument(fullName="help",shortName="h",doc="Generate this help message",required=false)
public Boolean help = false;
/** /**
* our logging output patterns * our logging output patterns
*/ */
private static String patternString = "%p %m %n"; private static String patternString = "%p %m %n";
private static String debugPatternString = "%n[level] %p%n[date]\t\t %d{dd MMM yyyy HH:mm:ss,SSS} %n[class]\t\t %C %n[location]\t %l %n[line number]\t %L %n[message]\t %m %n"; private static String debugPatternString = "%n[level] %p%n[date]\t\t %d{dd MMM yyyy HH:mm:ss,SSS} %n[class]\t\t %C %n[location]\t %l %n[line number]\t %L %n[message]\t %m %n";
/**
* Retrieves text from the application regarding what parameters to put on the
* JVM command line to run this application.
* @return helpful instructions on the class / jar to run.
*/
protected String getRunningInstructions() {
// Default implementation to find a command line that makes sense.
// If the user is running from a jar, return '-jar <jarname>'; otherwise
// return the full class name.
String runningInstructions = null;
try {
runningInstructions = JVMUtils.getLocationFor( getClass() ).getName();
}
catch( IOException ex ) {
throw new StingException("Unable to determine running instructions", ex);
}
if( runningInstructions.endsWith(".jar") )
runningInstructions = String.format("-jar %s", runningInstructions);
else
runningInstructions = getClass().getName();
return runningInstructions;
}
/** /**
* Will this application want to vary its argument list dynamically? * Will this application want to vary its argument list dynamically?
* If so, parse the command-line options and then prompt the subclass to return * If so, parse the command-line options and then prompt the subclass to return
@ -109,12 +142,6 @@ public abstract class CommandLineProgram {
protected abstract int execute(); protected abstract int execute();
/**
* this is used to indicate if they've asked for help
*/
@Argument(fullName="help",shortName="h",doc="Generate this help message",required=false)
public Boolean help = false;
/** /**
* This function is called to start processing the command line, and kick * This function is called to start processing the command line, and kick
* off the execute message of the program. * off the execute message of the program.
@ -177,7 +204,7 @@ public abstract class CommandLineProgram {
// they asked for help, give it to them // they asked for help, give it to them
if (clp.help) { if (clp.help) {
parser.printHelp(); parser.printHelp( clp.getRunningInstructions() );
System.exit(1); System.exit(1);
} }
@ -206,7 +233,7 @@ public abstract class CommandLineProgram {
} }
catch (ParseException e) { catch (ParseException e) {
logger.fatal("Unable to pass command line arguments: " + e.getMessage() ); logger.fatal("Unable to pass command line arguments: " + e.getMessage() );
clp.parser.printHelp(); clp.parser.printHelp( clp.getRunningInstructions() );
} }
catch (Exception e) { catch (Exception e) {
// we catch all exceptions here. if it makes it to this level, we're in trouble. Let's bail! // we catch all exceptions here. if it makes it to this level, we're in trouble. Let's bail!

View File

@ -42,12 +42,12 @@ public class HelpFormatter {
* Prints the help, given a collection of argument definitions. * Prints the help, given a collection of argument definitions.
* @param argumentDefinitions Argument definitions for which help should be printed. * @param argumentDefinitions Argument definitions for which help should be printed.
*/ */
public void printHelp( ArgumentDefinitions argumentDefinitions ) { public void printHelp( String runningInstructions, ArgumentDefinitions argumentDefinitions ) {
SortedSet<ArgumentDefinition> mainArguments = getMainArguments( argumentDefinitions ); SortedSet<ArgumentDefinition> mainArguments = getMainArguments( argumentDefinitions );
Map<String,SortedSet<ArgumentDefinition>> pluginsByGroup = getPluginArguments( argumentDefinitions ); Map<String,SortedSet<ArgumentDefinition>> pluginsByGroup = getPluginArguments( argumentDefinitions );
System.out.printf("%s%s%n", System.out.printf("%s%s%n",
getSynopsis(mainArguments,pluginsByGroup), getSynopsis(runningInstructions,mainArguments,pluginsByGroup),
getDetailed(mainArguments,pluginsByGroup) ); getDetailed(mainArguments,pluginsByGroup) );
} }
@ -89,15 +89,18 @@ public class HelpFormatter {
/** /**
* Gets the synopsis: the actual command to run. * Gets the synopsis: the actual command to run.
* @param mainArguments Main program arguments. * @param mainArguments Main program arguments.
* @praam pluginArgumentGroups Groups of plugin arguments * @param runningInstructions Instructions on how to run hte application.
* @param pluginArgumentGroups Groups of plugin arguments
* @return A synopsis line. * @return A synopsis line.
*/ */
private String getSynopsis( SortedSet<ArgumentDefinition> mainArguments, Map<String,SortedSet<ArgumentDefinition>> pluginArgumentGroups ) { private String getSynopsis( String runningInstructions,
SortedSet<ArgumentDefinition> mainArguments,
Map<String,SortedSet<ArgumentDefinition>> pluginArgumentGroups ) {
// Build out the synopsis all as one long line. // Build out the synopsis all as one long line.
StringBuilder lineBuilder = new StringBuilder(); StringBuilder lineBuilder = new StringBuilder();
Formatter lineFormatter = new Formatter( lineBuilder ); Formatter lineFormatter = new Formatter( lineBuilder );
lineFormatter.format("java -jar dist/GenomeAnalysisTK.jar"); lineFormatter.format("java %s", runningInstructions);
List<ArgumentDefinition> argumentDefinitions = new ArrayList<ArgumentDefinition>(); List<ArgumentDefinition> argumentDefinitions = new ArrayList<ArgumentDefinition>();
argumentDefinitions.addAll( mainArguments ); argumentDefinitions.addAll( mainArguments );

View File

@ -218,8 +218,8 @@ public class ParsingEngine {
/** /**
* Prints out the help associated with these command-line argument definitions. * Prints out the help associated with these command-line argument definitions.
*/ */
public void printHelp() { public void printHelp( String runningInstructions ) {
new HelpFormatter().printHelp(argumentDefinitions); new HelpFormatter().printHelp(runningInstructions,argumentDefinitions);
} }
/** /**