diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/file/Move.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/file/Move.java deleted file mode 100644 index 3d72024ba..000000000 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/file/Move.java +++ /dev/null @@ -1,306 +0,0 @@ -/* - * Copyright (C) The Apache Software Foundation. All rights reserved. - * - * This software is published under the terms of the Apache Software License - * version 1.1, a copy of which has been included with this distribution in - * the LICENSE.txt file. - */ -package org.apache.tools.ant.taskdefs.file; - -import java.io.File; -import java.io.IOException; -import java.util.Enumeration; -import java.util.Iterator; -import org.apache.avalon.excalibur.io.FileUtil; -import org.apache.myrmidon.api.TaskException; -import org.apache.tools.ant.types.FileSet; -import org.apache.tools.ant.types.FilterSetCollection; -import org.apache.tools.ant.util.FileUtils; - -/** - * Moves a file or directory to a new file or directory. By default, the - * destination is overwriten when existing. When overwrite is turned off, then - * files are only moved if the source file is newer than the destination file, - * or when the destination file does not exist.

- * - * Source files and directories are only deleted when the file or directory has - * been copied to the destination successfully. Filtering also works.

- * - * This implementation is based on Arnout Kuiper's initial design document, the - * following mailing list discussions, and the copyfile/copydir tasks.

- * - * @author Glenn McAllister glennm@ca.ibm.com - * - * @author Magesh Umasankar - */ -public class Move - extends Copy -{ - public Move() - { - setOverwrite( true ); - } - - /** - * Go and delete the directory tree. - * - * @param d Description of Parameter - */ - protected void deleteDir( File d ) - throws TaskException - { - String[] list = d.list(); - if( list == null ) - { - return; - }// on an io error list() can return null - - for( int i = 0; i < list.length; i++ ) - { - String s = list[ i ]; - File f = new File( d, s ); - if( f.isDirectory() ) - { - deleteDir( f ); - } - else - { - throw new TaskException( "UNEXPECTED ERROR - The file " + f.getAbsolutePath() + " should not exist!" ); - } - } - getLogger().debug( "Deleting directory " + d.getAbsolutePath() ); - if( !d.delete() ) - { - throw new TaskException( "Unable to delete directory " + d.getAbsolutePath() ); - } - } - - //************************************************************************ - // protected and private methods - //************************************************************************ - - protected void doFileOperations() - throws TaskException - { - //Attempt complete directory renames, if any, first. - if( getCompleteDirMap().size() > 0 ) - { - Enumeration e = getCompleteDirMap().keys(); - while( e.hasMoreElements() ) - { - File fromDir = (File)e.nextElement(); - File toDir = (File)getCompleteDirMap().get( fromDir ); - try - { - final String message = "Attempting to rename dir: " + fromDir + - " to " + toDir; - getLogger().debug( message ); - renameFile( fromDir, toDir, isFiltering(), isForceOverwrite() ); - } - catch( final IOException ioe ) - { - final String msg = "Failed to rename dir " + fromDir + - " to " + toDir + " due to " + ioe.getMessage(); - throw new TaskException( msg, ioe ); - } - } - } - if( getFileCopyMap().size() > 0 ) - {// files to move - getLogger().info( "Moving " + getFileCopyMap().size() + " files to " + - getDestDir().getAbsolutePath() ); - - Enumeration e = getFileCopyMap().keys(); - while( e.hasMoreElements() ) - { - String fromFile = (String)e.nextElement(); - String toFile = (String)getFileCopyMap().get( fromFile ); - - if( fromFile.equals( toFile ) ) - { - getLogger().debug( "Skipping self-move of " + fromFile ); - continue; - } - - boolean moved = false; - File f = new File( fromFile ); - - if( f.exists() ) - {//Is this file still available to be moved? - File d = new File( toFile ); - - try - { - final String message = - "Attempting to rename: " + fromFile + " to " + toFile; - getLogger().debug( message ); - moved = renameFile( f, d, isFiltering(), isForceOverwrite() ); - } - catch( IOException ioe ) - { - final String msg = "Failed to rename " + fromFile + " to " + - toFile + " due to " + ioe.getMessage(); - throw new TaskException( msg, ioe ); - } - - if( !moved ) - { - try - { - getLogger().debug( "Moving " + fromFile + " to " + toFile ); - - final FilterSetCollection executionFilters = buildFilterSet(); - if( isForceOverwrite() ) - { - FileUtil.forceDelete( d ); - } - FileUtils.copyFile( f, d, executionFilters ); - - f = new File( fromFile ); - if( !f.delete() ) - { - throw new TaskException( "Unable to delete file " - + f.getAbsolutePath() ); - } - } - catch( IOException ioe ) - { - String msg = "Failed to copy " + fromFile + " to " - + toFile - + " due to " + ioe.getMessage(); - throw new TaskException( msg, ioe ); - } - } - } - } - } - - if( isIncludeEmpty() ) - { - Enumeration e = getDirCopyMap().elements(); - int count = 0; - while( e.hasMoreElements() ) - { - File d = new File( (String)e.nextElement() ); - if( !d.exists() ) - { - if( !d.mkdirs() ) - { - getLogger().error( "Unable to create directory " + d.getAbsolutePath() ); - } - else - { - count++; - } - } - } - - if( count > 0 ) - { - getLogger().info( "Moved " + count + " empty directories to " + getDestDir().getAbsolutePath() ); - } - } - - if( getFilesets().size() > 0 ) - { - Iterator e = getFilesets().iterator(); - while( e.hasNext() ) - { - FileSet fs = (FileSet)e.next(); - File dir = fs.getDir(); - - if( okToDelete( dir ) ) - { - deleteDir( dir ); - } - } - } - } - - /** - * Its only ok to delete a directory tree if there are no files in it. - * - * @param d Description of Parameter - * @return Description of the Returned Value - */ - protected boolean okToDelete( File d ) - { - String[] list = d.list(); - if( list == null ) - { - return false; - }// maybe io error? - - for( int i = 0; i < list.length; i++ ) - { - String s = list[ i ]; - File f = new File( d, s ); - if( f.isDirectory() ) - { - if( !okToDelete( f ) ) - { - return false; - } - } - else - { - return false;// found a file - } - } - - return true; - } - - /** - * Attempts to rename a file from a source to a destination. If overwrite is - * set to true, this method overwrites existing file even if the destination - * file is newer. Otherwise, the source file is renamed only if the - * destination file is older than it. Method then checks if token filtering - * is used. If it is, this method returns false assuming it is the - * responsibility to the copyFile method. - * - * @param sourceFile Description of Parameter - * @param destFile Description of Parameter - * @param filtering Description of Parameter - * @param overwrite Description of Parameter - * @return Description of the Returned Value - * @exception TaskException Description of Exception - * @throws IOException - */ - protected boolean renameFile( File sourceFile, File destFile, - boolean filtering, boolean overwrite ) - throws IOException, TaskException - { - - boolean renamed = true; - if( !filtering ) - { - // ensure that parent dir of dest file exists! - // not using getParentFile method to stay 1.1 compat - String parentPath = destFile.getParent(); - if( parentPath != null ) - { - File parent = new File( parentPath ); - if( !parent.exists() ) - { - parent.mkdirs(); - } - } - - if( destFile.exists() ) - { - if( !destFile.delete() ) - { - throw new TaskException( "Unable to remove existing file " - + destFile ); - } - } - renamed = sourceFile.renameTo( destFile ); - } - else - { - renamed = false; - } - return renamed; - } -} diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/file/Move.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/file/Move.java deleted file mode 100644 index 3d72024ba..000000000 --- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/file/Move.java +++ /dev/null @@ -1,306 +0,0 @@ -/* - * Copyright (C) The Apache Software Foundation. All rights reserved. - * - * This software is published under the terms of the Apache Software License - * version 1.1, a copy of which has been included with this distribution in - * the LICENSE.txt file. - */ -package org.apache.tools.ant.taskdefs.file; - -import java.io.File; -import java.io.IOException; -import java.util.Enumeration; -import java.util.Iterator; -import org.apache.avalon.excalibur.io.FileUtil; -import org.apache.myrmidon.api.TaskException; -import org.apache.tools.ant.types.FileSet; -import org.apache.tools.ant.types.FilterSetCollection; -import org.apache.tools.ant.util.FileUtils; - -/** - * Moves a file or directory to a new file or directory. By default, the - * destination is overwriten when existing. When overwrite is turned off, then - * files are only moved if the source file is newer than the destination file, - * or when the destination file does not exist.

- * - * Source files and directories are only deleted when the file or directory has - * been copied to the destination successfully. Filtering also works.

- * - * This implementation is based on Arnout Kuiper's initial design document, the - * following mailing list discussions, and the copyfile/copydir tasks.

- * - * @author Glenn McAllister glennm@ca.ibm.com - * - * @author Magesh Umasankar - */ -public class Move - extends Copy -{ - public Move() - { - setOverwrite( true ); - } - - /** - * Go and delete the directory tree. - * - * @param d Description of Parameter - */ - protected void deleteDir( File d ) - throws TaskException - { - String[] list = d.list(); - if( list == null ) - { - return; - }// on an io error list() can return null - - for( int i = 0; i < list.length; i++ ) - { - String s = list[ i ]; - File f = new File( d, s ); - if( f.isDirectory() ) - { - deleteDir( f ); - } - else - { - throw new TaskException( "UNEXPECTED ERROR - The file " + f.getAbsolutePath() + " should not exist!" ); - } - } - getLogger().debug( "Deleting directory " + d.getAbsolutePath() ); - if( !d.delete() ) - { - throw new TaskException( "Unable to delete directory " + d.getAbsolutePath() ); - } - } - - //************************************************************************ - // protected and private methods - //************************************************************************ - - protected void doFileOperations() - throws TaskException - { - //Attempt complete directory renames, if any, first. - if( getCompleteDirMap().size() > 0 ) - { - Enumeration e = getCompleteDirMap().keys(); - while( e.hasMoreElements() ) - { - File fromDir = (File)e.nextElement(); - File toDir = (File)getCompleteDirMap().get( fromDir ); - try - { - final String message = "Attempting to rename dir: " + fromDir + - " to " + toDir; - getLogger().debug( message ); - renameFile( fromDir, toDir, isFiltering(), isForceOverwrite() ); - } - catch( final IOException ioe ) - { - final String msg = "Failed to rename dir " + fromDir + - " to " + toDir + " due to " + ioe.getMessage(); - throw new TaskException( msg, ioe ); - } - } - } - if( getFileCopyMap().size() > 0 ) - {// files to move - getLogger().info( "Moving " + getFileCopyMap().size() + " files to " + - getDestDir().getAbsolutePath() ); - - Enumeration e = getFileCopyMap().keys(); - while( e.hasMoreElements() ) - { - String fromFile = (String)e.nextElement(); - String toFile = (String)getFileCopyMap().get( fromFile ); - - if( fromFile.equals( toFile ) ) - { - getLogger().debug( "Skipping self-move of " + fromFile ); - continue; - } - - boolean moved = false; - File f = new File( fromFile ); - - if( f.exists() ) - {//Is this file still available to be moved? - File d = new File( toFile ); - - try - { - final String message = - "Attempting to rename: " + fromFile + " to " + toFile; - getLogger().debug( message ); - moved = renameFile( f, d, isFiltering(), isForceOverwrite() ); - } - catch( IOException ioe ) - { - final String msg = "Failed to rename " + fromFile + " to " + - toFile + " due to " + ioe.getMessage(); - throw new TaskException( msg, ioe ); - } - - if( !moved ) - { - try - { - getLogger().debug( "Moving " + fromFile + " to " + toFile ); - - final FilterSetCollection executionFilters = buildFilterSet(); - if( isForceOverwrite() ) - { - FileUtil.forceDelete( d ); - } - FileUtils.copyFile( f, d, executionFilters ); - - f = new File( fromFile ); - if( !f.delete() ) - { - throw new TaskException( "Unable to delete file " - + f.getAbsolutePath() ); - } - } - catch( IOException ioe ) - { - String msg = "Failed to copy " + fromFile + " to " - + toFile - + " due to " + ioe.getMessage(); - throw new TaskException( msg, ioe ); - } - } - } - } - } - - if( isIncludeEmpty() ) - { - Enumeration e = getDirCopyMap().elements(); - int count = 0; - while( e.hasMoreElements() ) - { - File d = new File( (String)e.nextElement() ); - if( !d.exists() ) - { - if( !d.mkdirs() ) - { - getLogger().error( "Unable to create directory " + d.getAbsolutePath() ); - } - else - { - count++; - } - } - } - - if( count > 0 ) - { - getLogger().info( "Moved " + count + " empty directories to " + getDestDir().getAbsolutePath() ); - } - } - - if( getFilesets().size() > 0 ) - { - Iterator e = getFilesets().iterator(); - while( e.hasNext() ) - { - FileSet fs = (FileSet)e.next(); - File dir = fs.getDir(); - - if( okToDelete( dir ) ) - { - deleteDir( dir ); - } - } - } - } - - /** - * Its only ok to delete a directory tree if there are no files in it. - * - * @param d Description of Parameter - * @return Description of the Returned Value - */ - protected boolean okToDelete( File d ) - { - String[] list = d.list(); - if( list == null ) - { - return false; - }// maybe io error? - - for( int i = 0; i < list.length; i++ ) - { - String s = list[ i ]; - File f = new File( d, s ); - if( f.isDirectory() ) - { - if( !okToDelete( f ) ) - { - return false; - } - } - else - { - return false;// found a file - } - } - - return true; - } - - /** - * Attempts to rename a file from a source to a destination. If overwrite is - * set to true, this method overwrites existing file even if the destination - * file is newer. Otherwise, the source file is renamed only if the - * destination file is older than it. Method then checks if token filtering - * is used. If it is, this method returns false assuming it is the - * responsibility to the copyFile method. - * - * @param sourceFile Description of Parameter - * @param destFile Description of Parameter - * @param filtering Description of Parameter - * @param overwrite Description of Parameter - * @return Description of the Returned Value - * @exception TaskException Description of Exception - * @throws IOException - */ - protected boolean renameFile( File sourceFile, File destFile, - boolean filtering, boolean overwrite ) - throws IOException, TaskException - { - - boolean renamed = true; - if( !filtering ) - { - // ensure that parent dir of dest file exists! - // not using getParentFile method to stay 1.1 compat - String parentPath = destFile.getParent(); - if( parentPath != null ) - { - File parent = new File( parentPath ); - if( !parent.exists() ) - { - parent.mkdirs(); - } - } - - if( destFile.exists() ) - { - if( !destFile.delete() ) - { - throw new TaskException( "Unable to remove existing file " - + destFile ); - } - } - renamed = sourceFile.renameTo( destFile ); - } - else - { - renamed = false; - } - return renamed; - } -}