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.services.rss; 12402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 13402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.io.File; 14402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.io.FileInputStream; 15402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.io.FileNotFoundException; 16402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.io.FileOutputStream; 17402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.io.IOException; 18402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.net.MalformedURLException; 19402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.net.URL; 20402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 21402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.apache.tools.ant.BuildException; 22402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.apache.tools.ant.Task; 23402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.apache.tools.ant.taskdefs.ExecTask; 24402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 25402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.releng.generators.rss.RSSFeedUpdateEntryTask; 26402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.releng.util.rss.Messages; 27402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.releng.util.rss.RSSFeedUtil; 28402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 29402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/** 30402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Parameters: 31402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * debug - more output to console - eg., 0|1|2 32402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * 33402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * file - path to the XML file that will be published - eg., /path/to/file.to.publish.xml 34402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * feedURL - URL of the feed where it will be published - eg., http://servername/path/to/feed.xml 35402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * 36402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * feedWatchActions - semi-comma-separated list of triplets: 37402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * (Xpath to watch for); (what to execute if condition is met); (commandline args to the executable)... 38402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * eg., to watch for ANY change in the feed and respond by sending email 39402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * /*[name() = 'feed']/*[name() = 'updated']/text(); sendEmailAlert.sh; null 40402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * eg., to watch for ANY changes in the current build 41402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * //*[name() = 'entry'][1]/*[name() = 'updated']/text(); sendEmailAlert.sh; null 42402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * eg., to watch for changes in the current build's performance test results on linux-gtk 43402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * //*[name() = 'entry'][1]/*[name() = 'summary']/*[@type = 'performance'][1]/*[name() = 'results'][@os = 'linux'][@ws = 'gtk']/text(); sendEmailAlert.sh; null 44402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * 45402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @author nickb 46402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * 47402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 48402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic class RSSFeedWatcherTask extends Task { 49402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 50402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private int debug = 0; 51402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 52402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private static final String CL = ":"; //$NON-NLS-1$ 53402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private static final String DOT = "."; //$NON-NLS-1$ 54402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private static final String NS = ""; //$NON-NLS-1$ 55402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private static final String SP = " "; //$NON-NLS-1$ 56402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 57402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private static final String splitter = "[;\t\r\n]+"; //$NON-NLS-1$ 58402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 59402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private static final String feedWatchActionError = "feedWatchAction.Error"; //$NON-NLS-1$ 60402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private static final String feedWatchActionOuput = "feedWatchAction.Output"; //$NON-NLS-1$ 61402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private static final String feedWatchActionResult = "feedWatchAction.Result"; //$NON-NLS-1$ 62402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private static final String feedWatchActionNewValue = "feedWatchAction.NewValue"; //$NON-NLS-1$ 63402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private static final String feedWatchActionOldValue = "feedWatchAction.OldValue"; //$NON-NLS-1$ 64402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private static final String feedWatchActionTheValue = "feedWatchAction.TheValue"; //$NON-NLS-1$ 65402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 66402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private static final RSSFeedUtil util = new RSSFeedUtil(); 67402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 68402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll //required fields 69402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private File file; 70402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private File tmpFile; 71402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private String feedURL; 72402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private String[] feedWatchActions = new String[] {}; 73402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 74402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll //optional 75402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public void setDebug(int debug) { this.debug = debug; } 76402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 77402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll //required 78402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public void setFile(String file) { 79402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (!isNullString(file)) { 80402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.file = new File(file); 81402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.tmpFile = new File(file + ".tmp"); //$NON-NLS-1$ 82402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 83402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 84402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public void setFeedURL(String feedURL) { 85402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (isNullString(feedURL)) 86402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { System.err.println(Messages.getString("RSSFeedCommon.FeedURLError")); } //$NON-NLS-1$ 87402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll else 88402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { this.feedURL = feedURL; } 89402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 90402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public void setFeedWatchActions(String feedWatchActions) { 91402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll int missingActions = 0; 92402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (!isNullString(feedWatchActions)) { 93402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.feedWatchActions = feedWatchActions.split(splitter); 94402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll missingActions = this.feedWatchActions.length % 3; if (missingActions > 0) { missingActions = 3 - missingActions; } 95402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 96402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (missingActions > 0) { 97402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll for (int i = 0; i < missingActions; i++) 98402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 99402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println((i==0 && missingActions==2 ? Messages.getString("RSSFeedWatcherTask.WarningNoScriptAction") : Messages.getString("RSSFeedWatcherTask.WarningNoCommandlineParams")) + SP + feedWatchActions ); //$NON-NLS-1$ //$NON-NLS-2$ 100402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll feedWatchActions += "; null"; //$NON-NLS-1$ 101402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 102402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.feedWatchActions = feedWatchActions.split(splitter); 103402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 104402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 105402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 106402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // The method executing the task 107402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public void execute() throws BuildException { 108402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (debug>0) { util.setDebug(debug); } 109402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (file==null || !file.exists() || !file.isFile()) { 110402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // if there's no local copy of the feed, get a copy, then exit with instructions 111402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll downloadFeed(file,debug>=0); 112402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println(Messages.getString("RSSFeedWatcherTask.PleaseRunThisTaskLater") + SP + file); //$NON-NLS-1$ 113402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println(Messages.getString("RSSFeedWatcherTask.ToTheLatestVersion") + SP + feedURL); //$NON-NLS-1$ 114402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } else { 115402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (feedWatchActions==null || feedWatchActions.length<1) { 116402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.err.println(Messages.getString("RSSFeedWatcherTask.ErrorNoWatchActions")); //$NON-NLS-1$ 117402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } else { 118402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll checkFeed(); 119402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 120402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 121402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 122402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 123402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private void checkFeed() { 124402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (file.isDirectory()) { 125402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.err.println(Messages.getString("RSSFeedWatcherTask.ErrorDestinationFileIsADirectory")); //$NON-NLS-1$ 126402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } else { 127402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll downloadFeed(tmpFile,debug>0); 128402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 129402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 130402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (tmpFile.isFile()) { 131402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (debug>0) { System.out.println(Messages.getString("RSSFeedWatcherTask.Compare") + SP + file + Messages.getString("RSSFeedWatcherTask.with") + tmpFile + CL); } //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 132402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 133402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll RSSFeedUpdateEntryTask oldFeedWatcher = null; 134402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll RSSFeedUpdateEntryTask newFeedWatcher = null; 135402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll int j=0; 136402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 137402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll for (int i = 0; i < feedWatchActions.length; i+=3) 138402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 139402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String xpath = feedWatchActions[i].trim(); 140402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String action = feedWatchActions[i+1].trim(); 141402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String commandline = feedWatchActions[i+2].trim(); 142402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 143402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll oldFeedWatcher = new RSSFeedUpdateEntryTask(); 144402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll oldFeedWatcher.setFile(file.toString()); 145402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (debug>0) { oldFeedWatcher.setDebug(debug); } 146402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll oldFeedWatcher.setXpath(xpath); 147402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll oldFeedWatcher.execute(); 148402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 149402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (oldFeedWatcher.getFoundNode() != null) { 150402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll newFeedWatcher = new RSSFeedUpdateEntryTask(); 151402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll newFeedWatcher.setFile(tmpFile.toString()); 152402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (debug>0) { newFeedWatcher.setDebug(debug); } 153402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll newFeedWatcher.setXpath(xpath); 154402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll newFeedWatcher.execute(); 155402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 156402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String oldContent = oldFeedWatcher.getFoundNode().getTextContent(); 157402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String newContent = newFeedWatcher.getFoundNode().getTextContent(); 158402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 159402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (debug>1) { 160402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println(Messages.getString("RSSFeedWatcherTask.GotOldNodeContents") + CL + SP + oldContent); //$NON-NLS-1$ 161402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println(Messages.getString("RSSFeedWatcherTask.GotNewNodeContents") + CL + SP + newContent); //$NON-NLS-1$ 162402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 163402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 164402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (!"null".equals(action)) { //$NON-NLS-1$ 165402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll commandline = 166402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll (debug>0?"-debug " + debug + SP:NS) + ("null".equals(commandline)?NS:commandline) + //$NON-NLS-1$ //$NON-NLS-2$ 167402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll " -feedURL " + feedURL + //$NON-NLS-1$ 168402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll " -xpath \"" + xpath + "\"" + //$NON-NLS-1$ //$NON-NLS-2$ 169402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll " -oldvalue \"" + oldContent + "\"" + //$NON-NLS-1$ //$NON-NLS-2$ 170402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll " -newvalue \"" + newContent + "\""; //$NON-NLS-1$ //$NON-NLS-2$ 171402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 172402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 173402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // store actual value - either the changed value or the original value (if unchanged) 174402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.getProject().setProperty(feedWatchActionTheValue + DOT + j,!isNullString(newContent)?newContent:oldContent); 175402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 176402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (newFeedWatcher.getFoundNode() == null || // changed from exists to not exists, or 177402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll !oldContent.equals(newContent) // node has changed 178402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll ) { 179402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // collect property from newNode and pass it to THIS task so that the local ant script can see it 180402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (!isNullString(oldContent)) { this.getProject().setProperty(feedWatchActionOldValue + DOT + j,oldContent); } 181402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (!isNullString(newContent)) { this.getProject().setProperty(feedWatchActionNewValue + DOT + j,newContent); } 182402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 183402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (!"null".equals(action)) { //$NON-NLS-1$ 184402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println(Messages.getString("RSSFeedWatcherTask.RunExecTask") + CL + SP + action + SP + commandline); //$NON-NLS-1$ 185402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll ExecTask exec = util.runExecTask((new File(action)).getAbsolutePath(), commandline, null); 186402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 187402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // collect properties from exec task and pass them to THIS task so that the local ant script can see them 188402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String out = null; 189402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 190402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll out = exec.getProject().getProperty(RSSFeedUtil.RUN_EXEC_TASK_ERROR); 191402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (!isNullString(out)) { this.getProject().setProperty(feedWatchActionError + DOT + j, out); } 192402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 193402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll out = exec.getProject().getProperty(RSSFeedUtil.RUN_EXEC_TASK_RESULT); 194402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (!isNullString(out)) { this.getProject().setProperty(feedWatchActionOuput + DOT + j, out); } 195402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 196402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll out = exec.getProject().getProperty(RSSFeedUtil.RUN_EXEC_TASK_RESULT); 197402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (!RSSFeedUtil.EXPECTED_RESULT.equals(out)) { this.getProject().setProperty(feedWatchActionResult + DOT + j, out); } 198402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 199402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } else { 200402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println(Messages.getString("RSSFeedWatcherTask.NodeUnchanged")); //$NON-NLS-1$ 201402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 202402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } else { 203402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println(Messages.getString("RSSFeedWatcherTask.NodeNotFound")); //$NON-NLS-1$ 204402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 205402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll j++; 206402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 207402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 208402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll try 209402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 210402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll RSSFeedUtil.transferData(new FileInputStream(tmpFile), new FileOutputStream(file)); 211402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll tmpFile.deleteOnExit(); 212402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 213402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll catch (FileNotFoundException e) 214402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 215402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll e.printStackTrace(); 216402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 217402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll catch (IOException e) 218402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 219402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll e.printStackTrace(); 220402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 221402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 222402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 223402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 224402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private void downloadFeed(File destFile, boolean verbose) 225402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 226402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll try 227402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 228402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (verbose) { 229402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println(Messages.getString("RSSFeedWatcherTask.Download") + CL + SP + feedURL); //$NON-NLS-1$ 230402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println(Messages.getString("RSSFeedWatcherTask.To") + CL + SP + destFile + SP); //$NON-NLS-1$ 231402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 232402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll RSSFeedUtil.transferData((new URL(feedURL)).openStream(), new FileOutputStream(destFile)); 233402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (verbose) { 234402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println(Messages.getString("RSSFeedWatcherTask.Done")); //$NON-NLS-1$ 235402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println(SP); 236402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 237402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 238402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll catch (MalformedURLException e) 239402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 240402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll e.printStackTrace(); 241402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 242402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll catch (FileNotFoundException e) 243402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 244402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll e.printStackTrace(); 245402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 246402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll catch (IOException e) 247402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 248402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll e.printStackTrace(); 249402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 250402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 251402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 252402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private static boolean isNullString(String str) 253402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll { 254402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return RSSFeedUtil.isNullString(str); 255402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 256402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 257402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}