1402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*******************************************************************************
2402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Copyright (c) 2005, 2006 IBM Corporation and others.
3402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * All rights reserved. This program and the accompanying materials
4402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * are made available under the terms of the Eclipse Public License v1.0
5402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * which accompanies this distribution, and is available at
6402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * http://www.eclipse.org/legal/epl-v10.html
7402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll *
8402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Contributors:
9402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll *     IBM Corporation - initial API and implementation
10402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll *******************************************************************************/
11402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpackage org.eclipse.releng.util.rss;
12402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
13402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.io.File;
14402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.io.IOException;
15402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.io.InputStream;
16402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.io.OutputStream;
17402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
18402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.apache.tools.ant.Project;
19402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.apache.tools.ant.taskdefs.ExecTask;
20402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.apache.tools.ant.types.Commandline.Argument;
21402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
22402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/**
23402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll *
24402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll *    Helper methods
25402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll *
26402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @author nickb
27402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll *
28402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
29402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic class RSSFeedUtil {
30402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
31402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String SP = " "; //$NON-NLS-1$
32402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static final String CL = ":"; //$NON-NLS-1$
33402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  public static final String EXPECTED_RESULT = "0"; //$NON-NLS-1$
34402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
35402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  public static final String RUN_EXEC_TASK_ERROR = "runExecTask.Error"; //$NON-NLS-1$
36402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  public static final String RUN_EXEC_TASK_OUTPUT = "runExecTask.Output"; //$NON-NLS-1$
37402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  public static final String RUN_EXEC_TASK_RESULT = "runExecTask.Result"; //$NON-NLS-1$
38402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
39402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private int debug = 0;
40402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
41402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  /**
42402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll   * A buffer.
43402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll   */
44402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private static byte[] buffer = new byte [8192];
45402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
46402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  public ExecTask runExecTask(String executable, String commandline, String dir)
47402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
48402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (dir==null) {
49402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      dir = ".";  //$NON-NLS-1$
50402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
51402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
52402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    ExecTask exec = new ExecTask();
53402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    exec.setExecutable(executable);
54402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    exec.setResolveExecutable(true);
55402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    exec.setDir((new File(dir)).getAbsoluteFile());
56402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    Project project = new Project(); project.setName(executable);
57402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    exec.setProject(project);
58402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    exec.setFailIfExecutionFails(true);
59402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    exec.setFailonerror(true);
60402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    exec.setErrorProperty(RUN_EXEC_TASK_ERROR);
61402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    exec.setOutputproperty(RUN_EXEC_TASK_OUTPUT);
62402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    exec.setResultProperty(RUN_EXEC_TASK_RESULT);
63402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    exec.setLogError(true);
64402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
65402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (commandline != null || "".equals(commandline)) { //$NON-NLS-1$
66402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      Argument execArg = exec.createArg();
67402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      execArg.setLine(commandline);
68402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
69402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    try
70402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
71402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      if (debug>0) {
72402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        System.out.println(Messages.getString("RSSFeedPublisherTask.Execute") + SP + executable + (commandline==null?"":SP + commandline)); //$NON-NLS-1$ //$NON-NLS-2$
73402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      }
74402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      exec.execute();
75402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      handleExecTaskReturn(project);
76402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
77402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    catch (Exception e)
78402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
79402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      handleExecTaskReturn(project);
80402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      System.err.println(Messages.getString("RSSFeedPublisherTask.ForProject") + SP + project.getName() + CL); //$NON-NLS-1$
81402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      e.printStackTrace();
82402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
83402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
84402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    return exec;
85402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
86402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
87402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
88402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  private void handleExecTaskReturn(Project project)
89402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
90402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    String out = null;
91402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
92402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    out = project.getProperty(RUN_EXEC_TASK_RESULT);
93402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (debug>1) {
94402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      if (!isNullString(out) && !EXPECTED_RESULT.equals(out)) {
95402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        System.err.println(Messages.getString("RSSFeedPublisherTask.Result") + SP + out); //$NON-NLS-1$
96402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      }
97402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
98402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
99402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    out = project.getProperty(RUN_EXEC_TASK_OUTPUT);
100402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (!isNullString(out)) {
101402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      System.out.println(out);
102402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
103402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
104402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    out = project.getProperty(RUN_EXEC_TASK_ERROR);
105402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (!isNullString(out)) {
106402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      if (debug>1 && out.equals(Messages.getString("RSSFeedPublisherTask.CVSWarning"))) { //$NON-NLS-1$
107402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        System.out.println(out);
108402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      } else if (!out.equals(Messages.getString("RSSFeedPublisherTask.CVSWarning"))) { //$NON-NLS-1$
109402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        System.err.println(Messages.getString("RSSFeedPublisherTask.Error") + SP + out); //$NON-NLS-1$
110402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      }
111402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
112402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
113402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
114402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  /**
115402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll   * Copies all bytes in the given source stream to the given destination
116402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll   * stream. Neither streams are closed.
117402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll   *
118402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll   * From: org.eclipse.emf/tests/org.eclipse.emf.test.build/src/org/eclipse/emf/test/build/FileTool.java,v 1.2
119402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll   *
120402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll   * @param source
121402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll   *            the given source stream
122402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll   * @param destination
123402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll   *            the given destination stream
124402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll   */
125402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  public static void transferData(InputStream source, OutputStream destination) throws IOException
126402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
127402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    int bytesRead = 0;
128402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    while (bytesRead != -1)
129402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    {
130402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      bytesRead = source.read(buffer, 0, buffer.length);
131402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      if (bytesRead != -1)
132402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      {
133402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        destination.write(buffer, 0, bytesRead);
134402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll      }
135402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
136402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
137402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
138402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  public static boolean isNullString(String str)
139402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
140402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    return str==null||"".equals(str); //$NON-NLS-1$
141402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
142402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
143402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  public void setDebug(int debug)
144402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  {
145402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    this.debug = debug;
146402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll  }
147402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
148402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}