UnifiedGenotyper now works without -varout or -vf set.

git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@2464 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
hanna 2009-12-29 16:46:24 +00:00
parent b125571a98
commit e32174fbc4
4 changed files with 75 additions and 9 deletions

View File

@ -58,6 +58,26 @@ public class GenotypeWriterArgumentTypeDescriptor extends ArgumentTypeDescriptor
createGenotypeFormatArgumentDefinition(source) ); createGenotypeFormatArgumentDefinition(source) );
} }
/**
* This command-line argument descriptor does want to override the provided default value.
* @return true always.
*/
@Override
public boolean overridesDefault() {
return true;
}
/**
* Provide the default value for this argument.
* @return A VCFGenotypeWriter which writes to the default output stream.
*/
@Override
public Object getDefault() {
GenotypeWriterStub defaultGenotypeWriter = new VCFGenotypeWriterStub(engine,System.out);
engine.addOutput(defaultGenotypeWriter);
return defaultGenotypeWriter;
}
/** /**
* Convert the given argument matches into a single object suitable for feeding into the ArgumentSource. * Convert the given argument matches into a single object suitable for feeding into the ArgumentSource.
* @param source Source for this argument. * @param source Source for this argument.

View File

@ -48,6 +48,11 @@ public class ArgumentSource {
*/ */
public final Field field; public final Field field;
/**
* Type descriptor to use when parsing new argument types.
*/
private final ArgumentTypeDescriptor typeDescriptor;
/** /**
* Create a new command-line argument target. * Create a new command-line argument target.
* @param clazz Class containing the argument. * @param clazz Class containing the argument.
@ -56,6 +61,7 @@ public class ArgumentSource {
public ArgumentSource( Class clazz, Field field ) { public ArgumentSource( Class clazz, Field field ) {
this.clazz = clazz; this.clazz = clazz;
this.field = field; this.field = field;
this.typeDescriptor = ArgumentTypeDescriptor.create( field.getType() );
} }
/** /**
@ -89,10 +95,25 @@ public class ArgumentSource {
* @return A non-null, non-empty list of argument definitions. * @return A non-null, non-empty list of argument definitions.
*/ */
public List<ArgumentDefinition> createArgumentDefinitions() { public List<ArgumentDefinition> createArgumentDefinitions() {
ArgumentTypeDescriptor typeDescriptor = ArgumentTypeDescriptor.create( field.getType() );
return typeDescriptor.createArgumentDefinitions( this ); return typeDescriptor.createArgumentDefinitions( this );
} }
/**
* This argument type descriptor wants to override any default value the user might have specified.
* @return True if this descriptor wants to override any default the user specified. False otherwise.
*/
public boolean overridesDefault() {
return typeDescriptor.overridesDefault();
}
/**
* Provides the default value for the command-line argument.
* @return Default value to load into the object.
*/
public Object getDefault() {
return typeDescriptor.getDefault();
}
/** /**
* Parses the specified value based on the specified type. * Parses the specified value based on the specified type.
* @param source The type of value to be parsed. * @param source The type of value to be parsed.
@ -101,10 +122,8 @@ public class ArgumentSource {
*/ */
public Object parse( ArgumentSource source, ArgumentMatches values ) { public Object parse( ArgumentSource source, ArgumentMatches values ) {
Object value = null; Object value = null;
if( !isFlag() ) { if( !isFlag() )
ArgumentTypeDescriptor typeDescriptor = ArgumentTypeDescriptor.create( field.getType() );
value = typeDescriptor.parse( source, values ); value = typeDescriptor.parse( source, values );
}
else else
value = true; value = true;

View File

@ -65,6 +65,11 @@ public abstract class ArgumentTypeDescriptor {
descriptors = allDescriptors; descriptors = allDescriptors;
} }
/**
* Fetch the given descriptor from the descriptor repository.
* @param type Class for which to specify a descriptor.
* @return descriptor for the given type.
*/
public static ArgumentTypeDescriptor create( Class type ) { public static ArgumentTypeDescriptor create( Class type ) {
for( ArgumentTypeDescriptor descriptor: descriptors ) { for( ArgumentTypeDescriptor descriptor: descriptors ) {
if( descriptor.supports(type) ) if( descriptor.supports(type) )
@ -80,6 +85,22 @@ public abstract class ArgumentTypeDescriptor {
*/ */
public abstract boolean supports( Class type ); public abstract boolean supports( Class type );
/**
* This argument type descriptor wants to override any default value the user might have specified.
* @return True if this descriptor wants to override any default the user specified. False otherwise.
*/
public boolean overridesDefault() {
return false;
}
/**
* Provides the default value for the command-line argument.
* @return Default value to load into the object.
*/
public Object getDefault() {
throw new UnsupportedOperationException(String.format("Type descriptor %s cannot override default value of command-line argument",this.getClass()));
}
/** /**
* Given the given argument source and attributes, synthesize argument definitions for command-line arguments. * Given the given argument source and attributes, synthesize argument definitions for command-line arguments.
* @param source Source class and field for the given argument. * @param source Source class and field for the given argument.
@ -115,6 +136,7 @@ public abstract class ArgumentTypeDescriptor {
/** /**
* Retrieves the full name of the argument, specifiable with the '--' prefix. The full name can be * Retrieves the full name of the argument, specifiable with the '--' prefix. The full name can be
* either specified explicitly with the fullName annotation parameter or implied by the field name. * either specified explicitly with the fullName annotation parameter or implied by the field name.
* @param source Original field specifying command-line arguments.
* @return full name of the argument. Never null. * @return full name of the argument. Never null.
*/ */
protected String getFullName( ArgumentSource source ) { protected String getFullName( ArgumentSource source ) {
@ -125,6 +147,7 @@ public abstract class ArgumentTypeDescriptor {
/** /**
* Retrieves the short name of the argument, specifiable with the '-' prefix. The short name can * Retrieves the short name of the argument, specifiable with the '-' prefix. The short name can
* be specified or not; if left unspecified, no short name will be present. * be specified or not; if left unspecified, no short name will be present.
* @param source Original field specifying command-line arguments.
* @return short name of the argument. Null if no short name exists. * @return short name of the argument. Null if no short name exists.
*/ */
protected String getShortName( ArgumentSource source ) { protected String getShortName( ArgumentSource source ) {
@ -134,6 +157,7 @@ public abstract class ArgumentTypeDescriptor {
/** /**
* Documentation for this argument. Mandatory field. * Documentation for this argument. Mandatory field.
* @param source Original field specifying command-line arguments.
* @return Documentation for this argument. * @return Documentation for this argument.
*/ */
protected String getDoc( ArgumentSource source ) { protected String getDoc( ArgumentSource source ) {
@ -143,6 +167,7 @@ public abstract class ArgumentTypeDescriptor {
/** /**
* Returns whether this field is required. Note that flag fields are always forced to 'not required'. * Returns whether this field is required. Note that flag fields are always forced to 'not required'.
* @param source Original field specifying command-line arguments.
* @return True if the field is mandatory and not a boolean flag. False otherwise. * @return True if the field is mandatory and not a boolean flag. False otherwise.
*/ */
protected boolean isRequired( ArgumentSource source ) { protected boolean isRequired( ArgumentSource source ) {
@ -152,6 +177,7 @@ public abstract class ArgumentTypeDescriptor {
/** /**
* Specifies other arguments which cannot be used in conjunction with tihs argument. Comma-separated list. * Specifies other arguments which cannot be used in conjunction with tihs argument. Comma-separated list.
* @param source Original field specifying command-line arguments.
* @return A comma-separated list of exclusive arguments, or null if none are present. * @return A comma-separated list of exclusive arguments, or null if none are present.
*/ */
protected String getExclusiveOf( ArgumentSource source ) { protected String getExclusiveOf( ArgumentSource source ) {
@ -161,6 +187,7 @@ public abstract class ArgumentTypeDescriptor {
/** /**
* A regular expression which can be used for validation. * A regular expression which can be used for validation.
* @param source Original field specifying command-line arguments.
* @return a JVM regex-compatible regular expression, or null to permit any possible value. * @return a JVM regex-compatible regular expression, or null to permit any possible value.
*/ */
protected String getValidationRegex( ArgumentSource source ) { protected String getValidationRegex( ArgumentSource source ) {

View File

@ -250,7 +250,7 @@ public class ParsingEngine {
public void loadArgumentsIntoObject( Object object ) { public void loadArgumentsIntoObject( Object object ) {
List<ArgumentSource> argumentSources = extractArgumentSources(object.getClass()); List<ArgumentSource> argumentSources = extractArgumentSources(object.getClass());
for( ArgumentSource argumentSource: argumentSources ) for( ArgumentSource argumentSource: argumentSources )
loadMatchesIntoObject( argumentSource, object, argumentMatches.findMatches(argumentSource) ); loadValueIntoObject( argumentSource, object, argumentMatches.findMatches(argumentSource) );
} }
/** /**
@ -259,9 +259,9 @@ public class ParsingEngine {
* @param source Argument source to load into the object. * @param source Argument source to load into the object.
* @param instance Object into which to inject the value. The target might be in a container within the instance. * @param instance Object into which to inject the value. The target might be in a container within the instance.
*/ */
private void loadMatchesIntoObject( ArgumentSource source, Object instance, ArgumentMatches argumentMatches ) { private void loadValueIntoObject( ArgumentSource source, Object instance, ArgumentMatches argumentMatches ) {
// Nothing to load // Nothing to load
if( argumentMatches.size() == 0 ) if( argumentMatches.size() == 0 && !source.overridesDefault())
return; return;
// Target instance into which to inject the value. // Target instance into which to inject the value.
@ -280,7 +280,7 @@ public class ParsingEngine {
throw new StingException("Internal command-line parser error: unable to find a home for argument matches " + argumentMatches); throw new StingException("Internal command-line parser error: unable to find a home for argument matches " + argumentMatches);
for( Object target: targets ) { for( Object target: targets ) {
Object value = source.parse( source, argumentMatches ); Object value = (argumentMatches.size() != 0) ? source.parse(source,argumentMatches) : source.getDefault();
JVMUtils.setFieldValue(source.field,target,value); JVMUtils.setFieldValue(source.field,target,value);
} }
} }