• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*******************************************************************************
2  * Copyright (c) 2005, 2006 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  *     IBM Corporation - initial API and implementation
10  *******************************************************************************/
11 package org.eclipse.releng.util.rss;
12 
13 import java.io.File;
14 import java.io.IOException;
15 import java.io.InputStream;
16 import java.io.OutputStream;
17 
18 import org.apache.tools.ant.Project;
19 import org.apache.tools.ant.taskdefs.ExecTask;
20 import org.apache.tools.ant.types.Commandline.Argument;
21 
22 /**
23  *
24  *    Helper methods
25  *
26  * @author nickb
27  *
28  */
29 public class RSSFeedUtil {
30 
31   private static final String SP = " "; //$NON-NLS-1$
32   private static final String CL = ":"; //$NON-NLS-1$
33   public static final String EXPECTED_RESULT = "0"; //$NON-NLS-1$
34 
35   public static final String RUN_EXEC_TASK_ERROR = "runExecTask.Error"; //$NON-NLS-1$
36   public static final String RUN_EXEC_TASK_OUTPUT = "runExecTask.Output"; //$NON-NLS-1$
37   public static final String RUN_EXEC_TASK_RESULT = "runExecTask.Result"; //$NON-NLS-1$
38 
39   private int debug = 0;
40 
41   /**
42    * A buffer.
43    */
44   private static byte[] buffer = new byte [8192];
45 
runExecTask(String executable, String commandline, String dir)46   public ExecTask runExecTask(String executable, String commandline, String dir)
47   {
48     if (dir==null) {
49       dir = ".";  //$NON-NLS-1$
50     }
51 
52     ExecTask exec = new ExecTask();
53     exec.setExecutable(executable);
54     exec.setResolveExecutable(true);
55     exec.setDir((new File(dir)).getAbsoluteFile());
56     Project project = new Project(); project.setName(executable);
57     exec.setProject(project);
58     exec.setFailIfExecutionFails(true);
59     exec.setFailonerror(true);
60     exec.setErrorProperty(RUN_EXEC_TASK_ERROR);
61     exec.setOutputproperty(RUN_EXEC_TASK_OUTPUT);
62     exec.setResultProperty(RUN_EXEC_TASK_RESULT);
63     exec.setLogError(true);
64 
65     if (commandline != null || "".equals(commandline)) { //$NON-NLS-1$
66       Argument execArg = exec.createArg();
67       execArg.setLine(commandline);
68     }
69     try
70     {
71       if (debug>0) {
72         System.out.println(Messages.getString("RSSFeedPublisherTask.Execute") + SP + executable + (commandline==null?"":SP + commandline)); //$NON-NLS-1$ //$NON-NLS-2$
73       }
74       exec.execute();
75       handleExecTaskReturn(project);
76     }
77     catch (Exception e)
78     {
79       handleExecTaskReturn(project);
80       System.err.println(Messages.getString("RSSFeedPublisherTask.ForProject") + SP + project.getName() + CL); //$NON-NLS-1$
81       e.printStackTrace();
82     }
83 
84     return exec;
85 
86   }
87 
handleExecTaskReturn(Project project)88   private void handleExecTaskReturn(Project project)
89   {
90     String out = null;
91 
92     out = project.getProperty(RUN_EXEC_TASK_RESULT);
93     if (debug>1) {
94       if (!isNullString(out) && !EXPECTED_RESULT.equals(out)) {
95         System.err.println(Messages.getString("RSSFeedPublisherTask.Result") + SP + out); //$NON-NLS-1$
96       }
97     }
98 
99     out = project.getProperty(RUN_EXEC_TASK_OUTPUT);
100     if (!isNullString(out)) {
101       System.out.println(out);
102     }
103 
104     out = project.getProperty(RUN_EXEC_TASK_ERROR);
105     if (!isNullString(out)) {
106       if (debug>1 && out.equals(Messages.getString("RSSFeedPublisherTask.CVSWarning"))) { //$NON-NLS-1$
107         System.out.println(out);
108       } else if (!out.equals(Messages.getString("RSSFeedPublisherTask.CVSWarning"))) { //$NON-NLS-1$
109         System.err.println(Messages.getString("RSSFeedPublisherTask.Error") + SP + out); //$NON-NLS-1$
110       }
111     }
112   }
113 
114   /**
115    * Copies all bytes in the given source stream to the given destination
116    * stream. Neither streams are closed.
117    *
118    * From: org.eclipse.emf/tests/org.eclipse.emf.test.build/src/org/eclipse/emf/test/build/FileTool.java,v 1.2
119    *
120    * @param source
121    *            the given source stream
122    * @param destination
123    *            the given destination stream
124    */
transferData(InputStream source, OutputStream destination)125   public static void transferData(InputStream source, OutputStream destination) throws IOException
126   {
127     int bytesRead = 0;
128     while (bytesRead != -1)
129     {
130       bytesRead = source.read(buffer, 0, buffer.length);
131       if (bytesRead != -1)
132       {
133         destination.write(buffer, 0, bytesRead);
134       }
135     }
136   }
137 
isNullString(String str)138   public static boolean isNullString(String str)
139   {
140     return str==null||"".equals(str); //$NON-NLS-1$
141   }
142 
setDebug(int debug)143   public void setDebug(int debug)
144   {
145     this.debug = debug;
146   }
147 
148 }