Move some files around to reflect our growing help infrastructure.
git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@2280 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
parent
16ef500139
commit
10be5a5de9
|
|
@ -98,7 +98,7 @@
|
||||||
|
|
||||||
<target name="extracthelp" depends="compile"
|
<target name="extracthelp" depends="compile"
|
||||||
description="Extract help key/value pair file from the JavaDoc tags.">
|
description="Extract help key/value pair file from the JavaDoc tags.">
|
||||||
<javadoc doclet="org.broadinstitute.sting.utils.doc.HelpExtractorDoclet"
|
<javadoc doclet="org.broadinstitute.sting.utils.help.HelpExtractorDoclet"
|
||||||
docletpath="build"
|
docletpath="build"
|
||||||
classpathref="runtime.dependencies"
|
classpathref="runtime.dependencies"
|
||||||
additionalparam="-out ${help.file}">
|
additionalparam="-out ${help.file}">
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package org.broadinstitute.sting.gatk;
|
||||||
|
|
||||||
import org.broadinstitute.sting.utils.GATKErrorReport;
|
import org.broadinstitute.sting.utils.GATKErrorReport;
|
||||||
import org.broadinstitute.sting.utils.TextFormattingUtils;
|
import org.broadinstitute.sting.utils.TextFormattingUtils;
|
||||||
|
import org.broadinstitute.sting.utils.help.ApplicationDetails;
|
||||||
import org.broadinstitute.sting.utils.cmdLine.*;
|
import org.broadinstitute.sting.utils.cmdLine.*;
|
||||||
import org.broadinstitute.sting.gatk.walkers.Walker;
|
import org.broadinstitute.sting.gatk.walkers.Walker;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ import org.broadinstitute.sting.gatk.refdata.ReferenceOrderedData;
|
||||||
import org.broadinstitute.sting.gatk.filters.FilterManager;
|
import org.broadinstitute.sting.gatk.filters.FilterManager;
|
||||||
import org.broadinstitute.sting.utils.StingException;
|
import org.broadinstitute.sting.utils.StingException;
|
||||||
import org.broadinstitute.sting.utils.PluginManager;
|
import org.broadinstitute.sting.utils.PluginManager;
|
||||||
import org.broadinstitute.sting.utils.doc.DisplayNameTaglet;
|
import org.broadinstitute.sting.utils.help.DisplayNameTaglet;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
import net.sf.picard.filter.SamRecordFilter;
|
import net.sf.picard.filter.SamRecordFilter;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,64 @@
|
||||||
|
package org.broadinstitute.sting.utils.cmdLine;
|
||||||
|
|
||||||
|
import org.broadinstitute.sting.utils.StingException;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A group of argument definitions.
|
||||||
|
*/
|
||||||
|
public class ArgumentDefinitionGroup implements Iterable<ArgumentDefinition> {
|
||||||
|
/**
|
||||||
|
* Name of this group.
|
||||||
|
*/
|
||||||
|
public final String groupName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The argument definitions associated with this group.
|
||||||
|
*/
|
||||||
|
public final List<ArgumentDefinition> argumentDefinitions;
|
||||||
|
|
||||||
|
public ArgumentDefinitionGroup( String groupName, List<ArgumentDefinition> argumentDefinitions ) {
|
||||||
|
this.groupName = groupName;
|
||||||
|
this.argumentDefinitions = Collections.unmodifiableList( argumentDefinitions );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Does the name of this argument group match the name of another?
|
||||||
|
*/
|
||||||
|
public boolean groupNameMatches( ArgumentDefinitionGroup other ) {
|
||||||
|
if( this.groupName == null && other.groupName == null )
|
||||||
|
return true;
|
||||||
|
if( this.groupName == null && other.groupName != null )
|
||||||
|
return false;
|
||||||
|
return this.groupName.equals(other.groupName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Merges another argument group into this argument group. Return a new
|
||||||
|
* group since argument groups are supposed to be immutable. Asserts that
|
||||||
|
* both argument groups have the same name.
|
||||||
|
*/
|
||||||
|
public ArgumentDefinitionGroup merge( ArgumentDefinitionGroup other ) {
|
||||||
|
if( !groupNameMatches(other) )
|
||||||
|
throw new StingException("Unable to merge two argument groups with differing names.");
|
||||||
|
|
||||||
|
// Create a merged definition group.
|
||||||
|
List<ArgumentDefinition> mergedDefinitions = new ArrayList<ArgumentDefinition>();
|
||||||
|
mergedDefinitions.addAll(this.argumentDefinitions);
|
||||||
|
mergedDefinitions.addAll(other.argumentDefinitions);
|
||||||
|
|
||||||
|
return new ArgumentDefinitionGroup(groupName,mergedDefinitions);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Iterate over the arguments in an argument definition group.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Iterator<ArgumentDefinition> iterator() {
|
||||||
|
return argumentDefinitions.iterator();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -27,7 +27,7 @@ import java.util.Collections;
|
||||||
/**
|
/**
|
||||||
* A collection of argument definitions.
|
* A collection of argument definitions.
|
||||||
*/
|
*/
|
||||||
class ArgumentDefinitions implements Iterable<ArgumentDefinition> {
|
public class ArgumentDefinitions implements Iterable<ArgumentDefinition> {
|
||||||
/**
|
/**
|
||||||
* Backing data set of argument stored by short name and long name.
|
* Backing data set of argument stored by short name and long name.
|
||||||
*/
|
*/
|
||||||
|
|
@ -117,7 +117,7 @@ class ArgumentDefinitions implements Iterable<ArgumentDefinition> {
|
||||||
* Return a list of the available argument groups.
|
* Return a list of the available argument groups.
|
||||||
* @return All the argument groups that have been added.
|
* @return All the argument groups that have been added.
|
||||||
*/
|
*/
|
||||||
Collection<ArgumentDefinitionGroup> getArgumentDefinitionGroups() {
|
public Collection<ArgumentDefinitionGroup> getArgumentDefinitionGroups() {
|
||||||
return argumentDefinitionGroups;
|
return argumentDefinitionGroups;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -171,62 +171,6 @@ class ArgumentDefinitions implements Iterable<ArgumentDefinition> {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* A group of argument definitions.
|
|
||||||
*/
|
|
||||||
class ArgumentDefinitionGroup implements Iterable<ArgumentDefinition> {
|
|
||||||
/**
|
|
||||||
* Name of this group.
|
|
||||||
*/
|
|
||||||
public final String groupName;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The argument definitions associated with this group.
|
|
||||||
*/
|
|
||||||
public final List<ArgumentDefinition> argumentDefinitions;
|
|
||||||
|
|
||||||
public ArgumentDefinitionGroup( String groupName, List<ArgumentDefinition> argumentDefinitions ) {
|
|
||||||
this.groupName = groupName;
|
|
||||||
this.argumentDefinitions = Collections.unmodifiableList( argumentDefinitions );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Does the name of this argument group match the name of another?
|
|
||||||
*/
|
|
||||||
public boolean groupNameMatches( ArgumentDefinitionGroup other ) {
|
|
||||||
if( this.groupName == null && other.groupName == null )
|
|
||||||
return true;
|
|
||||||
if( this.groupName == null && other.groupName != null )
|
|
||||||
return false;
|
|
||||||
return this.groupName.equals(other.groupName);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Merges another argument group into this argument group. Return a new
|
|
||||||
* group since argument groups are supposed to be immutable. Asserts that
|
|
||||||
* both argument groups have the same name.
|
|
||||||
*/
|
|
||||||
public ArgumentDefinitionGroup merge( ArgumentDefinitionGroup other ) {
|
|
||||||
if( !groupNameMatches(other) )
|
|
||||||
throw new StingException("Unable to merge two argument groups with differing names.");
|
|
||||||
|
|
||||||
// Create a merged definition group.
|
|
||||||
List<ArgumentDefinition> mergedDefinitions = new ArrayList<ArgumentDefinition>();
|
|
||||||
mergedDefinitions.addAll(this.argumentDefinitions);
|
|
||||||
mergedDefinitions.addAll(other.argumentDefinitions);
|
|
||||||
|
|
||||||
return new ArgumentDefinitionGroup(groupName,mergedDefinitions);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Iterate over the arguments in an argument definition group.
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Iterator<ArgumentDefinition> iterator() {
|
|
||||||
return argumentDefinitions.iterator();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Comparator-esque interface for finding argument definitions within a collection.
|
* A Comparator-esque interface for finding argument definitions within a collection.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
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.help.ApplicationDetails;
|
||||||
|
import org.broadinstitute.sting.utils.help.HelpFormatter;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintStream;
|
import java.io.PrintStream;
|
||||||
import java.text.DateFormat;
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
|
|
@ -224,7 +224,7 @@ public abstract class CommandLineProgram {
|
||||||
clp.setupLoggerLevel();
|
clp.setupLoggerLevel();
|
||||||
|
|
||||||
// regardless of what happens next, generate the header information
|
// regardless of what happens next, generate the header information
|
||||||
generateHeaderInformation(clp, args);
|
HelpFormatter.generateHeaderInformation(clp.getApplicationDetails(), args);
|
||||||
|
|
||||||
// call the execute
|
// call the execute
|
||||||
CommandLineProgram.result = clp.execute();
|
CommandLineProgram.result = clp.execute();
|
||||||
|
|
@ -284,32 +284,6 @@ public abstract class CommandLineProgram {
|
||||||
parser.addArgumentSource(clp.getArgumentSourceName(cls), cls);
|
parser.addArgumentSource(clp.getArgumentSourceName(cls), cls);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* generateHeaderInformation
|
|
||||||
* <p/>
|
|
||||||
* <p/>
|
|
||||||
* Generate a standard header for the logger
|
|
||||||
*
|
|
||||||
* @param clp the command line program to execute
|
|
||||||
* @param args the command line arguments passed in
|
|
||||||
*/
|
|
||||||
protected static void generateHeaderInformation(CommandLineProgram clp, String[] args) {
|
|
||||||
|
|
||||||
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
|
||||||
java.util.Date date = new java.util.Date();
|
|
||||||
|
|
||||||
logger.info("-------------------------------------------------------");
|
|
||||||
for (String headerLine : clp.getApplicationDetails().applicationHeader)
|
|
||||||
logger.info(headerLine);
|
|
||||||
String output = "";
|
|
||||||
for (String str : args) {
|
|
||||||
output = output + str + " ";
|
|
||||||
}
|
|
||||||
logger.info("Program Args: " + output);
|
|
||||||
logger.info("Date/Time: " + dateFormat.format(date));
|
|
||||||
logger.info("-------------------------------------------------------");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* this function checks the logger level passed in on the command line, taking the lowest
|
* this function checks the logger level passed in on the command line, taking the lowest
|
||||||
* level that was provided.
|
* level that was provided.
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,8 @@ package org.broadinstitute.sting.utils.cmdLine;
|
||||||
import org.broadinstitute.sting.utils.StingException;
|
import org.broadinstitute.sting.utils.StingException;
|
||||||
import org.broadinstitute.sting.utils.Pair;
|
import org.broadinstitute.sting.utils.Pair;
|
||||||
import org.broadinstitute.sting.utils.JVMUtils;
|
import org.broadinstitute.sting.utils.JVMUtils;
|
||||||
|
import org.broadinstitute.sting.utils.help.ApplicationDetails;
|
||||||
|
import org.broadinstitute.sting.utils.help.HelpFormatter;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
import java.lang.reflect.*;
|
import java.lang.reflect.*;
|
||||||
|
|
|
||||||
|
|
@ -23,10 +23,11 @@
|
||||||
* OTHER DEALINGS IN THE SOFTWARE.
|
* OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.broadinstitute.sting.utils.cmdLine;
|
package org.broadinstitute.sting.utils.help;
|
||||||
|
|
||||||
import org.broadinstitute.sting.utils.JVMUtils;
|
import org.broadinstitute.sting.utils.JVMUtils;
|
||||||
import org.broadinstitute.sting.utils.StingException;
|
import org.broadinstitute.sting.utils.StingException;
|
||||||
|
import org.broadinstitute.sting.utils.cmdLine.CommandLineProgram;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
@ -0,0 +1,120 @@
|
||||||
|
package org.broadinstitute.sting.utils.help;
|
||||||
|
|
||||||
|
import com.sun.tools.doclets.Taglet;
|
||||||
|
import com.sun.javadoc.Tag;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provide an alternate description for the given help system.
|
||||||
|
*
|
||||||
|
* @author mhanna
|
||||||
|
* @version 0.1
|
||||||
|
*/
|
||||||
|
public class DescriptionTaglet implements Taglet {
|
||||||
|
/**
|
||||||
|
* The key tag for this taglet.
|
||||||
|
*/
|
||||||
|
public static final String NAME = "help.description";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the name of this custom tag.
|
||||||
|
*/
|
||||||
|
public String getName() {
|
||||||
|
return NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will return false since this tag cannot be applied
|
||||||
|
* to a field.
|
||||||
|
* @return false since this tag cannot be applied to a field.
|
||||||
|
*/
|
||||||
|
public boolean inField() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will return false since this tag cannot be applied
|
||||||
|
* to a constructor.
|
||||||
|
* @return false since this tag cannot be applied to a constructor.
|
||||||
|
*/
|
||||||
|
public boolean inConstructor() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will return false since this tag cannot be applied
|
||||||
|
* to a method.
|
||||||
|
* @return false since this tag cannot be applied to a method.
|
||||||
|
*/
|
||||||
|
public boolean inMethod() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will return false since overviews are always named
|
||||||
|
* by the <code>@WalkerName</code> tag.
|
||||||
|
* @return false always
|
||||||
|
*/
|
||||||
|
public boolean inOverview() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will return true to indicate that packages can be given useful
|
||||||
|
* description.
|
||||||
|
* @return true always
|
||||||
|
*/
|
||||||
|
public boolean inPackage() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will return false indicating that types cannot be given
|
||||||
|
* alternate description.
|
||||||
|
* @return false always.
|
||||||
|
*/
|
||||||
|
public boolean inType() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will return false since <code>@todo</code>
|
||||||
|
* is not an inline tag.
|
||||||
|
* @return false since <code>@todo</code>
|
||||||
|
* is not an inline tag.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public boolean isInlineTag() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register this Taglet.
|
||||||
|
* @param tagletMap the map to register this tag to.
|
||||||
|
*/
|
||||||
|
public static void register(Map tagletMap) {
|
||||||
|
DescriptionTaglet tag = new DescriptionTaglet();
|
||||||
|
Taglet t = (Taglet)tagletMap.get(tag.getName());
|
||||||
|
if (t != null) {
|
||||||
|
tagletMap.remove(tag.getName());
|
||||||
|
}
|
||||||
|
tagletMap.put(tag.getName(), tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a string representation of this tag. Since this tag is only
|
||||||
|
* used by the help system, don't output any HTML.
|
||||||
|
*/
|
||||||
|
public String toString(Tag tag) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a string representation of this tag. Since this tag is only
|
||||||
|
* used by the help system, don't output any HTML.
|
||||||
|
*/
|
||||||
|
public String toString(Tag[] tags) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,120 @@
|
||||||
|
package org.broadinstitute.sting.utils.help;
|
||||||
|
|
||||||
|
import com.sun.tools.doclets.Taglet;
|
||||||
|
import com.sun.javadoc.Tag;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provide a display name in the help for packages
|
||||||
|
*
|
||||||
|
* @author mhanna
|
||||||
|
* @version 0.1
|
||||||
|
*/
|
||||||
|
public class DisplayNameTaglet implements Taglet {
|
||||||
|
/**
|
||||||
|
* The display name for this taglet.
|
||||||
|
*/
|
||||||
|
public static final String NAME = "help.display.name";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the name of this custom tag.
|
||||||
|
*/
|
||||||
|
public String getName() {
|
||||||
|
return NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will return false since this tag cannot be applied
|
||||||
|
* to a field.
|
||||||
|
* @return false since this tag cannot be applied to a field.
|
||||||
|
*/
|
||||||
|
public boolean inField() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will return false since this tag cannot be applied
|
||||||
|
* to a constructor.
|
||||||
|
* @return false since this tag cannot be applied to a constructor.
|
||||||
|
*/
|
||||||
|
public boolean inConstructor() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will return false since this tag cannot be applied
|
||||||
|
* to a method.
|
||||||
|
* @return false since this tag cannot be applied to a method.
|
||||||
|
*/
|
||||||
|
public boolean inMethod() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will return false since overviews are always named
|
||||||
|
* by the <code>@WalkerName</code> tag.
|
||||||
|
* @return false always
|
||||||
|
*/
|
||||||
|
public boolean inOverview() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will return true to indicate that packages can be given useful
|
||||||
|
* display text.
|
||||||
|
* @return true always
|
||||||
|
*/
|
||||||
|
public boolean inPackage() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will return false indicating that types cannot be given
|
||||||
|
* alternate display names.
|
||||||
|
* @return false always.
|
||||||
|
*/
|
||||||
|
public boolean inType() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will return false since <code>@todo</code>
|
||||||
|
* is not an inline tag.
|
||||||
|
* @return false since <code>@todo</code>
|
||||||
|
* is not an inline tag.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public boolean isInlineTag() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register this Taglet.
|
||||||
|
* @param tagletMap the map to register this tag to.
|
||||||
|
*/
|
||||||
|
public static void register(Map tagletMap) {
|
||||||
|
DisplayNameTaglet tag = new DisplayNameTaglet();
|
||||||
|
Taglet t = (Taglet)tagletMap.get(tag.getName());
|
||||||
|
if (t != null) {
|
||||||
|
tagletMap.remove(tag.getName());
|
||||||
|
}
|
||||||
|
tagletMap.put(tag.getName(), tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a string representation of this tag. Since this tag is only
|
||||||
|
* used by the help system, don't output any HTML.
|
||||||
|
*/
|
||||||
|
public String toString(Tag tag) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a string representation of this tag. Since this tag is only
|
||||||
|
* used by the help system, don't output any HTML.
|
||||||
|
*/
|
||||||
|
public String toString(Tag[] tags) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,113 @@
|
||||||
|
package org.broadinstitute.sting.utils.help;
|
||||||
|
|
||||||
|
import com.sun.javadoc.*;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.Scanner;
|
||||||
|
import java.io.PrintStream;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
|
||||||
|
import org.broadinstitute.sting.utils.StingException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extracts certain types of javadoc (specifically package and class descriptions) and makes them available
|
||||||
|
* to applications at runtime.
|
||||||
|
*
|
||||||
|
* @author mhanna
|
||||||
|
* @version 0.1
|
||||||
|
*/
|
||||||
|
public class HelpExtractorDoclet {
|
||||||
|
/**
|
||||||
|
* Extracts the contents of certain types of javadoc and adds them to an XML file.
|
||||||
|
* @param rootDoc The documentation root.
|
||||||
|
* @return Whether the JavaDoc run succeeded.
|
||||||
|
* @throws FileNotFoundException if output can't be written.
|
||||||
|
*/
|
||||||
|
public static boolean start(RootDoc rootDoc) throws FileNotFoundException {
|
||||||
|
PrintStream out = System.out;
|
||||||
|
|
||||||
|
for(String[] options: rootDoc.options()) {
|
||||||
|
if(options[0].equals("-out"))
|
||||||
|
out = new PrintStream(options[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cache packages as we see them, since there's no direct way to iterate over packages.
|
||||||
|
Set<PackageDoc> packages = new HashSet<PackageDoc>();
|
||||||
|
|
||||||
|
for(ClassDoc currentClass: rootDoc.classes()) {
|
||||||
|
PackageDoc containingPackage = currentClass.containingPackage();
|
||||||
|
packages.add(containingPackage);
|
||||||
|
String className = containingPackage.name().length() > 0 ?
|
||||||
|
String.format("%s.%s",containingPackage.name(),currentClass.name()) :
|
||||||
|
String.format("%s",currentClass.name());
|
||||||
|
|
||||||
|
renderHelpText(className,currentClass,out);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(PackageDoc currentPackage: packages)
|
||||||
|
renderHelpText(currentPackage.name(),currentPackage,out);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate the given options against options supported by this doclet.
|
||||||
|
* @param option Option to validate.
|
||||||
|
* @return Number of potential parameters; 0 if not supported.
|
||||||
|
*/
|
||||||
|
public static int optionLength(String option) {
|
||||||
|
if(option.equals("-out")) {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renders all the help text required for a given name.
|
||||||
|
* @param elementName element name to use as the key
|
||||||
|
* @param element Doc element to process.
|
||||||
|
* @param out Output stream to which to write.
|
||||||
|
*/
|
||||||
|
private static void renderHelpText(String elementName, Doc element, PrintStream out) {
|
||||||
|
// Extract overrides from the doc tags.
|
||||||
|
String overrideName = null;
|
||||||
|
String overrideDescription = element.commentText();
|
||||||
|
for(Tag tag: element.tags()) {
|
||||||
|
if(tag.name().equals("@"+DisplayNameTaglet.NAME)) {
|
||||||
|
if(overrideName != null)
|
||||||
|
throw new StingException("Only one display name tag can be used per package / walker.");
|
||||||
|
overrideName = tag.text();
|
||||||
|
}
|
||||||
|
else if(tag.name().equals("@"+DescriptionTaglet.NAME))
|
||||||
|
overrideDescription = tag.text();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write out an alternate element name, if exists.
|
||||||
|
if(overrideName != null)
|
||||||
|
out.printf("%s.%s=%s%n",elementName,DisplayNameTaglet.NAME,overrideName);
|
||||||
|
|
||||||
|
// Write out an alternate description, if present.
|
||||||
|
String description = formatText(overrideDescription);
|
||||||
|
if(description.length() > 0)
|
||||||
|
out.printf("%s=%s%n",elementName,description);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Format text for consumption by the properties file.
|
||||||
|
* @param text Text to format.
|
||||||
|
* @return Formatted text; string trimmed, newlines removed.
|
||||||
|
*/
|
||||||
|
private static String formatText(String text) {
|
||||||
|
Scanner scanner = new Scanner(text);
|
||||||
|
StringBuilder output = new StringBuilder();
|
||||||
|
|
||||||
|
while(scanner.hasNextLine()) {
|
||||||
|
if(output.length() > 0)
|
||||||
|
output.append(' ');
|
||||||
|
output.append(scanner.nextLine().trim());
|
||||||
|
}
|
||||||
|
|
||||||
|
return output.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,11 @@
|
||||||
package org.broadinstitute.sting.utils.cmdLine;
|
package org.broadinstitute.sting.utils.help;
|
||||||
|
|
||||||
|
import org.broadinstitute.sting.utils.cmdLine.ArgumentDefinition;
|
||||||
|
import org.broadinstitute.sting.utils.cmdLine.ArgumentDefinitionGroup;
|
||||||
|
import org.broadinstitute.sting.utils.cmdLine.ArgumentDefinitions;
|
||||||
|
import org.broadinstitute.sting.utils.cmdLine.CommandLineProgram;
|
||||||
import org.broadinstitute.sting.utils.TextFormattingUtils;
|
import org.broadinstitute.sting.utils.TextFormattingUtils;
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
import java.util.Formatter;
|
import java.util.Formatter;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -9,6 +14,8 @@ import java.util.Iterator;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.text.DateFormat;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
/**
|
/**
|
||||||
* User: hanna
|
* User: hanna
|
||||||
* Date: May 6, 2009
|
* Date: May 6, 2009
|
||||||
|
|
@ -27,6 +34,9 @@ import java.util.Collections;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class HelpFormatter {
|
public class HelpFormatter {
|
||||||
|
/** our log, which we want to capture anything from org.broadinstitute.sting */
|
||||||
|
private static Logger logger = Logger.getRootLogger();
|
||||||
|
|
||||||
public static final int FIELD_SEPARATION_WIDTH = 3;
|
public static final int FIELD_SEPARATION_WIDTH = 3;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -209,4 +219,30 @@ public class HelpFormatter {
|
||||||
|
|
||||||
return argumentGroups;
|
return argumentGroups;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* generateHeaderInformation
|
||||||
|
* <p/>
|
||||||
|
* <p/>
|
||||||
|
* Generate a standard header for the logger
|
||||||
|
*
|
||||||
|
* @param applicationDetails details of the application to run.
|
||||||
|
* @param args the command line arguments passed in
|
||||||
|
*/
|
||||||
|
public static void generateHeaderInformation(ApplicationDetails applicationDetails, String[] args) {
|
||||||
|
|
||||||
|
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
||||||
|
java.util.Date date = new java.util.Date();
|
||||||
|
|
||||||
|
logger.info("-------------------------------------------------------");
|
||||||
|
for (String headerLine : applicationDetails.applicationHeader)
|
||||||
|
logger.info(headerLine);
|
||||||
|
String output = "";
|
||||||
|
for (String str : args) {
|
||||||
|
output = output + str + " ";
|
||||||
|
}
|
||||||
|
logger.info("Program Args: " + output);
|
||||||
|
logger.info("Date/Time: " + dateFormat.format(date));
|
||||||
|
logger.info("-------------------------------------------------------");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue