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

/**
 * Title:
 * Description:
 * Copyright:    Copyright (c) 2001
 * Company:
 * @author
 * @version 1.0
 */

import java.io.File;
import org.apache.tools.ant.*;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.taskdefs.ExecTask;

/**
 * Sign a archive.
 *
 * @author Peter Donald <a href="mailto:donaldp@apache.org">donaldp@apache.org</a>
 */
public class JBuilderTask extends Task {


    final static String PROJECT_EXTENSION = ".jpx";
    /**
     * The name of the project file.
     */
    protected String _project;

    /**
     * The location of the project
     */
    protected String _projectDir;

    /**
     * The location of the Jbuilder executable
     */
    protected File _jBuilderExec;

    protected boolean _verbose = false;

    protected boolean _abortOnError = false;
    protected boolean _abortOnWarning = false;

    protected File _output;

    public void setAbortOnError(final boolean value) {
        this._abortOnError = value;
    }

    public void setAbortOnWarning(final boolean value) {
        this._abortOnWarning = value;
    }

    public void setProjectName(final String name) {
        this._project = name;
    }

    public void setProjectPath(final String dir) {
        this._projectDir = _projectDir;
    }

    public void setJBuilderExecPath(final String dir) {
        this._jBuilderExec = new File(dir, "JBuilder");
    }

    public void setVerbose(final boolean value) {
        this._verbose = value;
    }

    public void execute() throws BuildException {
        if (project.getJavaVersion().equals(Project.JAVA_1_1)) {
            throw new BuildException("The JBuilder task is only available on JDK versions 1.2 or greater");
        }

        if (_jBuilderExec == null) {
            throw new BuildException("Jbuilder executable attribute must be set");
        }
        if (!_jBuilderExec.exists()) {
          throw new BuildException("Jbuilder executable could not be found");
        }

        if (_project == null) {
            throw new BuildException("Project Name attribute must be set");
        }

        if (_projectDir == null) {
            throw new BuildException("Project Directory attribute must be set");
        }

        File fullProjectPath = new File(_projectDir,_project);

        final StringBuffer sb = new StringBuffer();

        final ExecTask cmd = (ExecTask) project.createTask("exec");
        cmd.setExecutable(_jBuilderExec.getAbsolutePath() );

        cmd.createArg().setValue("-build");
        cmd.createArg().setValue(_project);

        if (_verbose) {
            cmd.createArg().setValue("-verbose");
        }

        log("Executing Jbuilder : " + _jBuilderExec.getAbsolutePath());
        cmd.setFailonerror(true);
        cmd.setTaskName( getTaskName() );

        cmd.setOutput(new File(_projectDir, "compileOutput.txt"));

        cmd.execute();

        checkOutputForErrors();
    }

    private void checkOutputForErrors() {
     log("checkforoutput" );
     throw new BuildException("Project Directory attribute must be set");

    }

 }

