Browse Source

Cleanup Native2Ascii a little and extract inner class to be a top-level class.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270721 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Donald 23 years ago
parent
commit
9bed3906ff
4 changed files with 270 additions and 210 deletions
  1. +43
    -0
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/ExtMapper.java
  2. +92
    -105
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/Native2Ascii.java
  3. +43
    -0
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/ExtMapper.java
  4. +92
    -105
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/Native2Ascii.java

+ 43
- 0
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/ExtMapper.java View File

@@ -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};
}
}
}

+ 92
- 105
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/Native2Ascii.java View File

@@ -9,13 +9,13 @@ package org.apache.tools.ant.taskdefs.optional;

import java.io.File;
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.types.Commandline;
import org.apache.tools.ant.types.DirectoryScanner;
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.IdentityMapper;
import org.apache.tools.ant.types.SourceFileScanner;

/**
* 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="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.
*
* @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
* 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.
*/
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 )
{
this.reverse = reverse;
m_reverse = reverse;
}

/**
@@ -83,9 +82,9 @@ public class Native2Ascii extends MatchingTask
*
* @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()
throws TaskException
{
if( mapper != null )
if( m_mapper != null )
{
throw new TaskException( "Cannot define more than one mapper" );
}
mapper = new Mapper();
return mapper;
m_mapper = new Mapper();
return m_mapper;
}

public void execute()
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
{
m = new ExtMapper();
mapper = new ExtMapper( m_ext );
}
}
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 )
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
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
if( srcFile.equals( destFile ) )
{
@@ -210,51 +202,46 @@ public class Native2Ascii extends MatchingTask
+ " would overwrite its self" );
}

final Commandline cmd = buildCommand( srcFile, destFile );

// Make intermediate directories if needed
// 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 );
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() ) )
{
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;
}
}

+ 43
- 0
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/ExtMapper.java View File

@@ -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};
}
}
}

+ 92
- 105
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/Native2Ascii.java View File

@@ -9,13 +9,13 @@ package org.apache.tools.ant.taskdefs.optional;

import java.io.File;
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.types.Commandline;
import org.apache.tools.ant.types.DirectoryScanner;
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.IdentityMapper;
import org.apache.tools.ant.types.SourceFileScanner;

/**
* 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="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.
*
* @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
* 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.
*/
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 )
{
this.reverse = reverse;
m_reverse = reverse;
}

/**
@@ -83,9 +82,9 @@ public class Native2Ascii extends MatchingTask
*
* @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()
throws TaskException
{
if( mapper != null )
if( m_mapper != null )
{
throw new TaskException( "Cannot define more than one mapper" );
}
mapper = new Mapper();
return mapper;
m_mapper = new Mapper();
return m_mapper;
}

public void execute()
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
{
m = new ExtMapper();
mapper = new ExtMapper( m_ext );
}
}
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 )
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
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
if( srcFile.equals( destFile ) )
{
@@ -210,51 +202,46 @@ public class Native2Ascii extends MatchingTask
+ " would overwrite its self" );
}

final Commandline cmd = buildCommand( srcFile, destFile );

// Make intermediate directories if needed
// 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 );
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() ) )
{
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;
}
}

Loading…
Cancel
Save