All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.broadinstitute.hellbender.testutils.ArgumentsBuilder Maven / Gradle / Ivy

package org.broadinstitute.hellbender.testutils;

import org.apache.commons.lang3.StringUtils;
import org.broadinstitute.hellbender.cmdline.StandardArgumentDefinitions;
import org.broadinstitute.hellbender.utils.Utils;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Builder for command line argument lists
 * It will convert old style "Argument=Value" into new style "--Argument value" strings
 * Use this only in test code.
 */
public final class ArgumentsBuilder {
    private final List args= new ArrayList<>();

    public ArgumentsBuilder(){}

    public ArgumentsBuilder(Object[] args){
        for (Object arg: args){
            if (arg instanceof String){
                this.add((String) arg);
            } else {
                this.add(arg);
            }
        }
    }

    /**
     * Add a string to the arguments list
     * Strings are processed specially, they are reformatted to match the new unix style arguments
     * @param arg A string representing one or more arguments
     * @return the ArgumentsBuilder
     */
    public ArgumentsBuilder add(String arg){
        List chunks = Arrays.asList(StringUtils.split(arg.trim()));
        for (String chunk : chunks){
            addRaw(chunk);
        }
        return this;
    }

    /**
     * Add a string to the arguments list without processing the string itself.
     * @param arg A string representing one or more arguments
     * @return the ArgumentsBuilder
     */
    public ArgumentsBuilder addRaw(final String arg){
        if(arg.contains("=")){
            final String tmp = "--"+arg;
            args.addAll(Arrays.asList(tmp.split("=")));
        }
        else{
            args.add(arg);
        }
        return this;
    }

    /**
     * add an input file argument {@link StandardArgumentDefinitions#INPUT_LONG_NAME}
     */
    public ArgumentsBuilder addInput(File input) {
        addFileArgument(StandardArgumentDefinitions.INPUT_LONG_NAME, input);
        return this;
    }

    /**
     * add an output file argument using {@link StandardArgumentDefinitions#OUTPUT_LONG_NAME}
     */
    public ArgumentsBuilder addOutput(File output) {
        addFileArgument(StandardArgumentDefinitions.OUTPUT_LONG_NAME, output);
        return this;
    }

    /**
     * add a reference file argument using {@link StandardArgumentDefinitions#REFERENCE_LONG_NAME}
     */
    public ArgumentsBuilder addReference(File reference){
        addFileArgument(StandardArgumentDefinitions.REFERENCE_LONG_NAME, reference);
        return this;
    }


    /**
     * add a vcf file argument using {@link StandardArgumentDefinitions#VARIANT_LONG_NAME}
     */
    public ArgumentsBuilder addVCF(File fileIn) {
        addFileArgument(StandardArgumentDefinitions.VARIANT_LONG_NAME, fileIn);
        return this;
    }

    /**
     * add an argument with a file as its parameter
     */
    public ArgumentsBuilder addFileArgument(String argumentName, File file){
        Utils.nonNull(file);
        Utils.nonNull(argumentName);
        add("--" + argumentName);
        add(file.getAbsolutePath());
        return this;
    }

    /**
     * add an argument with a boolean as its parameter
     */
    public ArgumentsBuilder addBooleanArgument(String argumentName, boolean yes){
        Utils.nonNull(argumentName);
        add("--" + argumentName);
        add(yes);
        return this;
    }

    /**
     * add an argument with a given value to this builder
     */
    public ArgumentsBuilder addArgument(final String argumentName, final String argumentValue) {
        Utils.nonNull(argumentValue);
        Utils.nonNull(argumentName);
        add("--" + argumentName);
        add(argumentValue);
        return this;
    }

    /**
     * Add an argument with a given value to this builder without splitting the value string into multiple arguments at whitespace.
     * This is specifically to allow arguments with values that contain whitespace.
     */
    public ArgumentsBuilder addArgumentWithValueThatIncludesWhitespace(final String argumentName, final String argumentValue) {
        Utils.nonNull(argumentValue);
        Utils.nonNull(argumentName);
        add("--" + argumentName);
        addRaw(argumentValue);
        return this;
    }

    /**
     * add a positional argument to this builder
     */
    public ArgumentsBuilder addPositionalArgument(final String argumentName) {
        Utils.nonNull(argumentName);
        add(argumentName);
        return this;
    }

    /**
     * Add any object's string representation to the arguments list
     */
    public ArgumentsBuilder add(Object arg) {
        this.args.add(arg.toString());
        return this;
    }

    /**
     * @return the arguments as List
     */
    public List getArgsList(){
        return this.args;
    }

    /**
     * @return the arguments as String[]
     */
    public String[] getArgsArray(){
        return this.args.toArray(new String[this.args.size()]);
    }


    /**
     * @return the arguments as a single String
     */
    public String getString() {
        return String.join(" ", args);
    }

    @Override
    public String toString(){
        return getString();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy