blob: f933f76c29c959d9225dfae54079564604e7f929 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2006 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.releng.util.rss;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.ExecTask;
import org.apache.tools.ant.types.Commandline.Argument;
/**
*
* Helper methods
*
* @author nickb
*
*/
public class RSSFeedUtil {
private static final String SP = " "; //$NON-NLS-1$
private static final String CL = ":"; //$NON-NLS-1$
public static final String EXPECTED_RESULT = "0"; //$NON-NLS-1$
public static final String RUN_EXEC_TASK_ERROR = "runExecTask.Error"; //$NON-NLS-1$
public static final String RUN_EXEC_TASK_OUTPUT = "runExecTask.Output"; //$NON-NLS-1$
public static final String RUN_EXEC_TASK_RESULT = "runExecTask.Result"; //$NON-NLS-1$
private int debug = 0;
/**
* A buffer.
*/
private static byte[] buffer = new byte [8192];
public ExecTask runExecTask(String executable, String commandline, String dir)
{
if (dir==null) {
dir = "."; //$NON-NLS-1$
}
ExecTask exec = new ExecTask();
exec.setExecutable(executable);
exec.setResolveExecutable(true);
exec.setDir((new File(dir)).getAbsoluteFile());
Project project = new Project(); project.setName(executable);
exec.setProject(project);
exec.setFailIfExecutionFails(true);
exec.setFailonerror(true);
exec.setErrorProperty(RUN_EXEC_TASK_ERROR);
exec.setOutputproperty(RUN_EXEC_TASK_OUTPUT);
exec.setResultProperty(RUN_EXEC_TASK_RESULT);
exec.setLogError(true);
if (commandline != null || "".equals(commandline)) { //$NON-NLS-1$
Argument execArg = exec.createArg();
execArg.setLine(commandline);
}
try
{
if (debug>0) {
System.out.println(Messages.getString("RSSFeedPublisherTask.Execute") + SP + executable + (commandline==null?"":SP + commandline)); //$NON-NLS-1$ //$NON-NLS-2$
}
exec.execute();
handleExecTaskReturn(project);
}
catch (Exception e)
{
handleExecTaskReturn(project);
System.err.println(Messages.getString("RSSFeedPublisherTask.ForProject") + SP + project.getName() + CL); //$NON-NLS-1$
e.printStackTrace();
}
return exec;
}
private void handleExecTaskReturn(Project project)
{
String out = null;
out = project.getProperty(RUN_EXEC_TASK_RESULT);
if (debug>1) {
if (!isNullString(out) && !EXPECTED_RESULT.equals(out)) {
System.err.println(Messages.getString("RSSFeedPublisherTask.Result") + SP + out); //$NON-NLS-1$
}
}
out = project.getProperty(RUN_EXEC_TASK_OUTPUT);
if (!isNullString(out)) {
System.out.println(out);
}
out = project.getProperty(RUN_EXEC_TASK_ERROR);
if (!isNullString(out)) {
if (debug>1 && out.equals(Messages.getString("RSSFeedPublisherTask.CVSWarning"))) { //$NON-NLS-1$
System.out.println(out);
} else if (!out.equals(Messages.getString("RSSFeedPublisherTask.CVSWarning"))) { //$NON-NLS-1$
System.err.println(Messages.getString("RSSFeedPublisherTask.Error") + SP + out); //$NON-NLS-1$
}
}
}
/**
* Copies all bytes in the given source stream to the given destination
* stream. Neither streams are closed.
*
* From: org.eclipse.emf/tests/org.eclipse.emf.test.build/src/org/eclipse/emf/test/build/FileTool.java,v 1.2
*
* @param source
* the given source stream
* @param destination
* the given destination stream
*/
public static void transferData(InputStream source, OutputStream destination) throws IOException
{
int bytesRead = 0;
while (bytesRead != -1)
{
bytesRead = source.read(buffer, 0, buffer.length);
if (bytesRead != -1)
{
destination.write(buffer, 0, bytesRead);
}
}
}
public static boolean isNullString(String str)
{
return str==null||"".equals(str); //$NON-NLS-1$
}
public void setDebug(int debug)
{
this.debug = debug;
}
}