Fixes for GSA-201, where enumerated types in command line arguments had to be defined as all uppercase for the system to work.

Also a little playground walker that changes the sort order flag of a BAM file.

git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@1805 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
aaron 2009-10-09 18:11:32 +00:00
parent 32d55eb2ff
commit 62c484b57a
3 changed files with 67 additions and 1 deletions

View File

@ -0,0 +1,49 @@
package org.broadinstitute.sting.playground.gatk.walkers;
import org.broadinstitute.sting.gatk.walkers.ReadWalker;
import org.broadinstitute.sting.gatk.GenomeAnalysisEngine;
import org.broadinstitute.sting.utils.cmdLine.Argument;
import net.sf.samtools.SAMFileWriter;
import net.sf.samtools.SAMRecord;
import net.sf.samtools.SAMFileHeader;
import net.sf.samtools.SAMFileWriterFactory;
import java.io.File;
/**
* Created by IntelliJ IDEA.
* User: aaron
* Date: Oct 9, 2009
* Time: 2:21:08 PM
*/
public class UpdateSAMSortOrderWalker extends ReadWalker<SAMRecord, SAMFileWriter> {
@Argument(required=true, shortName="out_bam", doc="The samfile to output to")
public File SAM_FILE_OUTPUT_LOCATION;
@Argument(required=false, shortName="sortorder", doc="the sort order to emit in")
public SAMFileHeader.SortOrder SORT_ORDER=SAMFileHeader.SortOrder.coordinate;
@Override
public SAMRecord map(char[] ref, SAMRecord read) {
return read;
}
@Override
public SAMFileWriter reduceInit() {
SAMFileHeader header = GenomeAnalysisEngine.instance.getSAMFileHeader();
header.setSortOrder(SORT_ORDER);
SAMFileWriterFactory factory = new SAMFileWriterFactory();
return factory.makeBAMWriter(header,false,SAM_FILE_OUTPUT_LOCATION);
}
@Override
public SAMFileWriter reduce(SAMRecord value, SAMFileWriter sum) {
sum.addAlignment(value);
return sum;
}
public void onTraversalDone(SAMFileWriter result) {
result.close();
}
}

View File

@ -241,7 +241,10 @@ class SimpleArgumentTypeDescriptor extends ArgumentTypeDescriptor {
Method valueOf = primitiveToWrapperMap.get(type).getMethod("valueOf",String.class);
return valueOf.invoke(null,value.trim());
} else if (type.isEnum()) {
return Enum.valueOf(type,value.toUpperCase().trim());
Object[] vals = type.getEnumConstants();
for (Object val : vals)
if (String.valueOf(val).equalsIgnoreCase(value)) return val;
throw new UnknownEnumeratedValueException(value, type.getName());
} else {
Constructor ctor = type.getConstructor(String.class);
return ctor.newInstance(value);

View File

@ -485,4 +485,18 @@ class ArgumentsAreMutuallyExclusiveException extends ArgumentException {
return sb.toString();
}
}
/**
* An exception for when an argument doesn't match an of the enumerated options for that var type
*/
class UnknownEnumeratedValueException extends ArgumentException {
public UnknownEnumeratedValueException(String argumentPassed, String typeName ) {
super( formatArguments(argumentPassed, typeName) );
}
private static String formatArguments(String argumentPassed, String typeName ) {
return new String("Enumerated constant " + argumentPassed + " Not found in type " + typeName);
}
}