You totally blew away my changes.  Please try again or rollback and
I'll take care of it.

[EMAIL PROTECTED] writes:

> jon         01/08/21 14:21:21
> 
>   Modified:    util/src/java/org/apache/commons/util
>                         LockableFileWriter.java
>   Log:
>   next implementation of LFW
>   
>   fixes a bunch of bugs and adds a few features and potential performance
>   improvements.
>   
>   Revision  Changes    Path
>   1.2       +74 -45    
>jakarta-commons-sandbox/util/src/java/org/apache/commons/util/LockableFileWriter.java
>   
>   Index: LockableFileWriter.java
>   ===================================================================
>   RCS file: 
>/home/cvs/jakarta-commons-sandbox/util/src/java/org/apache/commons/util/LockableFileWriter.java,v
>   retrieving revision 1.1
>   retrieving revision 1.2
>   diff -u -r1.1 -r1.2
>   --- LockableFileWriter.java 2001/08/21 20:48:47     1.1
>   +++ LockableFileWriter.java 2001/08/21 21:21:21     1.2
>   @@ -60,99 +60,128 @@
>    import java.io.IOException;
>    
>    /**
>   - * A <code>FileWriter</code> that will create and honor lock files to
>   - * allow simple cross thread file lock handling.
>   + * FileWriter that will create and honor lock files to allow simple 
>   + * cross thread file lock handling. By default, append is false.
>     *
>   + * @author <a href="mailto:[EMAIL PROTECTED]";>Jon S. Stevens</a>
>     * @author <a href="mailto:[EMAIL PROTECTED]";>Michael Salmon</a>
>   - * @author <a href="mailto:[EMAIL PROTECTED]";>Daniel Rall</a>
>   - * @version $Id: LockableFileWriter.java,v 1.1 2001/08/21 20:48:47 dlr Exp $
>   + * @version $Id: LockableFileWriter.java,v 1.2 2001/08/21 21:21:21 jon Exp $
>     */
>    public class LockableFileWriter extends Writer
>    {
>   -    private static final String LCK = ".lck";
>   -
>   +    private File fileName = null;
>   +    private static File lockDir = new File(System.getProperty("java.io.tmpdir"));
>        private File lockFile = null;
>   +    private final String LCK = ".lck";
>    
>        private FileWriter writer = null;
>   -
>   -    private String fileName = null;
>   -
>   -    private String lockDir = null;
>   +    private boolean append = false;
>   +    private static final String DIR_SEPERATOR = 
>System.getProperty("file.seperator");
>    
>   -    public LockableFileWriter (String fileName)
>   +    /**
>   +     * Write to a file. Uses java.io.tmpdir System property for the
>   +     * location of the temp directory to write the lock files to.
>   +     * append is false.
>   +     */
>   +    public LockableFileWriter(String fileName)
>            throws IOException
>        {
>   -        this.fileName = fileName;
>   -        createLock();
>   -        this.writer = new FileWriter(fileName);
>   +        this(fileName, false);
>        }
>    
>   -    public LockableFileWriter (String fileName, String lockDir)
>   +    /**
>   +     * Write to a file.
>   +     */
>   +    public LockableFileWriter(String fileName, String lockDir)
>            throws IOException
>        {
>   -        this.fileName = fileName;
>   -        this.lockDir = lockDir;
>   -        createLock();
>   -        this.writer = new FileWriter(fileName);
>   +        this(new File(lockDir), lockDir);
>        }
>    
>   -    public LockableFileWriter (String fileName, boolean append)
>   +    public LockableFileWriter(String fileName, boolean append)
>            throws IOException
>        {
>   -        this.fileName = fileName;
>   -        createLock();
>   -        this.writer = new FileWriter(fileName, append);
>   +        this.append = append;
>   +        this.fileName = new File(lockDir, fileName);
>   +        init();
>        }
>    
>   -    public LockableFileWriter (String fileName, boolean append, String lockDir)
>   +    public LockableFileWriter(String fileName, boolean append, String lockDir)
>            throws IOException
>        {
>   -        this.fileName = fileName;
>   -        this.lockDir = lockDir;
>   -        createLock();
>   -        this.writer = new FileWriter(fileName, append);
>   +        this.append = append;
>   +        this.lockDir = new File(lockDir);
>   +        this.fileName = new File(lockDir, fileName);
>   +        init();
>        }
>    
>   -    public LockableFileWriter (File file)
>   +    public LockableFileWriter(File file)
>            throws IOException
>        {
>   -        this.fileName = file.getPath();
>   -        createLock();
>   -        this.writer = new FileWriter(file);
>   +        this.fileName = file;
>   +        init();
>        }
>        
>   -    public LockableFileWriter (File file, String lockDir)
>   +    public LockableFileWriter(File file, String lockDir)
>   +        throws IOException
>   +    {
>   +        this.fileName = file;
>   +        this.lockDir = new File(lockDir);
>   +        init();
>   +    }
>   +
>   +    private void init()
>            throws IOException
>        {
>   -        this.fileName = file.getPath();
>   -        this.lockDir = lockDir;
>   +        testLockDir();
>   +        this.lockFile = new File (lockDir, fileName.getName() + LCK);
>            createLock();
>   -        this.writer = new FileWriter(file);
>   +        this.writer = new FileWriter(fileName.getAbsolutePath(), this.append);
>        }
>    
>   +    private void testLockDir()
>   +        throws IOException
>   +    {
>   +        if (!lockDir.exists())
>   +        {
>   +            throw new IOException(
>   +                "Could not find lockDir: " + lockDir.getAbsolutePath());
>   +        }
>   +        if (!lockDir.canWrite())
>   +        {
>   +            throw new IOException(
>   +                "Could not write to lockDir: " + lockDir.getAbsolutePath());
>   +        }
>   +    }
>   +
>        private void createLock()
>            throws IOException
>        {
>   -        synchronized (LockableFileWriter.class)
>   +        synchronized(LockFileWriter.class)
>            {
>   -            File lock = new File(lockDir, fileName + LCK);
>   -            if (lock.exists())
>   +            if (!lockFile.createNewFile())
>                {
>   -                throw new IOException("Can't write file, lock " +
>   -                                      lock.getName() + " exists");
>   +                throw new IOException("Can't write file, " + 
>   +                    lockFile.getAbsolutePath() + " exists");
>                }
>   -            lockFile = lock;
>   +            lockFile.deleteOnExit();
>            }
>        }
>    
>        public void close()
>            throws IOException
>        {
>   -        writer.close();
>   -        lockFile.delete();
>   +        try
>   +        {
>   +            writer.close();
>   +        }
>   +        finally
>   +        {
>   +            lockFile.delete();
>   +        }
>        }
>    
>   -    public void write(char[] cbuf, int off, int len)
>   +    public void write(char [] cbuf, int off, int len)
>            throws IOException
>        {
>            writer.write(cbuf, off, len);
>   
>   
>   

Reply via email to