
package org.apache.tools.ant.taskdefs.optional;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Path;
import org.apache.tools.ant.Project;

public class CommandlineJava {

    private Commandline vmCommand = new Commandline();
    private Commandline javaCommand = new Commandline();
    private Path classpath = new Path();
    private String vmVersion;


    public CommandlineJava() {
        setVm("java");
        setVmversion(Project.getJavaVersion());
    }

    public Commandline.Argument createArgument() {
        return javaCommand.createArgument();
    }

    public Commandline.Argument createVmArgument() {
        return vmCommand.createArgument();
    }

    public void setVm(String vm) {
        vmCommand.setExecutable(vm);
    }

    public void setVmversion(String value) {
        vmVersion = value;
    }

    public void setClassname(String classname) {
        javaCommand.setExecutable(classname);
    }

    public Path createClasspath() {
        return classpath;
    }

    public String getVmversion() {
        return vmVersion;
    }

    public String[] getCommandline() {
        final Commandline result = new Commandline();
        result.addLine(vmCommand.getCommandline());
        final String classpath = this.classpath.toString();
        if (classpath.length() > 0) {
            result.createArgument().setValue("-classpath");
            result.createArgument().setValue(classpath);
        }
        result.addLine(javaCommand.getCommandline());
        return result.getCommandline();
    }


    public String toString() {
        String[] list = getCommandline();

        // empty path return empty string
        if (list.length == 0) return "";

        // path containing one or more elements
        final StringBuffer result = new StringBuffer(list[0]);
        for (int i=1; i < list.length; i++) {
            result.append(' ');
            result.append(list[i]);
        }

        return result.toString();
    }

}
