git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271459 13f79535-47bb-0310-9956-ffa450edef68master
@@ -386,11 +386,9 @@ Legal: | |||||
<property name="antlib.name" value="sound"/> | <property name="antlib.name" value="sound"/> | ||||
</ant> | </ant> | ||||
<!-- | |||||
<ant antfile="antlib.xml"> | <ant antfile="antlib.xml"> | ||||
<property name="antlib.name" value="vfile"/> | <property name="antlib.name" value="vfile"/> | ||||
</ant> | </ant> | ||||
--> | |||||
<antlib-jar jarfile="${build.lib}/selftest.atl" | <antlib-jar jarfile="${build.lib}/selftest.atl" | ||||
basedir="${build.classes}" | basedir="${build.classes}" | ||||
@@ -434,6 +432,7 @@ Legal: | |||||
<!-- Prepare the VFS tests --> | <!-- Prepare the VFS tests --> | ||||
<property name="test.vfs.dir" location="${test.working.dir}/org/apache/aut/vfs"/> | <property name="test.vfs.dir" location="${test.working.dir}/org/apache/aut/vfs"/> | ||||
<mkdir dir="${test.vfs.dir}/write-tests"/> | |||||
<mkdir dir="${test.vfs.dir}/basedir/emptydir"/> | <mkdir dir="${test.vfs.dir}/basedir/emptydir"/> | ||||
<zip zipfile="${test.vfs.dir}/test.zip"> | <zip zipfile="${test.vfs.dir}/test.zip"> | ||||
<fileset dir="${test.vfs.dir}" includes="basedir/**"/> | <fileset dir="${test.vfs.dir}" includes="basedir/**"/> | ||||
@@ -0,0 +1,8 @@ | |||||
<project version="2.0"> | |||||
<target name="copy"> | |||||
<v-fileset id="src-files" dir="src"/> | |||||
<v-copy todir="dest"> | |||||
<v-fileset-ref id="src-files"/> | |||||
</v-copy> | |||||
</target> | |||||
</project> |
@@ -0,0 +1 @@ | |||||
A test file. |
@@ -0,0 +1,5 @@ | |||||
<html> | |||||
<body> | |||||
<p>Yo!</p> | |||||
</body> | |||||
</html> |
@@ -0,0 +1,175 @@ | |||||
/* | |||||
* 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.antlib.vfile; | |||||
import java.io.InputStream; | |||||
import java.io.OutputStream; | |||||
import java.util.ArrayList; | |||||
import java.util.Iterator; | |||||
import org.apache.aut.vfs.FileObject; | |||||
import org.apache.aut.vfs.FileSystemException; | |||||
import org.apache.avalon.excalibur.i18n.ResourceManager; | |||||
import org.apache.avalon.excalibur.i18n.Resources; | |||||
import org.apache.myrmidon.api.AbstractTask; | |||||
import org.apache.myrmidon.api.TaskException; | |||||
/** | |||||
* A task that copies files. | |||||
* | |||||
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||||
* @ant:task name="v-copy" | |||||
*/ | |||||
public class CopyFilesTask | |||||
extends AbstractTask | |||||
{ | |||||
private final static Resources REZ = | |||||
ResourceManager.getPackageResources( CopyFilesTask.class ); | |||||
private FileObject m_srcFile; | |||||
private FileObject m_destFile; | |||||
private FileObject m_destDir; | |||||
private ArrayList m_fileSets = new ArrayList(); | |||||
/** | |||||
* Sets the source file. | |||||
*/ | |||||
public void setFile( final FileObject file ) | |||||
{ | |||||
m_srcFile = file; | |||||
} | |||||
/** | |||||
* Sets the destination file. | |||||
*/ | |||||
public void setTofile( final FileObject file ) | |||||
{ | |||||
m_destFile = file; | |||||
} | |||||
/** | |||||
* Sets the destination directory. | |||||
*/ | |||||
public void setTodir( final FileObject file ) | |||||
{ | |||||
m_destDir = file; | |||||
} | |||||
/** | |||||
* Adds a source file set. | |||||
*/ | |||||
public void add( final FileSet fileset ) | |||||
{ | |||||
m_fileSets.add( fileset ); | |||||
} | |||||
/** | |||||
* Execute task. | |||||
* This method is called to perform actual work associated with task. | |||||
* It is called after Task has been Configured and Initialized and before | |||||
* beig Disposed (If task implements appropriate interfaces). | |||||
* | |||||
* @exception TaskException if an error occurs | |||||
*/ | |||||
public void execute() | |||||
throws TaskException | |||||
{ | |||||
if( m_srcFile == null && m_fileSets.size() == 0 ) | |||||
{ | |||||
final String message = REZ.getString( "copyfilestask.no-source.error", getContext().getName() ); | |||||
throw new TaskException( message ); | |||||
} | |||||
if( m_destFile == null && m_destDir == null ) | |||||
{ | |||||
final String message = REZ.getString( "copyfilestask.no-destination.error", getContext().getName() ); | |||||
throw new TaskException( message ); | |||||
} | |||||
if( m_fileSets.size() > 0 && m_destDir == null ) | |||||
{ | |||||
final String message = REZ.getString( "copyfilestask.no-destination-dir.error", getContext().getName() ); | |||||
throw new TaskException( message ); | |||||
} | |||||
try | |||||
{ | |||||
// Copy the source file across | |||||
if( m_srcFile != null ) | |||||
{ | |||||
if( m_destFile == null ) | |||||
{ | |||||
m_destFile = m_destDir.resolveFile( m_srcFile.getName().getBaseName() ); | |||||
} | |||||
copyFile( m_srcFile, m_destFile ); | |||||
} | |||||
// Copy the contents of the filesets across | |||||
for( Iterator iterator = m_fileSets.iterator(); iterator.hasNext(); ) | |||||
{ | |||||
FileSet fileset = (FileSet)iterator.next(); | |||||
FileSetResult result = fileset.getResult( getContext() ); | |||||
final FileObject[] files = result.getFiles(); | |||||
final String[] paths = result.getPaths(); | |||||
for( int i = 0; i < files.length; i++ ) | |||||
{ | |||||
final FileObject srcFile = files[ i ]; | |||||
final String path = paths[ i ]; | |||||
// TODO - map destination name | |||||
// TODO - use scope here, to make sure that the result | |||||
// is a descendent of the dest dir | |||||
final FileObject destFile = m_destDir.resolveFile( path ); | |||||
copyFile( srcFile, destFile ); | |||||
} | |||||
} | |||||
} | |||||
catch( FileSystemException e ) | |||||
{ | |||||
throw new TaskException( e.getMessage(), e ); | |||||
} | |||||
} | |||||
/** | |||||
* Copies a file. | |||||
*/ | |||||
private void copyFile( final FileObject srcFile, final FileObject destFile ) | |||||
throws TaskException | |||||
{ | |||||
getLogger().info( "copy " + srcFile + " to " + destFile ); | |||||
try | |||||
{ | |||||
// TODO - move copy behind FileObject interface | |||||
InputStream instr = srcFile.getContent().getInputStream(); | |||||
try | |||||
{ | |||||
OutputStream outstr = destFile.getContent().getOutputStream(); | |||||
byte[] buffer = new byte[ 4096 ]; | |||||
while( true ) | |||||
{ | |||||
int nread = instr.read( buffer ); | |||||
if( nread == -1 ) | |||||
{ | |||||
break; | |||||
} | |||||
outstr.write( buffer, 0, nread ); | |||||
} | |||||
outstr.close(); | |||||
} | |||||
finally | |||||
{ | |||||
instr.close(); | |||||
} | |||||
} | |||||
catch( Exception exc ) | |||||
{ | |||||
final String message = REZ.getString( "copyfilestask.copy-file.error", srcFile, destFile ); | |||||
throw new TaskException( message, exc ); | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,76 @@ | |||||
/* | |||||
* 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.antlib.vfile; | |||||
import java.util.ArrayList; | |||||
import java.util.Iterator; | |||||
import java.util.List; | |||||
import org.apache.aut.vfs.FileObject; | |||||
import org.apache.myrmidon.api.TaskContext; | |||||
import org.apache.myrmidon.api.TaskException; | |||||
/** | |||||
* A compound file list, which is made up of several other file lists. | |||||
* | |||||
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||||
* @ant:data-type name="v-path" | |||||
*/ | |||||
public class DefaultFileList implements FileList | |||||
{ | |||||
private final List m_elements = new ArrayList(); | |||||
/** | |||||
* Adds a single file to this list. | |||||
*/ | |||||
public void addLocation( final FileObject file ) | |||||
{ | |||||
final SingletonFileList element = new SingletonFileList(); | |||||
element.setFile( file ); | |||||
m_elements.add( element ); | |||||
} | |||||
/** | |||||
* Adds a path to this list. | |||||
*/ | |||||
public void addPath( final String pathStr ) | |||||
{ | |||||
final PathFileList path = new PathFileList(); | |||||
path.setPath( pathStr ); | |||||
m_elements.add( path ); | |||||
} | |||||
/** | |||||
* Adds a file list to this list. | |||||
*/ | |||||
public void add( final FileList list ) | |||||
{ | |||||
m_elements.add( list ); | |||||
} | |||||
/** | |||||
* Returns the list of files. | |||||
*/ | |||||
public FileObject[] listFiles( TaskContext context ) throws TaskException | |||||
{ | |||||
// Collect the files from all elements | |||||
final ArrayList allFiles = new ArrayList(); | |||||
for( Iterator iterator = m_elements.iterator(); iterator.hasNext(); ) | |||||
{ | |||||
FileList fileList = (FileList)iterator.next(); | |||||
FileObject[] files = fileList.listFiles( context ); | |||||
for( int i = 0; i < files.length; i++ ) | |||||
{ | |||||
FileObject file = files[ i ]; | |||||
allFiles.add( file ); | |||||
} | |||||
} | |||||
// Convert to array | |||||
return (FileObject[])allFiles.toArray( new FileObject[ allFiles.size() ] ); | |||||
} | |||||
} |
@@ -0,0 +1,50 @@ | |||||
/* | |||||
* 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.antlib.vfile; | |||||
import java.util.ArrayList; | |||||
import java.util.List; | |||||
import org.apache.aut.vfs.FileObject; | |||||
/** | |||||
* An implementation of a file set result. | |||||
* | |||||
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||||
*/ | |||||
public class DefaultFileSetResult | |||||
implements FileSetResult | |||||
{ | |||||
private List m_files = new ArrayList(); | |||||
private List m_paths = new ArrayList(); | |||||
/** | |||||
* Adds an element to the result. | |||||
*/ | |||||
public void addElement( final FileObject file, | |||||
final String path ) | |||||
{ | |||||
m_files.add( file ); | |||||
m_paths.add( path ); | |||||
} | |||||
/** | |||||
* Returns the files in the result. | |||||
*/ | |||||
public FileObject[] getFiles() | |||||
{ | |||||
return (FileObject[])m_files.toArray( new FileObject[ m_files.size() ] ); | |||||
} | |||||
/** | |||||
* Returns the virtual paths of the files. | |||||
*/ | |||||
public String[] getPaths() | |||||
{ | |||||
return (String[])m_paths.toArray( new String[ m_paths.size() ] ); | |||||
} | |||||
} |
@@ -0,0 +1,34 @@ | |||||
/* | |||||
* 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.antlib.vfile; | |||||
import org.apache.aut.vfs.FileObject; | |||||
import org.apache.myrmidon.api.TaskContext; | |||||
import org.apache.myrmidon.api.TaskException; | |||||
import org.apache.myrmidon.framework.DataType; | |||||
/** | |||||
* An ordered list of files. | |||||
* | |||||
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||||
* @ant:role shorthand="v-path" | |||||
*/ | |||||
public interface FileList | |||||
extends DataType | |||||
{ | |||||
/** | |||||
* Returns the files in the list. | |||||
* | |||||
* @param context | |||||
* The context to use to build the list of files. | |||||
* | |||||
* @throws TaskException | |||||
* On error building the list of files. | |||||
*/ | |||||
FileObject[] listFiles( TaskContext context ) throws TaskException; | |||||
} |
@@ -0,0 +1,34 @@ | |||||
/* | |||||
* 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.antlib.vfile; | |||||
import org.apache.myrmidon.api.TaskContext; | |||||
import org.apache.myrmidon.api.TaskException; | |||||
import org.apache.myrmidon.framework.DataType; | |||||
/** | |||||
* A set of files, where each file in the list has a virtual path associated | |||||
* with it. | |||||
* | |||||
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||||
* @ant:role shorthand="v-fileset" | |||||
*/ | |||||
public interface FileSet | |||||
extends DataType | |||||
{ | |||||
/** | |||||
* Returns the contents of the set. | |||||
* | |||||
* @param context | |||||
* The context to use to build the set. | |||||
* | |||||
* @throws TaskException | |||||
* On error building the set. | |||||
*/ | |||||
FileSetResult getResult( TaskContext context ) throws TaskException; | |||||
} |
@@ -0,0 +1,28 @@ | |||||
/* | |||||
* 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.antlib.vfile; | |||||
import org.apache.aut.vfs.FileObject; | |||||
/** | |||||
* The contents of a {@link FileSet}. | |||||
* | |||||
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||||
*/ | |||||
public interface FileSetResult | |||||
{ | |||||
/** | |||||
* Returns the files in the result. | |||||
*/ | |||||
FileObject[] getFiles(); | |||||
/** | |||||
* Returns the virtual paths of the files. | |||||
*/ | |||||
String[] getPaths(); | |||||
} |
@@ -0,0 +1,61 @@ | |||||
/* | |||||
* 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.antlib.vfile; | |||||
import org.apache.aut.vfs.FileObject; | |||||
import org.apache.aut.vfs.FileSystemException; | |||||
import org.apache.aut.vfs.FileSystemManager; | |||||
import org.apache.myrmidon.api.TaskContext; | |||||
import org.apache.myrmidon.api.TaskException; | |||||
import org.apache.tools.ant.util.FileUtils; | |||||
/** | |||||
* A path made up of file names separated by ; and : characters. Similar to | |||||
* a CLASSPATH or PATH environment variable. | |||||
* | |||||
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||||
*/ | |||||
public class PathFileList implements FileList | |||||
{ | |||||
private String m_path; | |||||
/** | |||||
* Sets the path to use for this file list. | |||||
*/ | |||||
public void setPath( final String path ) | |||||
{ | |||||
m_path = path; | |||||
} | |||||
/** | |||||
* Returns the list of files. | |||||
*/ | |||||
public FileObject[] listFiles( final TaskContext context ) | |||||
throws TaskException | |||||
{ | |||||
FileSystemManager fileSystemManager = (FileSystemManager)context.getService( FileSystemManager.class ); | |||||
// TODO - move parsing to the VFS | |||||
final String[] elements = FileUtils.parsePath( m_path ); | |||||
final FileObject[] result = new FileObject[ elements.length ]; | |||||
for( int i = 0; i < elements.length; i++ ) | |||||
{ | |||||
String element = elements[ i ]; | |||||
try | |||||
{ | |||||
result[ i ] = fileSystemManager.resolveFile( element ); | |||||
} | |||||
catch( FileSystemException e ) | |||||
{ | |||||
throw new TaskException( e.getMessage(), e ); | |||||
} | |||||
} | |||||
return result; | |||||
} | |||||
} |
@@ -0,0 +1,114 @@ | |||||
/* | |||||
* 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.antlib.vfile; | |||||
import java.util.ArrayList; | |||||
import org.apache.aut.vfs.FileObject; | |||||
import org.apache.aut.vfs.FileSystemException; | |||||
import org.apache.aut.vfs.FileType; | |||||
import org.apache.avalon.excalibur.i18n.ResourceManager; | |||||
import org.apache.avalon.excalibur.i18n.Resources; | |||||
import org.apache.myrmidon.api.TaskContext; | |||||
import org.apache.myrmidon.api.TaskException; | |||||
import org.apache.myrmidon.framework.AbstractFileSet; | |||||
/** | |||||
* A file set, that contains those files under a directory that match | |||||
* a set of patterns. | |||||
* | |||||
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||||
* @ant:data-type name="v-fileset" | |||||
*/ | |||||
public class PatternFileSet | |||||
extends AbstractFileSet | |||||
implements FileList, FileSet | |||||
{ | |||||
private final static Resources REZ = | |||||
ResourceManager.getPackageResources( PatternFileSet.class ); | |||||
private FileObject m_dir; | |||||
/** | |||||
* Sets the root directory. | |||||
*/ | |||||
public void setDir( final FileObject dir ) | |||||
{ | |||||
m_dir = dir; | |||||
} | |||||
/** | |||||
* Returns the root directory | |||||
*/ | |||||
public FileObject getDir() | |||||
{ | |||||
return m_dir; | |||||
} | |||||
/** | |||||
* Returns the list of files, in depthwise order. | |||||
*/ | |||||
public FileObject[] listFiles( TaskContext context ) throws TaskException | |||||
{ | |||||
final FileSetResult result = getResult( context ); | |||||
return result.getFiles(); | |||||
} | |||||
/** | |||||
* Returns the contents of the set. | |||||
*/ | |||||
public FileSetResult getResult( TaskContext context ) throws TaskException | |||||
{ | |||||
if( m_dir == null ) | |||||
{ | |||||
final String message = REZ.getString( "fileset.dir-not-set.error" ); | |||||
throw new TaskException( message ); | |||||
} | |||||
try | |||||
{ | |||||
final DefaultFileSetResult result = new DefaultFileSetResult(); | |||||
final ArrayList stack = new ArrayList(); | |||||
final ArrayList pathStack = new ArrayList(); | |||||
stack.add( m_dir ); | |||||
pathStack.add( "." ); | |||||
while( stack.size() > 0 ) | |||||
{ | |||||
// Pop next folder off the stack | |||||
FileObject folder = (FileObject)stack.remove( 0 ); | |||||
String path = (String)pathStack.remove( 0 ); | |||||
// Queue the children of the folder | |||||
FileObject[] children = folder.getChildren(); | |||||
for( int i = 0; i < children.length; i++ ) | |||||
{ | |||||
FileObject child = children[ i ]; | |||||
String childPath = path + '/' + child.getName().getBaseName(); | |||||
if( child.getType() == FileType.FILE ) | |||||
{ | |||||
// A regular file - add it straight to the result | |||||
result.addElement( child, childPath ); | |||||
} | |||||
else | |||||
{ | |||||
// A folder - push it on to the stack | |||||
stack.add( 0, child ); | |||||
pathStack.add( 0, childPath ); | |||||
} | |||||
} | |||||
} | |||||
return result; | |||||
} | |||||
catch( FileSystemException e ) | |||||
{ | |||||
final String message = REZ.getString( "fileset.list-files.error", m_dir ); | |||||
throw new TaskException( message, e ); | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,7 @@ | |||||
bad-convert-string-to-file.error=Could not convert URI "{0}" into a file object. | |||||
fileset.dir-not-set.error=Fileset root directory is not set. | |||||
fileset.list-files.error=Could not list the files in folder "{0}". | |||||
copyfilestask.no-source.error=No source files specified for {0} task. | |||||
copyfilestask.no-destination.error=No destination file or directory specified for {0} task. | |||||
copyfilestask.no-destination.error=No destination directory specified for {0} task. | |||||
copyfilestask.copy-file.error=Could not copy "{0}" to "{1}". |
@@ -0,0 +1,39 @@ | |||||
/* | |||||
* 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.antlib.vfile; | |||||
import org.apache.aut.vfs.FileObject; | |||||
import org.apache.myrmidon.api.TaskContext; | |||||
import org.apache.myrmidon.api.TaskException; | |||||
/** | |||||
* A file list that contains a single file. | |||||
* | |||||
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||||
* @ant:data-type name="v-file" | |||||
*/ | |||||
public class SingletonFileList implements FileList | |||||
{ | |||||
private FileObject m_file; | |||||
/** | |||||
* Sets the file to use for tils file list. | |||||
*/ | |||||
public void setFile( final FileObject file ) | |||||
{ | |||||
m_file = file; | |||||
} | |||||
/** | |||||
* Returns the list of files. | |||||
*/ | |||||
public FileObject[] listFiles( TaskContext context ) throws TaskException | |||||
{ | |||||
return new FileObject[]{m_file}; | |||||
} | |||||
} |
@@ -0,0 +1,57 @@ | |||||
/* | |||||
* 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.antlib.vfile; | |||||
import org.apache.aut.vfs.FileObject; | |||||
import org.apache.aut.vfs.FileSystemManager; | |||||
import org.apache.avalon.excalibur.i18n.ResourceManager; | |||||
import org.apache.avalon.excalibur.i18n.Resources; | |||||
import org.apache.avalon.framework.context.Context; | |||||
import org.apache.myrmidon.api.TaskContext; | |||||
import org.apache.myrmidon.converter.AbstractConverter; | |||||
import org.apache.myrmidon.converter.ConverterException; | |||||
/** | |||||
* Converts a String to a {@link FileObject} | |||||
* | |||||
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||||
* @ant:converter source="java.lang.String" destination="org.apache.aut.vfs.FileObject" | |||||
*/ | |||||
public class StringToFileObjectConverter extends AbstractConverter | |||||
{ | |||||
private final static Resources REZ = | |||||
ResourceManager.getPackageResources( StringToFileObjectConverter.class ); | |||||
public StringToFileObjectConverter() | |||||
{ | |||||
super( String.class, FileObject.class ); | |||||
} | |||||
/** | |||||
* Converts a String into a FileObject. | |||||
*/ | |||||
protected Object convert( Object original, Context context ) | |||||
throws ConverterException | |||||
{ | |||||
final String fileUri = (String)original; | |||||
final TaskContext taskContext = (TaskContext)context; | |||||
try | |||||
{ | |||||
final FileSystemManager manager = (FileSystemManager)taskContext.getService( FileSystemManager.class ); | |||||
// TODO - change TaskContext.getBaseDirectory() to return a FileObject | |||||
return manager.resolveFile( taskContext.getBaseDirectory(), fileUri ); | |||||
} | |||||
catch( Exception e ) | |||||
{ | |||||
final String message = REZ.getString( "bad-convert-string-to-file.error", fileUri ); | |||||
throw new ConverterException( message, e ); | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,35 @@ | |||||
/* | |||||
* 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.antlib.vfile; | |||||
import org.apache.myrmidon.AbstractProjectTest; | |||||
import java.io.File; | |||||
/** | |||||
* Test cases for the <v-copy> task. | |||||
* | |||||
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||||
* @version $Revision$ $Date$ | |||||
*/ | |||||
public class CopyFilesTaskTest | |||||
extends AbstractProjectTest | |||||
{ | |||||
public CopyFilesTaskTest( String name ) | |||||
{ | |||||
super( name ); | |||||
} | |||||
/** | |||||
* A simple smoke test. | |||||
*/ | |||||
public void testCopy() throws Exception | |||||
{ | |||||
final File projectFile = getTestResource( "copy.ant" ); | |||||
executeTarget( projectFile, "copy" ); | |||||
} | |||||
} |
@@ -0,0 +1,35 @@ | |||||
/* | |||||
* 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.antlib.vfile; | |||||
import org.apache.myrmidon.AbstractProjectTest; | |||||
import java.io.File; | |||||
/** | |||||
* Test cases for the <v-copy> task. | |||||
* | |||||
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||||
* @version $Revision$ $Date$ | |||||
*/ | |||||
public class CopyFilesTaskTest | |||||
extends AbstractProjectTest | |||||
{ | |||||
public CopyFilesTaskTest( String name ) | |||||
{ | |||||
super( name ); | |||||
} | |||||
/** | |||||
* A simple smoke test. | |||||
*/ | |||||
public void testCopy() throws Exception | |||||
{ | |||||
final File projectFile = getTestResource( "copy.ant" ); | |||||
executeTarget( projectFile, "copy" ); | |||||
} | |||||
} |