From 46632032bc02d6e0c4e016769243767e8239cd92 Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Tue, 15 Mar 2005 14:54:32 +0000 Subject: [PATCH] Use DOM utility classes git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@277976 13f79535-47bb-0310-9956-ffa450edef68 --- .../ant/taskdefs/cvslib/ChangeLogWriter.java | 57 ++++++++++++------- .../tools/ant/taskdefs/cvslib/CvsTagDiff.java | 54 ++++++++++-------- 2 files changed, 66 insertions(+), 45 deletions(-) diff --git a/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogWriter.java b/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogWriter.java index da607245b..3fb4486ae 100644 --- a/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogWriter.java +++ b/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogWriter.java @@ -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(""); - output.println(""); + 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(""); + 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"); - output.println("\t\t" + OUTPUT_DATE.format(entry.getDate()) - + ""); - output.println("\t\t"); - output.println("\t\t"); + 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"); - output.println("\t\t\t"); - output.println("\t\t\t" + file.getRevision() - + ""); + 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" + previousRevision - + ""); + DOMUtils.appendTextElement(f, "prevrevision", + previousRevision); } - - output.println("\t\t"); } - output.println("\t\t"); - output.println("\t"); + DOMUtils.appendCDATAElement(ent, "msg", entry.getComment()); + DOM_WRITER.write(ent, output, 1, "\t"); } } diff --git a/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagDiff.java b/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagDiff.java index 993233c11..8cb49a50d 100644 --- a/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagDiff.java +++ b/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagDiff.java @@ -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(""); - writer.print(""); + 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(""); + 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 PrintWriter value * @param entry a CvsTagEntry value */ - private void writeTagEntry(PrintWriter writer, CvsTagEntry entry) { - writer.println("\t"); - writer.println("\t\t"); - writer.println("\t\t\t" + entry.getFile() + ""); - if (entry.getRevision() != null) { - writer.println("\t\t\t" + entry.getRevision() - + ""); - } + 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" - + entry.getPreviousRevision() + ""); + DOMUtils.appendTextElement(f, "prevrevision", + entry.getPreviousRevision()); } - writer.println("\t\t"); - writer.println("\t"); + DOM_WRITER.write(ent, writer, 1, "\t"); } /**