diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/UpdateSAMSortOrderWalker.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/UpdateSAMSortOrderWalker.java new file mode 100644 index 000000000..27d4e3ce5 --- /dev/null +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/UpdateSAMSortOrderWalker.java @@ -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 { + + @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(); + } +} diff --git a/java/src/org/broadinstitute/sting/utils/cmdLine/ArgumentTypeDescriptor.java b/java/src/org/broadinstitute/sting/utils/cmdLine/ArgumentTypeDescriptor.java index 5fa005759..b2af39842 100644 --- a/java/src/org/broadinstitute/sting/utils/cmdLine/ArgumentTypeDescriptor.java +++ b/java/src/org/broadinstitute/sting/utils/cmdLine/ArgumentTypeDescriptor.java @@ -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); diff --git a/java/src/org/broadinstitute/sting/utils/cmdLine/ParsingEngine.java b/java/src/org/broadinstitute/sting/utils/cmdLine/ParsingEngine.java index eadef98d4..2eeefb29d 100755 --- a/java/src/org/broadinstitute/sting/utils/cmdLine/ParsingEngine.java +++ b/java/src/org/broadinstitute/sting/utils/cmdLine/ParsingEngine.java @@ -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); + } } \ No newline at end of file