/*******************************************************************************
 * Copyright (c) 2000, 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.ant.tests.core.testplugin;

import org.eclipse.ant.core.AntRunner;
import org.eclipse.ant.tests.core.AbstractAntTest;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;

/**
 * Responsible for running test ant build files.
 */
public class AntFileRunner {

	private static final String BASE_DIR_PREFIX = "-Dbasedir="; //$NON-NLS-1$

	public void run(IFile buildFile, String[] targets, String[] args, String baseDir, boolean captureOutput) throws CoreException {

		AntRunner runner = new AntRunner();

		String[] runnerArgs = args;

		if (baseDir.length() > 0) {
			// Ant requires the working directory to be specified
			// as one of the arguments, so it needs to be appended.
			int length = 1;
			if (args != null) {
				length = args.length + 1;
			}

			runnerArgs = new String[length];
			if (args != null) {
				System.arraycopy(args, 0, runnerArgs, 0, args.length);
			}
			runnerArgs[length - 1] = BASE_DIR_PREFIX + baseDir;
		}
		runner.setArguments(runnerArgs);

		if (buildFile != null) {
			runner.setBuildFileLocation(buildFile.getLocation().toFile().toString());
		}
		if (targets != null && targets.length > 0) {
			runner.setExecutionTargets(targets);
		}
		if (captureOutput) {
			runner.addBuildLogger(AbstractAntTest.ANT_TEST_BUILD_LOGGER);
		}

		runner.run(null);
	}

	public void run(String[] args, String baseDir) throws Exception {

		AntRunner runner = new AntRunner();

		String[] runnerArgs = args;

		if (baseDir.length() > 0) {
			// Ant requires the working directory to be specified
			// as one of the arguments, so it needs to be appended.
			runnerArgs = new String[args.length + 1];
			System.arraycopy(args, 0, runnerArgs, 0, args.length);
			runnerArgs[args.length] = BASE_DIR_PREFIX + baseDir;
		}
		runner.setArguments(runnerArgs);

		runner.run(args);
	}
}
