From f7c0a7741dae7278cf3ec00c0440548f188a2f59 Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Tue, 2 Apr 2002 08:42:44 +0000 Subject: [PATCH] Add method to FileUtils that emulates File.createNewFile (well, sort of) and use it in Touch as well as BuildNumber. Various JDK 1.1 issues. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@272157 13f79535-47bb-0310-9956-ffa450edef68 --- .../tools/ant/taskdefs/BuildNumber.java | 5 ++-- .../org/apache/tools/ant/taskdefs/Touch.java | 4 +-- .../tools/ant/taskdefs/cvslib/CVSEntry.java | 10 +++---- .../ant/taskdefs/cvslib/ChangeLogParser.java | 10 +++++-- .../ant/taskdefs/cvslib/ChangeLogTask.java | 2 +- .../ant/taskdefs/cvslib/ChangeLogWriter.java | 8 ++--- .../tools/ant/taskdefs/cvslib/RCSFile.java | 4 +-- .../org/apache/tools/ant/util/FileUtils.java | 30 +++++++++++++++++++ .../apache/tools/ant/util/FileUtilsTest.java | 10 +++++++ 9 files changed, 64 insertions(+), 19 deletions(-) diff --git a/src/main/org/apache/tools/ant/taskdefs/BuildNumber.java b/src/main/org/apache/tools/ant/taskdefs/BuildNumber.java index 57b19cf65..ef686e98b 100644 --- a/src/main/org/apache/tools/ant/taskdefs/BuildNumber.java +++ b/src/main/org/apache/tools/ant/taskdefs/BuildNumber.java @@ -60,6 +60,7 @@ import java.io.IOException; import java.util.Properties; import org.apache.tools.ant.Task; import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.util.FileUtils; /** * This is a basic task that can be used to track build numbers. @@ -125,7 +126,7 @@ public class BuildNumber output = new FileOutputStream( m_file ); final String header = "Build Number for ANT. Do not edit!"; - properties.store( output, header ); + properties.save( output, header ); } catch( final IOException ioe ) { @@ -230,7 +231,7 @@ public class BuildNumber { try { - m_file.createNewFile(); + FileUtils.newFileUtils().createNewFile(m_file); } catch( final IOException ioe ) { diff --git a/src/main/org/apache/tools/ant/taskdefs/Touch.java b/src/main/org/apache/tools/ant/taskdefs/Touch.java index f2d4e56fd..bbef8b6ab 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Touch.java +++ b/src/main/org/apache/tools/ant/taskdefs/Touch.java @@ -168,9 +168,7 @@ public class Touch extends Task { if (!file.exists()) { log("Creating "+file, Project.MSG_INFO); try { - FileOutputStream fos = new FileOutputStream(file); - fos.write(new byte[0]); - fos.close(); + fileUtils.createNewFile(file); } catch (IOException ioe) { throw new BuildException("Could not create "+file, ioe, location); diff --git a/src/main/org/apache/tools/ant/taskdefs/cvslib/CVSEntry.java b/src/main/org/apache/tools/ant/taskdefs/cvslib/CVSEntry.java index c622d2e88..04f0055dd 100644 --- a/src/main/org/apache/tools/ant/taskdefs/cvslib/CVSEntry.java +++ b/src/main/org/apache/tools/ant/taskdefs/cvslib/CVSEntry.java @@ -53,7 +53,7 @@ */ package org.apache.tools.ant.taskdefs.cvslib; -import java.util.ArrayList; +import java.util.Vector; import java.util.Date; /** @@ -68,7 +68,7 @@ class CVSEntry private Date m_date; private final String m_author; private final String m_comment; - private final ArrayList m_files = new ArrayList(); + private final Vector m_files = new Vector(); public CVSEntry( Date date, String author, String comment ) { @@ -79,12 +79,12 @@ class CVSEntry public void addFile( String file, String revision ) { - m_files.add( new RCSFile( file, revision ) ); + m_files.addElement( new RCSFile( file, revision ) ); } public void addFile( String file, String revision, String previousRevision ) { - m_files.add( new RCSFile( file, revision, previousRevision ) ); + m_files.addElement( new RCSFile( file, revision, previousRevision ) ); } Date getDate() @@ -102,7 +102,7 @@ class CVSEntry return m_comment; } - ArrayList getFiles() + Vector getFiles() { return m_files; } diff --git a/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogParser.java b/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogParser.java index 45eb04db9..5e3b74846 100644 --- a/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogParser.java +++ b/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogParser.java @@ -56,6 +56,7 @@ package org.apache.tools.ant.taskdefs.cvslib; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.Enumeration; import java.util.Hashtable; import java.util.Properties; @@ -109,8 +110,13 @@ class ChangeLogParser */ CVSEntry[] getEntrySetAsArray() { - final CVSEntry[] array = new CVSEntry[ m_entries.values().size() ]; - return (CVSEntry[])m_entries.values().toArray( array ); + final CVSEntry[] array = new CVSEntry[ m_entries.size() ]; + Enumeration enum = m_entries.elements(); + int i = 0; + while (enum.hasMoreElements()) { + array[i++] = (CVSEntry) enum.nextElement(); + } + return array; } /** diff --git a/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogTask.java b/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogTask.java index d4267f9fd..972f0da60 100644 --- a/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogTask.java +++ b/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogTask.java @@ -360,7 +360,7 @@ public class ChangeLogTask //Skip dates that are too late continue; } - results.add( cvsEntry ); + results.addElement( cvsEntry ); } final CVSEntry[] resultArray = new CVSEntry[ results.size() ]; 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 29591df0d..28d8a844f 100644 --- a/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogWriter.java +++ b/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogWriter.java @@ -55,7 +55,7 @@ package org.apache.tools.ant.taskdefs.cvslib; import java.io.PrintWriter; import java.text.SimpleDateFormat; -import java.util.Iterator; +import java.util.Enumeration; /** * Class used to generate an XML changelog. @@ -99,10 +99,10 @@ class ChangeLogWriter output.println( "\t\t" ); output.println( "\t\t" + entry.getAuthor() + "" ); - final Iterator iterator = entry.getFiles().iterator(); - while( iterator.hasNext() ) + final Enumeration enumeration = entry.getFiles().elements(); + while( enumeration.hasMoreElements() ) { - final RCSFile file = (RCSFile)iterator.next(); + final RCSFile file = (RCSFile)enumeration.nextElement(); output.println( "\t\t" ); output.println( "\t\t\t" + file.getName() + "" ); output.println( "\t\t\t" + file.getRevision() + "" ); diff --git a/src/main/org/apache/tools/ant/taskdefs/cvslib/RCSFile.java b/src/main/org/apache/tools/ant/taskdefs/cvslib/RCSFile.java index 2ab4cb2d1..c8bc7a3c3 100644 --- a/src/main/org/apache/tools/ant/taskdefs/cvslib/RCSFile.java +++ b/src/main/org/apache/tools/ant/taskdefs/cvslib/RCSFile.java @@ -62,8 +62,8 @@ package org.apache.tools.ant.taskdefs.cvslib; */ class RCSFile { - private final String m_name; - private final String m_revision; + private String m_name; + private String m_revision; private String m_previousRevision; RCSFile( final String name, final String rev ) diff --git a/src/main/org/apache/tools/ant/util/FileUtils.java b/src/main/org/apache/tools/ant/util/FileUtils.java index b90d68c37..417c25761 100644 --- a/src/main/org/apache/tools/ant/util/FileUtils.java +++ b/src/main/org/apache/tools/ant/util/FileUtils.java @@ -810,5 +810,35 @@ public class FileUtils { } return text; } + + /** + * Emulation of File.createNewFile for JDK 1.1 + * + *

This method does not guarantee that the + * operation is atomic.

+ * + * @since 1.21, Ant 1.5 + */ + public boolean createNewFile(File f) throws IOException { + if (f != null) { + if (f.exists()) { + return false; + } + + FileOutputStream fos = null; + try { + fos = new FileOutputStream(f); + fos.write(new byte[0]); + } finally { + if (fos != null) { + fos.close(); + } + } + + return true; + } + return false; + } + } diff --git a/src/testcases/org/apache/tools/ant/util/FileUtilsTest.java b/src/testcases/org/apache/tools/ant/util/FileUtilsTest.java index 5b7e01166..66dbaf5d2 100644 --- a/src/testcases/org/apache/tools/ant/util/FileUtilsTest.java +++ b/src/testcases/org/apache/tools/ant/util/FileUtilsTest.java @@ -372,6 +372,16 @@ public class FileUtilsTest extends TestCase { new File("docs.xml"))); } + /** + * Test createNewFile + */ + public void testCreateNewFile() throws IOException { + removeThis = new File("dummy"); + assertTrue(!removeThis.exists()); + fu.createNewFile(removeThis); + assertTrue(removeThis.exists()); + } + /** * adapt file separators to local conventions */