Browse Source

No longer need old move task

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271242 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Donald 23 years ago
parent
commit
e737c9abd1
2 changed files with 0 additions and 612 deletions
  1. +0
    -306
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/file/Move.java
  2. +0
    -306
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/file/Move.java

+ 0
- 306
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/file/Move.java View File

@@ -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.</p> <p>
*
* Source files and directories are only deleted when the file or directory has
* been copied to the destination successfully. Filtering also works.</p> <p>
*
* This implementation is based on Arnout Kuiper's initial design document, the
* following mailing list discussions, and the copyfile/copydir tasks.</p>
*
* @author Glenn McAllister <a href="mailto:glennm@ca.ibm.com">glennm@ca.ibm.com
* </a>
* @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a>
*/
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;
}
}

+ 0
- 306
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/file/Move.java View File

@@ -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.</p> <p>
*
* Source files and directories are only deleted when the file or directory has
* been copied to the destination successfully. Filtering also works.</p> <p>
*
* This implementation is based on Arnout Kuiper's initial design document, the
* following mailing list discussions, and the copyfile/copydir tasks.</p>
*
* @author Glenn McAllister <a href="mailto:glennm@ca.ibm.com">glennm@ca.ibm.com
* </a>
* @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a>
*/
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;
}
}

Loading…
Cancel
Save