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.generators.rss;
12 
13 import java.io.File;
14 import java.io.FileWriter;
15 import java.io.IOException;
16 import java.io.PrintStream;
17 import java.io.PrintWriter;
18 import java.util.Date;
19 
20 import org.apache.tools.ant.BuildException;
21 import org.apache.tools.ant.Task;
22 import org.apache.tools.ant.util.DateUtils;
23 
24 import org.eclipse.releng.util.rss.Messages;
25 import org.eclipse.releng.util.rss.RSSFeedUtil;
26 
27 //TODO: bug - can't run CreateFeed and AddEntry back when debug=2
28 
29 /**
30  * Parameters:
31  *   debug - more output to console - eg., 0|1|2
32  *
33  *   file - path to the XML file that will be created - eg., /path/to/file.to.create.xml
34  *   project - project's name, used to label the feed - eg., Eclipse, EMF, UML2
35  *   feedURL - URL of the feed where it will be published - eg., http://servername/path/to/feed.xml
36  * @author nickb
37  *
38  */
39 public class RSSFeedCreateFeedTask extends Task {
40 
41   private int debug = 0;
42 
43   //$ANALYSIS-IGNORE codereview.java.rules.portability.RulePortabilityLineSeparators
44   private static final String NL="\n"; //$NON-NLS-1$
45   private static final String NS = ""; //$NON-NLS-1$
46   private static final String SP = " "; //$NON-NLS-1$
47 
48   //required fields
49   private File file;
50   private String project;
51   private String feedURL;
52 
53   //optional
setDebug(int debug)54   public void setDebug(int debug) { this.debug = debug; }
55 
56   //required fields
setFile(String file)57   public void setFile(String file) {
58     if (isNullString(file))
59     { System.err.println(Messages.getString("RSSFeedCommon.FileError")); }  //$NON-NLS-1$
60     else
61     { this.file = new File(file); }
62   }
setProject(String project)63   public void setProject(String project) {
64     if (isNullString(project))
65     { System.err.println(Messages.getString("RSSFeedCommon.ProjectError")); }  //$NON-NLS-1$
66     else
67     { this.project = project; }
68   }
setFeedURL(String feedURL)69   public void setFeedURL(String feedURL) {
70     if (isNullString(feedURL))
71     { System.err.println(Messages.getString("RSSFeedCommon.FeedURLError")); }  //$NON-NLS-1$
72     else
73     { this.feedURL = feedURL; }
74   }
75 
76   // The method executing the task
execute()77   public void execute() throws BuildException {
78     if (debug>0) {
79       System.out.println(Messages.getString("RSSFeedCreateFeedTask.Creating") + project + SP + Messages.getString("RSSFeedCommon.RSSFeedFile") + SP + file.toString() + ", " + Messages.getString("RSSFeedCommon.ToBePublishedAt") + feedURL); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
80     }
81     writeFeedXML(createFeedXML(),file);
82     if (debug>1) {
83       writeFeedXML(createFeedXML(),System.out);
84     }
85   }
86 
createFeedXML()87   private String createFeedXML() {
88     StringBuffer sb = new StringBuffer();
89     sb.append("<?xml-stylesheet href=\"http://www.blogger.com/styles/atom.css\" type=\"text/css\"?>" + NL); //$NON-NLS-1$
90     sb.append("<feed xmlns=\"http://www.w3.org/2005/Atom\">" + NL); //$NON-NLS-1$
91     sb.append("  <title>" + project + SP + Messages.getString("RSSFeedCreateFeedTask.Builds") + "</title>" + NL); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
92     sb.append("  <link rel=\"self\" type=\"application/atom+xml\" href=\"" + (!isNullString(feedURL)?feedURL:NS) + "\"/>" + NL); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
93     sb.append("  <updated>" + getTimestamp() + "</updated>" + NL); //$NON-NLS-1$ //$NON-NLS-2$
94     sb.append("  <author>" + NL); //$NON-NLS-1$
95     sb.append("    <name>" + (!isNullString(project)?project + SP : NS) + Messages.getString("RSSFeedCreateFeedTask.BuildTeam") + "</name>" + NL); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
96     sb.append("  </author>" + NL); //$NON-NLS-1$
97     sb.append("  <id>" + (!isNullString(feedURL)?feedURL:NS) + "</id>" + NL); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
98     sb.append("</feed>" + NL + NL); //$NON-NLS-1$
99     return sb.toString();
100   }
101 
writeFeedXML(String feedXML,File file)102   private void writeFeedXML(String feedXML,File file) {
103     try{
104       PrintWriter writer = new PrintWriter(new FileWriter(file));
105       writer.println(feedXML);
106       writer.flush();
107       writer.close();
108     } catch (IOException e){
109       System.out.println(Messages.getString("RSSFeedCreateFeedTask.UnableToWriteToFile")+file); //$NON-NLS-1$
110     }
111 
112   }
113 
writeFeedXML(String feedXML, PrintStream ps)114   private void writeFeedXML(String feedXML, PrintStream ps) {
115     PrintWriter writer = new PrintWriter(ps);
116     writer.println(feedXML);
117     writer.flush();
118     writer.close();
119   }
120 
getTimestamp()121   private String getTimestamp() { // eg., 2006-04-10T20:40:08Z
122     return DateUtils.format(new Date(), DateUtils.ISO8601_DATETIME_PATTERN) + "Z";  //$NON-NLS-1$
123   }
124 
isNullString(String str)125   private static boolean isNullString(String str)
126   {
127     return RSSFeedUtil.isNullString(str);
128   }
129 
130 }