diff --git a/core/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisTK.java b/core/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisTK.java index 1f98da4ff..403ab1643 100644 --- a/core/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisTK.java +++ b/core/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisTK.java @@ -15,7 +15,7 @@ import java.util.HashMap; public class GenomeAnalysisTK extends CommandLineProgram { // Usage and parameters - @Usage(programVersion="0.1") public String USAGE = "SAM Validator\n"; + @Usage(programVersion="0.1") public String USAGE = "Genome Analysis Toolkit\n"; @Option(shortName="I", doc="SAM or BAM file for validation") public File INPUT_FILE; @Option(shortName="M", doc="Maximum number of reads to process before exiting", optional=true) public String MAX_READS_ARG = "-1"; @Option(shortName="S", doc="How strict should we be with validation", optional=true) public String STRICTNESS_ARG = "strict"; @@ -28,7 +28,10 @@ public class GenomeAnalysisTK extends CommandLineProgram { @Option(shortName="U", doc="If true, enables unsafe operations, nothing will be checked at runtime. You better know what you are doing if you set this flag.", optional=false) public String UNSAFE = "false"; @Option(shortName="SORT_ON_FLY", doc="If true, enables on fly sorting of reads file.", optional=false) public String ENABLED_SORT_ON_FLY = "false"; - private WalkerManager walkerManager = new WalkerManager(); + @Option(shortName="PLUGINS", doc="Directory where plugin class files live.", optional=true) + public String pluginPathName = null; + + private WalkerManager walkerManager = null; private TraversalEngine engine = null; public boolean DEBUGGING = false; @@ -39,6 +42,8 @@ public class GenomeAnalysisTK extends CommandLineProgram { } protected int doWork() { + walkerManager = new WalkerManager(pluginPathName); + final boolean TEST_ROD = false; ReferenceOrderedData[] rods = null; diff --git a/core/java/src/org/broadinstitute/sting/gatk/WalkerManager.java b/core/java/src/org/broadinstitute/sting/gatk/WalkerManager.java index eed49c9c5..801e67a30 100755 --- a/core/java/src/org/broadinstitute/sting/gatk/WalkerManager.java +++ b/core/java/src/org/broadinstitute/sting/gatk/WalkerManager.java @@ -29,17 +29,25 @@ import org.broadinstitute.sting.gatk.walkers.Walker; * To change this template use File | Settings | File Templates. */ public class WalkerManager { + private Map walkers = null; - public WalkerManager() { + public WalkerManager( String pluginDirectory ) { try { final File jarFile = getThisJarFile(); + if(pluginDirectory == null) + pluginDirectory = jarFile.getParent() + File.separator + "walkers"; + + System.out.println("plugin directory: " + pluginDirectory); + List walkerClasses = new ArrayList(); - walkerClasses.addAll( loadClassesFromJar( jarFile, getPackagePrefix(Walker.class) ) ); + // Load all classes that live in this jar. + walkerClasses.addAll( loadClassesFromJar( jarFile ) ); - File extensionPath = new File( jarFile.getParent() + File.separator + "walkers" ); + // Load all classes that live in the extension path. + File extensionPath = new File( pluginDirectory ); if(extensionPath.exists()) walkerClasses.addAll( loadClassesFromPath( extensionPath ) ); @@ -102,10 +110,9 @@ public class WalkerManager { * Loads concrete classes from a jar which are both in the same package or 'sub-package' of baseClass, * and which extend from baseClass. * @param jarFile The jar file to search. - * @param packagePrefix Filter out classes in the jar that don't start with this package. * @return A list of classes derived from baseClass. */ - private List loadClassesFromJar(final File jarFile, String packagePrefix) + private List loadClassesFromJar(final File jarFile) throws IOException { List subclasses = new ArrayList(); @@ -116,7 +123,7 @@ public class WalkerManager { while(jarEntry != null) { String jarEntryName = jarEntry.getName(); - if(jarEntryName.startsWith(packagePrefix) && jarEntryName.endsWith(".class")) + if(jarEntryName.endsWith(".class")) { String className = jarEntryName.substring(0,jarEntryName.lastIndexOf(".class")).replace('/','.'); subclasses.add( Class.forName(className) ); @@ -135,15 +142,6 @@ public class WalkerManager { return subclasses; } - /** - * Get the package prefix for a class, in directory format. - * @param clazz The class. - * @return Package prefix, in directory format. - */ - private String getPackagePrefix(Class clazz) { - return clazz.getPackage().getName().replace('.','/'); - } - /** * Load loose classes from the specified directory. * @param path source path from which to load classes.