git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@277976 13f79535-47bb-0310-9956-ffa450edef68master
@@ -16,11 +16,18 @@ | |||
*/ | |||
package org.apache.tools.ant.taskdefs.cvslib; | |||
import java.io.IOException; | |||
import java.io.PrintWriter; | |||
import java.text.SimpleDateFormat; | |||
import java.util.Enumeration; | |||
import java.util.TimeZone; | |||
import org.apache.tools.ant.util.DOMElementWriter; | |||
import org.apache.tools.ant.util.DOMUtils; | |||
import org.w3c.dom.Document; | |||
import org.w3c.dom.Element; | |||
/** | |||
* Class used to generate an XML changelog. | |||
* | |||
@@ -32,6 +39,8 @@ public class ChangeLogWriter { | |||
/** output format for times written to xml file */ | |||
private static final SimpleDateFormat OUTPUT_TIME | |||
= new SimpleDateFormat("HH:mm"); | |||
/** stateless helper for writing the XML document */ | |||
private static final DOMElementWriter DOM_WRITER = new DOMElementWriter(); | |||
static { | |||
TimeZone utc = TimeZone.getTimeZone("UTC"); | |||
@@ -47,55 +56,59 @@ public class ChangeLogWriter { | |||
*/ | |||
public void printChangeLog(final PrintWriter output, | |||
final CVSEntry[] entries) { | |||
try { | |||
output.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); | |||
output.println("<changelog>"); | |||
Document doc = DOMUtils.newDocument(); | |||
Element root = doc.createElement("changelog"); | |||
DOM_WRITER.openElement(root, output, 0, "\t"); | |||
output.println(); | |||
for (int i = 0; i < entries.length; i++) { | |||
final CVSEntry entry = entries[i]; | |||
printEntry(output, entry); | |||
printEntry(doc, output, entry); | |||
} | |||
output.println("</changelog>"); | |||
DOM_WRITER.closeElement(root, output, 0, "\t", true); | |||
output.flush(); | |||
output.close(); | |||
} catch (IOException e) { | |||
throw new org.apache.tools.ant.BuildException(e); | |||
} | |||
} | |||
/** | |||
* Print out an individual entry in changelog. | |||
* | |||
* @param doc Document used to create elements. | |||
* @param entry the entry to print | |||
* @param output writer to which to send output. | |||
*/ | |||
private void printEntry(final PrintWriter output, final CVSEntry entry) { | |||
output.println("\t<entry>"); | |||
output.println("\t\t<date>" + OUTPUT_DATE.format(entry.getDate()) | |||
+ "</date>"); | |||
output.println("\t\t<time>" + OUTPUT_TIME.format(entry.getDate()) | |||
+ "</time>"); | |||
output.println("\t\t<author><![CDATA[" + entry.getAuthor() | |||
+ "]]></author>"); | |||
private void printEntry(Document doc, final PrintWriter output, | |||
final CVSEntry entry) throws IOException { | |||
Element ent = doc.createElement("entry"); | |||
DOMUtils.appendTextElement(ent, "date", | |||
OUTPUT_DATE.format(entry.getDate())); | |||
DOMUtils.appendTextElement(ent, "time", | |||
OUTPUT_TIME.format(entry.getDate())); | |||
DOMUtils.appendCDATAElement(ent, "author", entry.getAuthor()); | |||
final Enumeration enumeration = entry.getFiles().elements(); | |||
while (enumeration.hasMoreElements()) { | |||
final RCSFile file = (RCSFile) enumeration.nextElement(); | |||
output.println("\t\t<file>"); | |||
output.println("\t\t\t<name><![CDATA[" + file.getName() + "]]></name>"); | |||
output.println("\t\t\t<revision>" + file.getRevision() | |||
+ "</revision>"); | |||
Element f = DOMUtils.createChildElement(ent, "file"); | |||
DOMUtils.appendCDATAElement(f, "name", file.getName()); | |||
DOMUtils.appendTextElement(f, "revision", file.getRevision()); | |||
final String previousRevision = file.getPreviousRevision(); | |||
if (previousRevision != null) { | |||
output.println("\t\t\t<prevrevision>" + previousRevision | |||
+ "</prevrevision>"); | |||
DOMUtils.appendTextElement(f, "prevrevision", | |||
previousRevision); | |||
} | |||
output.println("\t\t</file>"); | |||
} | |||
output.println("\t\t<msg><![CDATA[" + entry.getComment() + "]]></msg>"); | |||
output.println("\t</entry>"); | |||
DOMUtils.appendCDATAElement(ent, "msg", entry.getComment()); | |||
DOM_WRITER.write(ent, output, 1, "\t"); | |||
} | |||
} | |||
@@ -30,8 +30,13 @@ import java.util.StringTokenizer; | |||
import org.apache.tools.ant.BuildException; | |||
import org.apache.tools.ant.Project; | |||
import org.apache.tools.ant.taskdefs.AbstractCvsTask; | |||
import org.apache.tools.ant.util.DOMElementWriter; | |||
import org.apache.tools.ant.util.DOMUtils; | |||
import org.apache.tools.ant.util.FileUtils; | |||
import org.w3c.dom.Document; | |||
import org.w3c.dom.Element; | |||
/** | |||
* Examines the output of cvs rdiff between two tags. | |||
* | |||
@@ -70,6 +75,9 @@ public class CvsTagDiff extends AbstractCvsTask { | |||
*/ | |||
private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); | |||
/** stateless helper for writing the XML document */ | |||
private static final DOMElementWriter DOM_WRITER = new DOMElementWriter(); | |||
/** | |||
* Token to identify the word file in the rdiff log | |||
*/ | |||
@@ -352,26 +360,27 @@ public class CvsTagDiff extends AbstractCvsTask { | |||
PrintWriter writer = new PrintWriter( | |||
new OutputStreamWriter(output, "UTF-8")); | |||
writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); | |||
writer.print("<tagdiff "); | |||
Document doc = DOMUtils.newDocument(); | |||
Element root = doc.createElement("tagdiff"); | |||
if (mystartTag != null) { | |||
writer.print("startTag=\"" + mystartTag + "\" "); | |||
root.setAttribute("startTag", mystartTag); | |||
} else { | |||
writer.print("startDate=\"" + mystartDate + "\" "); | |||
root.setAttribute("startDate", mystartDate); | |||
} | |||
if (myendTag != null) { | |||
writer.print("endTag=\"" + myendTag + "\" "); | |||
root.setAttribute("endTag", myendTag); | |||
} else { | |||
writer.print("endDate=\"" + myendDate + "\" "); | |||
root.setAttribute("endDate", myendDate); | |||
} | |||
writer.print("cvsroot=\"" + getCvsRoot() + "\" "); | |||
writer.print("package=\"" + mypackage + "\" "); | |||
writer.println(">"); | |||
root.setAttribute("cvsroot", getCvsRoot()); | |||
root.setAttribute("package", mypackage); | |||
DOM_WRITER.openElement(root, writer, 0, "\t"); | |||
writer.println(); | |||
for (int i = 0, c = entries.length; i < c; i++) { | |||
writeTagEntry(writer, entries[i]); | |||
writeTagEntry(doc, writer, entries[i]); | |||
} | |||
writer.println("</tagdiff>"); | |||
DOM_WRITER.closeElement(root, writer, 0, "\t", true); | |||
writer.flush(); | |||
writer.close(); | |||
} catch (UnsupportedEncodingException uee) { | |||
@@ -392,23 +401,22 @@ public class CvsTagDiff extends AbstractCvsTask { | |||
/** | |||
* Write a single entry to the given writer. | |||
* | |||
* @param doc Document used to create elements. | |||
* @param writer a <code>PrintWriter</code> value | |||
* @param entry a <code>CvsTagEntry</code> value | |||
*/ | |||
private void writeTagEntry(PrintWriter writer, CvsTagEntry entry) { | |||
writer.println("\t<entry>"); | |||
writer.println("\t\t<file>"); | |||
writer.println("\t\t\t<name>" + entry.getFile() + "</name>"); | |||
if (entry.getRevision() != null) { | |||
writer.println("\t\t\t<revision>" + entry.getRevision() | |||
+ "</revision>"); | |||
} | |||
private void writeTagEntry(Document doc, PrintWriter writer, | |||
CvsTagEntry entry) | |||
throws IOException { | |||
Element ent = doc.createElement("entry"); | |||
Element f = DOMUtils.createChildElement(ent, "file"); | |||
DOMUtils.appendCDATAElement(f, "name", entry.getFile()); | |||
DOMUtils.appendTextElement(f, "revision", entry.getRevision()); | |||
if (entry.getPreviousRevision() != null) { | |||
writer.println("\t\t\t<prevrevision>" | |||
+ entry.getPreviousRevision() + "</prevrevision>"); | |||
DOMUtils.appendTextElement(f, "prevrevision", | |||
entry.getPreviousRevision()); | |||
} | |||
writer.println("\t\t</file>"); | |||
writer.println("\t</entry>"); | |||
DOM_WRITER.write(ent, writer, 1, "\t"); | |||
} | |||
/** | |||