git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270721 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -0,0 +1,43 @@ | |||||
| /* | |||||
| * 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.optional; | |||||
| import org.apache.tools.ant.util.FileNameMapper; | |||||
| class ExtMapper | |||||
| implements FileNameMapper | |||||
| { | |||||
| private final String m_extension; | |||||
| public ExtMapper( final String extension ) | |||||
| { | |||||
| m_extension = extension; | |||||
| } | |||||
| public void setFrom( final String from ) | |||||
| { | |||||
| } | |||||
| public void setTo( final String to ) | |||||
| { | |||||
| } | |||||
| public String[] mapFileName( final String filename ) | |||||
| { | |||||
| final int index = filename.lastIndexOf( '.' ); | |||||
| if( index >= 0 ) | |||||
| { | |||||
| final String reult = filename.substring( 0, index ) + m_extension; | |||||
| return new String[]{reult}; | |||||
| } | |||||
| else | |||||
| { | |||||
| return new String[]{filename + m_extension}; | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -9,13 +9,13 @@ package org.apache.tools.ant.taskdefs.optional; | |||||
| import java.io.File; | import java.io.File; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.taskdefs.MatchingTask; | import org.apache.tools.ant.taskdefs.MatchingTask; | ||||
| import org.apache.tools.ant.types.Commandline; | import org.apache.tools.ant.types.Commandline; | ||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.Mapper; | import org.apache.tools.ant.types.Mapper; | ||||
| import org.apache.tools.ant.types.SourceFileScanner; | |||||
| import org.apache.tools.ant.util.FileNameMapper; | import org.apache.tools.ant.util.FileNameMapper; | ||||
| import org.apache.tools.ant.util.IdentityMapper; | import org.apache.tools.ant.util.IdentityMapper; | ||||
| import org.apache.tools.ant.types.SourceFileScanner; | |||||
| /** | /** | ||||
| * Convert files from native encodings to ascii. | * Convert files from native encodings to ascii. | ||||
| @@ -23,25 +23,24 @@ import org.apache.tools.ant.types.SourceFileScanner; | |||||
| * @author <a href="asudell@acm.org">Drew Sudell</a> | * @author <a href="asudell@acm.org">Drew Sudell</a> | ||||
| * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | ||||
| */ | */ | ||||
| public class Native2Ascii extends MatchingTask | |||||
| public class Native2Ascii | |||||
| extends MatchingTask | |||||
| { | { | ||||
| private boolean reverse = false;// convert from ascii back to native | |||||
| private String encoding = null;// encoding to convert to/from | |||||
| private File srcDir = null;// Where to find input files | |||||
| private File destDir = null;// Where to put output files | |||||
| private String extension = null;// Extension of output files if different | |||||
| private Mapper mapper; | |||||
| private boolean m_reverse;// convert from ascii back to native | |||||
| private String m_encoding;// encoding to convert to/from | |||||
| private File m_srcDir;// Where to find input files | |||||
| private File m_destDir;// Where to put output files | |||||
| private String m_ext;// Extension of output files if different | |||||
| private Mapper m_mapper; | |||||
| /** | /** | ||||
| * Set the destination dirctory to place converted files into. | * Set the destination dirctory to place converted files into. | ||||
| * | * | ||||
| * @param destDir directory to place output file into. | * @param destDir directory to place output file into. | ||||
| */ | */ | ||||
| public void setDest( File destDir ) | |||||
| public void setDest( final File destDir ) | |||||
| { | { | ||||
| this.destDir = destDir; | |||||
| m_destDir = destDir; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -51,9 +50,9 @@ public class Native2Ascii extends MatchingTask | |||||
| * @param encoding String containing the name of the Native encoding to | * @param encoding String containing the name of the Native encoding to | ||||
| * convert from or to. | * convert from or to. | ||||
| */ | */ | ||||
| public void setEncoding( String encoding ) | |||||
| public void setEncoding( final String encoding ) | |||||
| { | { | ||||
| this.encoding = encoding; | |||||
| m_encoding = encoding; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -62,9 +61,9 @@ public class Native2Ascii extends MatchingTask | |||||
| * | * | ||||
| * @param ext File extension to use for converted files. | * @param ext File extension to use for converted files. | ||||
| */ | */ | ||||
| public void setExt( String ext ) | |||||
| public void setExt( final String ext ) | |||||
| { | { | ||||
| this.extension = ext; | |||||
| m_ext = ext; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -75,7 +74,7 @@ public class Native2Ascii extends MatchingTask | |||||
| */ | */ | ||||
| public void setReverse( boolean reverse ) | public void setReverse( boolean reverse ) | ||||
| { | { | ||||
| this.reverse = reverse; | |||||
| m_reverse = reverse; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -83,9 +82,9 @@ public class Native2Ascii extends MatchingTask | |||||
| * | * | ||||
| * @param srcDir Direcrory to find input file in. | * @param srcDir Direcrory to find input file in. | ||||
| */ | */ | ||||
| public void setSrc( File srcDir ) | |||||
| public void setSrc( final File srcDir ) | |||||
| { | { | ||||
| this.srcDir = srcDir; | |||||
| m_srcDir = srcDir; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -97,75 +96,88 @@ public class Native2Ascii extends MatchingTask | |||||
| public Mapper createMapper() | public Mapper createMapper() | ||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| if( mapper != null ) | |||||
| if( m_mapper != null ) | |||||
| { | { | ||||
| throw new TaskException( "Cannot define more than one mapper" ); | throw new TaskException( "Cannot define more than one mapper" ); | ||||
| } | } | ||||
| mapper = new Mapper(); | |||||
| return mapper; | |||||
| m_mapper = new Mapper(); | |||||
| return m_mapper; | |||||
| } | } | ||||
| public void execute() | public void execute() | ||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| validate(); | |||||
| Commandline baseCmd = null;// the common portion of our cmd line | |||||
| DirectoryScanner scanner = null;// Scanner to find our inputs | |||||
| String[] files;// list of files to process | |||||
| final DirectoryScanner scanner = getDirectoryScanner( m_srcDir ); | |||||
| String[] files = scanner.getIncludedFiles(); | |||||
| // default srcDir to basedir | |||||
| if( srcDir == null ) | |||||
| final SourceFileScanner sfs = new SourceFileScanner( this ); | |||||
| final FileNameMapper mapper = buildMapper(); | |||||
| files = sfs.restrict( files, m_srcDir, m_destDir, mapper ); | |||||
| int count = files.length; | |||||
| if( count == 0 ) | |||||
| { | { | ||||
| srcDir = getBaseDirectory(); | |||||
| return; | |||||
| } | } | ||||
| // Require destDir | |||||
| if( destDir == null ) | |||||
| { | |||||
| throw new TaskException( "The dest attribute must be set." ); | |||||
| } | |||||
| final String message = "Converting " + count + " file" + | |||||
| ( count != 1 ? "s" : "" ) + " from " + m_srcDir + " to " + | |||||
| m_destDir; | |||||
| getLogger().info( message ); | |||||
| // if src and dest dirs are the same, require the extension | |||||
| // to be set, so we don't stomp every file. One could still | |||||
| // include a file with the same extension, but .... | |||||
| if( srcDir.equals( destDir ) && extension == null && mapper == null ) | |||||
| for( int i = 0; i < files.length; i++ ) | |||||
| { | { | ||||
| throw new TaskException( "The ext attribute or a mapper must be set if" | |||||
| + " src and dest dirs are the same." ); | |||||
| final String name = mapper.mapFileName( files[ i ] )[ 0 ]; | |||||
| convert( files[ i ], name ); | |||||
| } | } | ||||
| } | |||||
| FileNameMapper m = null; | |||||
| if( mapper == null ) | |||||
| private FileNameMapper buildMapper() | |||||
| throws TaskException | |||||
| { | |||||
| FileNameMapper mapper = null; | |||||
| if( m_mapper == null ) | |||||
| { | { | ||||
| if( extension == null ) | |||||
| if( m_ext == null ) | |||||
| { | { | ||||
| m = new IdentityMapper(); | |||||
| mapper = new IdentityMapper(); | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| m = new ExtMapper(); | |||||
| mapper = new ExtMapper( m_ext ); | |||||
| } | } | ||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| m = mapper.getImplementation(); | |||||
| mapper = m_mapper.getImplementation(); | |||||
| } | } | ||||
| scanner = getDirectoryScanner( srcDir ); | |||||
| files = scanner.getIncludedFiles(); | |||||
| SourceFileScanner sfs = new SourceFileScanner( this ); | |||||
| files = sfs.restrict( files, srcDir, destDir, m ); | |||||
| int count = files.length; | |||||
| if( count == 0 ) | |||||
| return mapper; | |||||
| } | |||||
| private void validate() | |||||
| throws TaskException | |||||
| { | |||||
| // Require destDir | |||||
| if( m_destDir == null ) | |||||
| { | { | ||||
| return; | |||||
| throw new TaskException( "The dest attribute must be set." ); | |||||
| } | } | ||||
| String message = "Converting " + count + " file" | |||||
| + ( count != 1 ? "s" : "" ) + " from "; | |||||
| getLogger().info( message + srcDir + " to " + destDir ); | |||||
| for( int i = 0; i < files.length; i++ ) | |||||
| // if src and dest dirs are the same, require the extension | |||||
| // to be set, so we don't stomp every file. One could still | |||||
| // include a file with the same extension, but .... | |||||
| if( m_srcDir.equals( m_destDir ) && m_ext == null && m_mapper == null ) | |||||
| { | |||||
| throw new TaskException( "The ext attribute or a mapper must be set if" + | |||||
| " src and dest dirs are the same." ); | |||||
| } | |||||
| // default srcDir to basedir | |||||
| if( m_srcDir == null ) | |||||
| { | { | ||||
| convert( files[ i ], m.mapFileName( files[ i ] )[ 0 ] ); | |||||
| m_srcDir = getBaseDirectory(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -179,30 +191,10 @@ public class Native2Ascii extends MatchingTask | |||||
| private void convert( String srcName, String destName ) | private void convert( String srcName, String destName ) | ||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| Commandline cmd = new Commandline();// Command line to run | |||||
| File srcFile;// File to convert | |||||
| File destFile;// where to put the results | |||||
| // Set up the basic args (this could be done once, but | |||||
| // it's cleaner here) | |||||
| if( reverse ) | |||||
| { | |||||
| cmd.createArgument().setValue( "-reverse" ); | |||||
| } | |||||
| if( encoding != null ) | |||||
| { | |||||
| cmd.createArgument().setValue( "-encoding" ); | |||||
| cmd.createArgument().setValue( encoding ); | |||||
| } | |||||
| // Build the full file names | // Build the full file names | ||||
| srcFile = new File( srcDir, srcName ); | |||||
| destFile = new File( destDir, destName ); | |||||
| final File srcFile = new File( m_srcDir, srcName ); | |||||
| final File destFile = new File( m_destDir, destName ); | |||||
| cmd.createArgument().setFile( srcFile ); | |||||
| cmd.createArgument().setFile( destFile ); | |||||
| // Make sure we're not about to clobber something | // Make sure we're not about to clobber something | ||||
| if( srcFile.equals( destFile ) ) | if( srcFile.equals( destFile ) ) | ||||
| { | { | ||||
| @@ -210,51 +202,46 @@ public class Native2Ascii extends MatchingTask | |||||
| + " would overwrite its self" ); | + " would overwrite its self" ); | ||||
| } | } | ||||
| final Commandline cmd = buildCommand( srcFile, destFile ); | |||||
| // Make intermediate directories if needed | // Make intermediate directories if needed | ||||
| // XXX JDK 1.1 dosen't have File.getParentFile, | // XXX JDK 1.1 dosen't have File.getParentFile, | ||||
| String parentName = destFile.getParent(); | |||||
| if( parentName != null ) | |||||
| final File parent = destFile.getParentFile(); | |||||
| if( parent != null ) | |||||
| { | { | ||||
| File parentFile = new File( parentName ); | |||||
| if( ( !parentFile.exists() ) && ( !parentFile.mkdirs() ) ) | |||||
| if( ( !parent.exists() ) && ( !parent.mkdirs() ) ) | |||||
| { | { | ||||
| throw new TaskException( "cannot create parent directory " | |||||
| + parentName ); | |||||
| throw new TaskException( "cannot create parent directory " + parent ); | |||||
| } | } | ||||
| } | } | ||||
| getLogger().debug( "converting " + srcName ); | getLogger().debug( "converting " + srcName ); | ||||
| sun.tools.native2ascii.Main n2a | |||||
| = new sun.tools.native2ascii.Main(); | |||||
| sun.tools.native2ascii.Main n2a = new sun.tools.native2ascii.Main(); | |||||
| if( !n2a.convert( cmd.getArguments() ) ) | if( !n2a.convert( cmd.getArguments() ) ) | ||||
| { | { | ||||
| throw new TaskException( "conversion failed" ); | throw new TaskException( "conversion failed" ); | ||||
| } | } | ||||
| } | } | ||||
| private class ExtMapper implements FileNameMapper | |||||
| private Commandline buildCommand( final File srcFile, | |||||
| final File destFile ) | |||||
| { | { | ||||
| public void setFrom( String s ) | |||||
| final Commandline cmd = new Commandline();// Command line to run | |||||
| // Set up the basic args (this could be done once, but | |||||
| // it's cleaner here) | |||||
| if( m_reverse ) | |||||
| { | { | ||||
| cmd.createArgument().setValue( "-reverse" ); | |||||
| } | } | ||||
| public void setTo( String s ) | |||||
| if( m_encoding != null ) | |||||
| { | { | ||||
| cmd.createArgument().setValue( "-encoding" ); | |||||
| cmd.createArgument().setValue( m_encoding ); | |||||
| } | } | ||||
| public String[] mapFileName( String fileName ) | |||||
| { | |||||
| int lastDot = fileName.lastIndexOf( '.' ); | |||||
| if( lastDot >= 0 ) | |||||
| { | |||||
| return new String[]{fileName.substring( 0, lastDot ) + extension}; | |||||
| } | |||||
| else | |||||
| { | |||||
| return new String[]{fileName + extension}; | |||||
| } | |||||
| } | |||||
| cmd.createArgument().setFile( srcFile ); | |||||
| cmd.createArgument().setFile( destFile ); | |||||
| return cmd; | |||||
| } | } | ||||
| } | } | ||||
| @@ -0,0 +1,43 @@ | |||||
| /* | |||||
| * 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.optional; | |||||
| import org.apache.tools.ant.util.FileNameMapper; | |||||
| class ExtMapper | |||||
| implements FileNameMapper | |||||
| { | |||||
| private final String m_extension; | |||||
| public ExtMapper( final String extension ) | |||||
| { | |||||
| m_extension = extension; | |||||
| } | |||||
| public void setFrom( final String from ) | |||||
| { | |||||
| } | |||||
| public void setTo( final String to ) | |||||
| { | |||||
| } | |||||
| public String[] mapFileName( final String filename ) | |||||
| { | |||||
| final int index = filename.lastIndexOf( '.' ); | |||||
| if( index >= 0 ) | |||||
| { | |||||
| final String reult = filename.substring( 0, index ) + m_extension; | |||||
| return new String[]{reult}; | |||||
| } | |||||
| else | |||||
| { | |||||
| return new String[]{filename + m_extension}; | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -9,13 +9,13 @@ package org.apache.tools.ant.taskdefs.optional; | |||||
| import java.io.File; | import java.io.File; | ||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.taskdefs.MatchingTask; | import org.apache.tools.ant.taskdefs.MatchingTask; | ||||
| import org.apache.tools.ant.types.Commandline; | import org.apache.tools.ant.types.Commandline; | ||||
| import org.apache.tools.ant.types.DirectoryScanner; | |||||
| import org.apache.tools.ant.types.Mapper; | import org.apache.tools.ant.types.Mapper; | ||||
| import org.apache.tools.ant.types.SourceFileScanner; | |||||
| import org.apache.tools.ant.util.FileNameMapper; | import org.apache.tools.ant.util.FileNameMapper; | ||||
| import org.apache.tools.ant.util.IdentityMapper; | import org.apache.tools.ant.util.IdentityMapper; | ||||
| import org.apache.tools.ant.types.SourceFileScanner; | |||||
| /** | /** | ||||
| * Convert files from native encodings to ascii. | * Convert files from native encodings to ascii. | ||||
| @@ -23,25 +23,24 @@ import org.apache.tools.ant.types.SourceFileScanner; | |||||
| * @author <a href="asudell@acm.org">Drew Sudell</a> | * @author <a href="asudell@acm.org">Drew Sudell</a> | ||||
| * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | ||||
| */ | */ | ||||
| public class Native2Ascii extends MatchingTask | |||||
| public class Native2Ascii | |||||
| extends MatchingTask | |||||
| { | { | ||||
| private boolean reverse = false;// convert from ascii back to native | |||||
| private String encoding = null;// encoding to convert to/from | |||||
| private File srcDir = null;// Where to find input files | |||||
| private File destDir = null;// Where to put output files | |||||
| private String extension = null;// Extension of output files if different | |||||
| private Mapper mapper; | |||||
| private boolean m_reverse;// convert from ascii back to native | |||||
| private String m_encoding;// encoding to convert to/from | |||||
| private File m_srcDir;// Where to find input files | |||||
| private File m_destDir;// Where to put output files | |||||
| private String m_ext;// Extension of output files if different | |||||
| private Mapper m_mapper; | |||||
| /** | /** | ||||
| * Set the destination dirctory to place converted files into. | * Set the destination dirctory to place converted files into. | ||||
| * | * | ||||
| * @param destDir directory to place output file into. | * @param destDir directory to place output file into. | ||||
| */ | */ | ||||
| public void setDest( File destDir ) | |||||
| public void setDest( final File destDir ) | |||||
| { | { | ||||
| this.destDir = destDir; | |||||
| m_destDir = destDir; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -51,9 +50,9 @@ public class Native2Ascii extends MatchingTask | |||||
| * @param encoding String containing the name of the Native encoding to | * @param encoding String containing the name of the Native encoding to | ||||
| * convert from or to. | * convert from or to. | ||||
| */ | */ | ||||
| public void setEncoding( String encoding ) | |||||
| public void setEncoding( final String encoding ) | |||||
| { | { | ||||
| this.encoding = encoding; | |||||
| m_encoding = encoding; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -62,9 +61,9 @@ public class Native2Ascii extends MatchingTask | |||||
| * | * | ||||
| * @param ext File extension to use for converted files. | * @param ext File extension to use for converted files. | ||||
| */ | */ | ||||
| public void setExt( String ext ) | |||||
| public void setExt( final String ext ) | |||||
| { | { | ||||
| this.extension = ext; | |||||
| m_ext = ext; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -75,7 +74,7 @@ public class Native2Ascii extends MatchingTask | |||||
| */ | */ | ||||
| public void setReverse( boolean reverse ) | public void setReverse( boolean reverse ) | ||||
| { | { | ||||
| this.reverse = reverse; | |||||
| m_reverse = reverse; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -83,9 +82,9 @@ public class Native2Ascii extends MatchingTask | |||||
| * | * | ||||
| * @param srcDir Direcrory to find input file in. | * @param srcDir Direcrory to find input file in. | ||||
| */ | */ | ||||
| public void setSrc( File srcDir ) | |||||
| public void setSrc( final File srcDir ) | |||||
| { | { | ||||
| this.srcDir = srcDir; | |||||
| m_srcDir = srcDir; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -97,75 +96,88 @@ public class Native2Ascii extends MatchingTask | |||||
| public Mapper createMapper() | public Mapper createMapper() | ||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| if( mapper != null ) | |||||
| if( m_mapper != null ) | |||||
| { | { | ||||
| throw new TaskException( "Cannot define more than one mapper" ); | throw new TaskException( "Cannot define more than one mapper" ); | ||||
| } | } | ||||
| mapper = new Mapper(); | |||||
| return mapper; | |||||
| m_mapper = new Mapper(); | |||||
| return m_mapper; | |||||
| } | } | ||||
| public void execute() | public void execute() | ||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| validate(); | |||||
| Commandline baseCmd = null;// the common portion of our cmd line | |||||
| DirectoryScanner scanner = null;// Scanner to find our inputs | |||||
| String[] files;// list of files to process | |||||
| final DirectoryScanner scanner = getDirectoryScanner( m_srcDir ); | |||||
| String[] files = scanner.getIncludedFiles(); | |||||
| // default srcDir to basedir | |||||
| if( srcDir == null ) | |||||
| final SourceFileScanner sfs = new SourceFileScanner( this ); | |||||
| final FileNameMapper mapper = buildMapper(); | |||||
| files = sfs.restrict( files, m_srcDir, m_destDir, mapper ); | |||||
| int count = files.length; | |||||
| if( count == 0 ) | |||||
| { | { | ||||
| srcDir = getBaseDirectory(); | |||||
| return; | |||||
| } | } | ||||
| // Require destDir | |||||
| if( destDir == null ) | |||||
| { | |||||
| throw new TaskException( "The dest attribute must be set." ); | |||||
| } | |||||
| final String message = "Converting " + count + " file" + | |||||
| ( count != 1 ? "s" : "" ) + " from " + m_srcDir + " to " + | |||||
| m_destDir; | |||||
| getLogger().info( message ); | |||||
| // if src and dest dirs are the same, require the extension | |||||
| // to be set, so we don't stomp every file. One could still | |||||
| // include a file with the same extension, but .... | |||||
| if( srcDir.equals( destDir ) && extension == null && mapper == null ) | |||||
| for( int i = 0; i < files.length; i++ ) | |||||
| { | { | ||||
| throw new TaskException( "The ext attribute or a mapper must be set if" | |||||
| + " src and dest dirs are the same." ); | |||||
| final String name = mapper.mapFileName( files[ i ] )[ 0 ]; | |||||
| convert( files[ i ], name ); | |||||
| } | } | ||||
| } | |||||
| FileNameMapper m = null; | |||||
| if( mapper == null ) | |||||
| private FileNameMapper buildMapper() | |||||
| throws TaskException | |||||
| { | |||||
| FileNameMapper mapper = null; | |||||
| if( m_mapper == null ) | |||||
| { | { | ||||
| if( extension == null ) | |||||
| if( m_ext == null ) | |||||
| { | { | ||||
| m = new IdentityMapper(); | |||||
| mapper = new IdentityMapper(); | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| m = new ExtMapper(); | |||||
| mapper = new ExtMapper( m_ext ); | |||||
| } | } | ||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| m = mapper.getImplementation(); | |||||
| mapper = m_mapper.getImplementation(); | |||||
| } | } | ||||
| scanner = getDirectoryScanner( srcDir ); | |||||
| files = scanner.getIncludedFiles(); | |||||
| SourceFileScanner sfs = new SourceFileScanner( this ); | |||||
| files = sfs.restrict( files, srcDir, destDir, m ); | |||||
| int count = files.length; | |||||
| if( count == 0 ) | |||||
| return mapper; | |||||
| } | |||||
| private void validate() | |||||
| throws TaskException | |||||
| { | |||||
| // Require destDir | |||||
| if( m_destDir == null ) | |||||
| { | { | ||||
| return; | |||||
| throw new TaskException( "The dest attribute must be set." ); | |||||
| } | } | ||||
| String message = "Converting " + count + " file" | |||||
| + ( count != 1 ? "s" : "" ) + " from "; | |||||
| getLogger().info( message + srcDir + " to " + destDir ); | |||||
| for( int i = 0; i < files.length; i++ ) | |||||
| // if src and dest dirs are the same, require the extension | |||||
| // to be set, so we don't stomp every file. One could still | |||||
| // include a file with the same extension, but .... | |||||
| if( m_srcDir.equals( m_destDir ) && m_ext == null && m_mapper == null ) | |||||
| { | |||||
| throw new TaskException( "The ext attribute or a mapper must be set if" + | |||||
| " src and dest dirs are the same." ); | |||||
| } | |||||
| // default srcDir to basedir | |||||
| if( m_srcDir == null ) | |||||
| { | { | ||||
| convert( files[ i ], m.mapFileName( files[ i ] )[ 0 ] ); | |||||
| m_srcDir = getBaseDirectory(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -179,30 +191,10 @@ public class Native2Ascii extends MatchingTask | |||||
| private void convert( String srcName, String destName ) | private void convert( String srcName, String destName ) | ||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| Commandline cmd = new Commandline();// Command line to run | |||||
| File srcFile;// File to convert | |||||
| File destFile;// where to put the results | |||||
| // Set up the basic args (this could be done once, but | |||||
| // it's cleaner here) | |||||
| if( reverse ) | |||||
| { | |||||
| cmd.createArgument().setValue( "-reverse" ); | |||||
| } | |||||
| if( encoding != null ) | |||||
| { | |||||
| cmd.createArgument().setValue( "-encoding" ); | |||||
| cmd.createArgument().setValue( encoding ); | |||||
| } | |||||
| // Build the full file names | // Build the full file names | ||||
| srcFile = new File( srcDir, srcName ); | |||||
| destFile = new File( destDir, destName ); | |||||
| final File srcFile = new File( m_srcDir, srcName ); | |||||
| final File destFile = new File( m_destDir, destName ); | |||||
| cmd.createArgument().setFile( srcFile ); | |||||
| cmd.createArgument().setFile( destFile ); | |||||
| // Make sure we're not about to clobber something | // Make sure we're not about to clobber something | ||||
| if( srcFile.equals( destFile ) ) | if( srcFile.equals( destFile ) ) | ||||
| { | { | ||||
| @@ -210,51 +202,46 @@ public class Native2Ascii extends MatchingTask | |||||
| + " would overwrite its self" ); | + " would overwrite its self" ); | ||||
| } | } | ||||
| final Commandline cmd = buildCommand( srcFile, destFile ); | |||||
| // Make intermediate directories if needed | // Make intermediate directories if needed | ||||
| // XXX JDK 1.1 dosen't have File.getParentFile, | // XXX JDK 1.1 dosen't have File.getParentFile, | ||||
| String parentName = destFile.getParent(); | |||||
| if( parentName != null ) | |||||
| final File parent = destFile.getParentFile(); | |||||
| if( parent != null ) | |||||
| { | { | ||||
| File parentFile = new File( parentName ); | |||||
| if( ( !parentFile.exists() ) && ( !parentFile.mkdirs() ) ) | |||||
| if( ( !parent.exists() ) && ( !parent.mkdirs() ) ) | |||||
| { | { | ||||
| throw new TaskException( "cannot create parent directory " | |||||
| + parentName ); | |||||
| throw new TaskException( "cannot create parent directory " + parent ); | |||||
| } | } | ||||
| } | } | ||||
| getLogger().debug( "converting " + srcName ); | getLogger().debug( "converting " + srcName ); | ||||
| sun.tools.native2ascii.Main n2a | |||||
| = new sun.tools.native2ascii.Main(); | |||||
| sun.tools.native2ascii.Main n2a = new sun.tools.native2ascii.Main(); | |||||
| if( !n2a.convert( cmd.getArguments() ) ) | if( !n2a.convert( cmd.getArguments() ) ) | ||||
| { | { | ||||
| throw new TaskException( "conversion failed" ); | throw new TaskException( "conversion failed" ); | ||||
| } | } | ||||
| } | } | ||||
| private class ExtMapper implements FileNameMapper | |||||
| private Commandline buildCommand( final File srcFile, | |||||
| final File destFile ) | |||||
| { | { | ||||
| public void setFrom( String s ) | |||||
| final Commandline cmd = new Commandline();// Command line to run | |||||
| // Set up the basic args (this could be done once, but | |||||
| // it's cleaner here) | |||||
| if( m_reverse ) | |||||
| { | { | ||||
| cmd.createArgument().setValue( "-reverse" ); | |||||
| } | } | ||||
| public void setTo( String s ) | |||||
| if( m_encoding != null ) | |||||
| { | { | ||||
| cmd.createArgument().setValue( "-encoding" ); | |||||
| cmd.createArgument().setValue( m_encoding ); | |||||
| } | } | ||||
| public String[] mapFileName( String fileName ) | |||||
| { | |||||
| int lastDot = fileName.lastIndexOf( '.' ); | |||||
| if( lastDot >= 0 ) | |||||
| { | |||||
| return new String[]{fileName.substring( 0, lastDot ) + extension}; | |||||
| } | |||||
| else | |||||
| { | |||||
| return new String[]{fileName + extension}; | |||||
| } | |||||
| } | |||||
| cmd.createArgument().setFile( srcFile ); | |||||
| cmd.createArgument().setFile( destFile ); | |||||
| return cmd; | |||||
| } | } | ||||
| } | } | ||||