Farewell, functionalj. You promised much, but you could not deliver.

git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@847 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
hanna 2009-05-28 01:35:49 +00:00
parent d275c18e58
commit aa17c4a468
6 changed files with 34 additions and 53 deletions

View File

@ -1,7 +1,6 @@
<ivy-module version="1.0">
<info organisation="org.broadinstitute" module="Sting"/>
<dependencies>
<dependency org="net.sf" name="functionalj" rev="latest.integration" />
<dependency org="net.sf" name="sam" rev="latest.integration" />
<dependency org="edu.mit.broad" name="picard" rev="latest.integration" />
<dependency org="junit" name="junit" rev="4.4" />

View File

@ -1,10 +1,5 @@
package org.broadinstitute.sting.gatk;
import net.sf.functionalj.reflect.StdReflect;
import net.sf.functionalj.reflect.JdkStdReflect;
import net.sf.functionalj.FunctionN;
import net.sf.functionalj.Functions;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
@ -41,7 +36,7 @@ public class WalkerManager {
*/
private static Logger logger = Logger.getLogger(WalkerManager.class);
private Map<String, Class> walkers;
private Map<String, Class<? extends Walker>> walkersByName;
public WalkerManager(String pluginDirectory) {
try {
@ -67,12 +62,12 @@ public class WalkerManager {
}
}
walkerCandidates = filterWalkers(walkerCandidates);
List<Class<? extends Walker>> walkers = filterWalkers(walkerCandidates);
if (walkerCandidates.isEmpty())
throw new RuntimeException("No walkers were found.");
walkers = createWalkerDatabase(walkerCandidates);
walkersByName = createWalkerDatabase(walkers);
}
// IOExceptions here are suspect; they indicate that the WalkerManager can't open its containing jar.
// Wrap in a RuntimeException.
@ -88,7 +83,7 @@ public class WalkerManager {
* @return True if the walker exists, false otherwise.
*/
public boolean doesWalkerExist(String walkerName) {
return walkers.containsKey(walkerName);
return walkersByName.containsKey(walkerName);
}
/**
@ -99,8 +94,8 @@ public class WalkerManager {
*/
public Walker createWalkerByName(String walkerName)
throws InstantiationException, IllegalAccessException {
Class walker = walkers.get(walkerName);
return (Walker) walker.newInstance();
Class<? extends Walker> walker = walkersByName.get(walkerName);
return walker.newInstance();
}
/**
@ -109,7 +104,7 @@ public class WalkerManager {
* @return Class representing the walker.
*/
public Class getWalkerClassByName(String walkerName) {
return walkers.get(walkerName);
return walkersByName.get(walkerName);
}
/**
@ -213,10 +208,13 @@ public class WalkerManager {
* @param classes Arbitrary list of classes.
* @return List of classes extending from Walker.
*/
private List<Class> filterWalkers(List<Class> classes) {
StdReflect reflect = new JdkStdReflect();
FunctionN<Boolean> filterFunc = reflect.instanceFunction(new JVMUtils.ClassFilter(Walker.class), "filter", Class.class);
return Functions.findAll(filterFunc.f1(), classes);
private List<Class<? extends Walker>> filterWalkers(List<Class> classes) {
List<Class<? extends Walker>> walkerClasses = new ArrayList<Class<? extends Walker>>();
for( Class clazz: classes ) {
if( JVMUtils.isConcreteImplementationOf(clazz,Walker.class) )
walkerClasses.add( (Class<? extends Walker>)clazz );
}
return walkerClasses;
}
/**
@ -225,10 +223,10 @@ public class WalkerManager {
* @param walkerClasses Classes to instantiate.
* @return map of walker name to walker.
*/
private Map<String, Class> createWalkerDatabase(List<Class> walkerClasses) {
Map<String, Class> walkers = new HashMap<String, Class>();
private Map<String, Class<? extends Walker>> createWalkerDatabase(List<Class<? extends Walker>> walkerClasses) {
Map<String, Class<? extends Walker>> walkers = new HashMap<String, Class<? extends Walker>>();
for (Class<Walker> walkerClass : walkerClasses) {
for (Class<? extends Walker> walkerClass : walkerClasses) {
String walkerName = getWalkerName(walkerClass);
logger.info(String.format("* Adding module %s", walkerName));
walkers.put(walkerName, walkerClass);

View File

@ -3,12 +3,6 @@ package org.broadinstitute.sting.utils;
import edu.mit.broad.picard.directed.IntervalList;
import edu.mit.broad.picard.reference.ReferenceSequenceFile;
import edu.mit.broad.picard.util.Interval;
import net.sf.functionalj.Function1;
import net.sf.functionalj.FunctionN;
import net.sf.functionalj.Functions;
import net.sf.functionalj.reflect.JdkStdReflect;
import net.sf.functionalj.reflect.StdReflect;
import net.sf.functionalj.util.Operators;
import net.sf.samtools.SAMRecord;
import net.sf.samtools.SAMSequenceDictionary;
import net.sf.samtools.SAMSequenceRecord;
@ -203,23 +197,21 @@ public class GenomeLoc implements Comparable<GenomeLoc>, Cloneable {
* @param str String representation of genome locs. Null string corresponds to no filter.
* @return Array of GenomeLoc objects corresponding to the locations in the string, sorted by coordinate order
*/
public static ArrayList<GenomeLoc> parseGenomeLocs(final String str) {
public static List<GenomeLoc> parseGenomeLocs(final String str) {
// Null string means no filter.
if( str == null ) return null;
// Of the form: loc1;loc2;...
// Where each locN can be:
// 'chr2', 'chr2:1000000' or 'chr2:1,000,000-2,000,000'
StdReflect reflect = new JdkStdReflect();
FunctionN<GenomeLoc> parseOne = reflect.staticFunction(GenomeLoc.class, "parseGenomeLoc", String.class);
Function1<GenomeLoc, String> f1 = parseOne.f1();
try {
Collection<GenomeLoc> result = Functions.map(f1, Arrays.asList(str.split(";")));
ArrayList<GenomeLoc> locs = new ArrayList(result);
List<GenomeLoc> locs = new ArrayList<GenomeLoc>();
for( String loc: str.split(";") )
locs.add( parseGenomeLoc(loc.trim()) );
Collections.sort(locs);
//logger.info(String.format("Going to process %d locations", locs.length));
locs = mergeOverlappingLocations(locs);
logger.info("Locations are:" + Utils.join(", ", Functions.map(Operators.toString, locs)));
logger.info("Locations are:" + Utils.join(", ", locs));
return locs;
} catch (Exception e) {
e.printStackTrace();
@ -228,8 +220,8 @@ public class GenomeLoc implements Comparable<GenomeLoc>, Cloneable {
}
}
public static ArrayList<GenomeLoc> mergeOverlappingLocations(final ArrayList<GenomeLoc> raw) {
logger.debug(" Raw locations are:\n" + Utils.join("\n", Functions.map(Operators.toString, raw)));
public static List<GenomeLoc> mergeOverlappingLocations(final List<GenomeLoc> raw) {
logger.debug(" Raw locations are:\n" + Utils.join("\n", raw));
if ( raw.size() <= 1 )
return raw;
else {
@ -561,11 +553,11 @@ public class GenomeLoc implements Comparable<GenomeLoc>, Cloneable {
*
* @param file_name
*/
public static ArrayList<GenomeLoc> IntervalFileToList(final String file_name) {
public static List<GenomeLoc> IntervalFileToList(final String file_name) {
// first try to read it as an interval file since that's well structured
// we'll fail quickly if it's not a valid file. Then try to parse it as
// a location string file
ArrayList<GenomeLoc> ret = null;
List<GenomeLoc> ret = null;
try {
IntervalList il = IntervalList.fromFile(new File(file_name));

View File

@ -101,20 +101,15 @@ public class JVMUtils {
}
/**
* A functor returning true for classes which extend from baseClass.
* Is the specified class a concrete implementation of baseClass?
* @param clazz Class to check.
* @param baseClass Base class to check against.
* @return True if clazz implements baseClass and is not abstract / an interface. False otherwise.
*/
public static class ClassFilter {
private Class baseClass;
public ClassFilter(Class baseClass) {
this.baseClass = baseClass;
}
public Boolean filter(Class clazz) {
return baseClass.isAssignableFrom(clazz) &&
!Modifier.isAbstract(clazz.getModifiers()) &&
!Modifier.isInterface(clazz.getModifiers());
}
public static boolean isConcreteImplementationOf( Class clazz, Class baseClass ) {
return baseClass.isAssignableFrom(clazz) &&
!Modifier.isAbstract(clazz.getModifiers()) &&
!Modifier.isInterface(clazz.getModifiers());
}
/**

View File

@ -1,3 +0,0 @@
<ivy-module version="1.0">
<info organisation="net.sf" module="functionalj" revision="1.0" status="release" />
</ivy-module>