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:
parent
d275c18e58
commit
aa17c4a468
1
ivy.xml
1
ivy.xml
|
|
@ -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" />
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1,3 +0,0 @@
|
|||
<ivy-module version="1.0">
|
||||
<info organisation="net.sf" module="functionalj" revision="1.0" status="release" />
|
||||
</ivy-module>
|
||||
Loading…
Reference in New Issue