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}