git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270783 13f79535-47bb-0310-9956-ffa450edef68master
@@ -7,10 +7,8 @@ | |||
*/ | |||
package org.apache.tools.ant.taskdefs; | |||
import java.io.BufferedInputStream; | |||
import java.io.FileInputStream; | |||
import java.io.FileOutputStream; | |||
import java.io.IOException; | |||
import java.io.InputStream; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.tools.bzip2.CBZip2InputStream; | |||
@@ -20,10 +18,9 @@ import org.apache.tools.bzip2.CBZip2InputStream; | |||
* | |||
* @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a> | |||
*/ | |||
public class BUnzip2 extends Unpack | |||
public class BUnzip2 | |||
extends Unpack | |||
{ | |||
private final static String DEFAULT_EXTENSION = ".bz2"; | |||
protected String getDefaultExtension() | |||
@@ -31,90 +28,17 @@ public class BUnzip2 extends Unpack | |||
return DEFAULT_EXTENSION; | |||
} | |||
protected void extract() | |||
throws TaskException | |||
protected InputStream getUnpackingStream( final InputStream input ) | |||
throws TaskException, IOException | |||
{ | |||
if( source.lastModified() > dest.lastModified() ) | |||
final int b1 = input.read(); | |||
final int b2 = input.read(); | |||
if( b1 != 'B' || b2 != 'Z' ) | |||
{ | |||
getLogger().info( "Expanding " + source.getAbsolutePath() + " to " | |||
+ dest.getAbsolutePath() ); | |||
FileOutputStream out = null; | |||
CBZip2InputStream zIn = null; | |||
FileInputStream fis = null; | |||
BufferedInputStream bis = null; | |||
try | |||
{ | |||
out = new FileOutputStream( dest ); | |||
fis = new FileInputStream( source ); | |||
bis = new BufferedInputStream( fis ); | |||
int b = bis.read(); | |||
if( b != 'B' ) | |||
{ | |||
throw new TaskException( "Invalid bz2 file." ); | |||
} | |||
b = bis.read(); | |||
if( b != 'Z' ) | |||
{ | |||
throw new TaskException( "Invalid bz2 file." ); | |||
} | |||
zIn = new CBZip2InputStream( bis ); | |||
byte[] buffer = new byte[ 8 * 1024 ]; | |||
int count = 0; | |||
do | |||
{ | |||
out.write( buffer, 0, count ); | |||
count = zIn.read( buffer, 0, buffer.length ); | |||
} while( count != -1 ); | |||
} | |||
catch( IOException ioe ) | |||
{ | |||
String msg = "Problem expanding bzip2 " + ioe.getMessage(); | |||
throw new TaskException( msg, ioe ); | |||
} | |||
finally | |||
{ | |||
if( bis != null ) | |||
{ | |||
try | |||
{ | |||
bis.close(); | |||
} | |||
catch( IOException ioex ) | |||
{ | |||
} | |||
} | |||
if( fis != null ) | |||
{ | |||
try | |||
{ | |||
fis.close(); | |||
} | |||
catch( IOException ioex ) | |||
{ | |||
} | |||
} | |||
if( out != null ) | |||
{ | |||
try | |||
{ | |||
out.close(); | |||
} | |||
catch( IOException ioex ) | |||
{ | |||
} | |||
} | |||
if( zIn != null ) | |||
{ | |||
try | |||
{ | |||
zIn.close(); | |||
} | |||
catch( IOException ioex ) | |||
{ | |||
} | |||
} | |||
} | |||
final String message = "Invalid bz2 file."; | |||
throw new TaskException( message ); | |||
} | |||
return new CBZip2InputStream( input ); | |||
} | |||
} |
@@ -7,9 +7,8 @@ | |||
*/ | |||
package org.apache.tools.ant.taskdefs; | |||
import java.io.FileInputStream; | |||
import java.io.FileOutputStream; | |||
import java.io.IOException; | |||
import java.io.InputStream; | |||
import java.util.zip.GZIPInputStream; | |||
import org.apache.myrmidon.api.TaskException; | |||
@@ -20,10 +19,9 @@ import org.apache.myrmidon.api.TaskException; | |||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
* @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a> | |||
*/ | |||
public class GUnzip extends Unpack | |||
public class GUnzip | |||
extends Unpack | |||
{ | |||
private final static String DEFAULT_EXTENSION = ".gz"; | |||
protected String getDefaultExtension() | |||
@@ -31,68 +29,9 @@ public class GUnzip extends Unpack | |||
return DEFAULT_EXTENSION; | |||
} | |||
protected void extract() | |||
throws TaskException | |||
protected InputStream getUnpackingStream( InputStream input ) | |||
throws TaskException, IOException | |||
{ | |||
if( source.lastModified() > dest.lastModified() ) | |||
{ | |||
getLogger().info( "Expanding " + source.getAbsolutePath() + " to " | |||
+ dest.getAbsolutePath() ); | |||
FileOutputStream out = null; | |||
GZIPInputStream zIn = null; | |||
FileInputStream fis = null; | |||
try | |||
{ | |||
out = new FileOutputStream( dest ); | |||
fis = new FileInputStream( source ); | |||
zIn = new GZIPInputStream( fis ); | |||
byte[] buffer = new byte[ 8 * 1024 ]; | |||
int count = 0; | |||
do | |||
{ | |||
out.write( buffer, 0, count ); | |||
count = zIn.read( buffer, 0, buffer.length ); | |||
} while( count != -1 ); | |||
} | |||
catch( IOException ioe ) | |||
{ | |||
String msg = "Problem expanding gzip " + ioe.getMessage(); | |||
throw new TaskException( msg, ioe ); | |||
} | |||
finally | |||
{ | |||
if( fis != null ) | |||
{ | |||
try | |||
{ | |||
fis.close(); | |||
} | |||
catch( IOException ioex ) | |||
{ | |||
} | |||
} | |||
if( out != null ) | |||
{ | |||
try | |||
{ | |||
out.close(); | |||
} | |||
catch( IOException ioex ) | |||
{ | |||
} | |||
} | |||
if( zIn != null ) | |||
{ | |||
try | |||
{ | |||
zIn.close(); | |||
} | |||
catch( IOException ioex ) | |||
{ | |||
} | |||
} | |||
} | |||
} | |||
return new GZIPInputStream( input ); | |||
} | |||
} |
@@ -8,89 +8,147 @@ | |||
package org.apache.tools.ant.taskdefs; | |||
import java.io.File; | |||
import java.io.FileInputStream; | |||
import java.io.FileOutputStream; | |||
import java.io.IOException; | |||
import java.io.InputStream; | |||
import java.io.OutputStream; | |||
import org.apache.avalon.excalibur.io.IOUtil; | |||
import org.apache.myrmidon.api.AbstractTask; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.tools.ant.Task; | |||
/** | |||
* Abstract Base class for unpack tasks. | |||
* | |||
* @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a> | |||
* @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
*/ | |||
public abstract class Unpack extends Task | |||
public abstract class Unpack | |||
extends AbstractTask | |||
{ | |||
protected File dest; | |||
protected File source; | |||
private File m_dest; | |||
private File m_src; | |||
public void setDest( String dest ) | |||
throws TaskException | |||
public void setDest( final File dest ) | |||
{ | |||
this.dest = resolveFile( dest ); | |||
m_dest = dest; | |||
} | |||
public void setSrc( String src ) | |||
throws TaskException | |||
public void setSrc( final File src ) | |||
{ | |||
source = resolveFile( src ); | |||
m_src = src; | |||
} | |||
public void execute() | |||
throws TaskException | |||
{ | |||
validate(); | |||
extract(); | |||
final File source = getSrc(); | |||
final File dest = getDest(); | |||
if( source.lastModified() > dest.lastModified() ) | |||
{ | |||
final String message = "Expanding " + source.getAbsolutePath() + | |||
" to " + dest.getAbsolutePath(); | |||
getLogger().info( message ); | |||
extract(); | |||
} | |||
} | |||
protected abstract String getDefaultExtension(); | |||
protected abstract void extract() | |||
throws TaskException; | |||
protected abstract InputStream getUnpackingStream( InputStream input ) | |||
throws TaskException, IOException; | |||
private void extract() | |||
throws TaskException | |||
{ | |||
OutputStream output = null; | |||
InputStream input = null; | |||
InputStream fileInput = null; | |||
try | |||
{ | |||
output = new FileOutputStream( getDest() ); | |||
fileInput = new FileInputStream( getSrc() ); | |||
input = getUnpackingStream( fileInput ); | |||
IOUtil.copy( input, output ); | |||
} | |||
catch( final IOException ioe ) | |||
{ | |||
final String message = "Problem expanding " + getSrc() + | |||
":" + ioe.getMessage(); | |||
throw new TaskException( message, ioe ); | |||
} | |||
finally | |||
{ | |||
IOUtil.shutdownStream( fileInput ); | |||
IOUtil.shutdownStream( output ); | |||
IOUtil.shutdownStream( input ); | |||
} | |||
} | |||
private void createDestFile( String defaultExtension ) | |||
private File createDestFile() | |||
{ | |||
String sourceName = source.getName(); | |||
int len = sourceName.length(); | |||
if( defaultExtension != null | |||
&& len > defaultExtension.length() | |||
&& defaultExtension.equalsIgnoreCase( sourceName.substring( len - defaultExtension.length() ) ) ) | |||
final String extension = getDefaultExtension(); | |||
final String sourceName = m_src.getName(); | |||
final int length = sourceName.length(); | |||
final int index = length - extension.length(); | |||
if( null != extension && | |||
length > extension.length() && | |||
extension.equalsIgnoreCase( sourceName.substring( index ) ) ) | |||
{ | |||
dest = new File( dest, sourceName.substring( 0, | |||
len - defaultExtension.length() ) ); | |||
final String child = sourceName.substring( 0, index ); | |||
return new File( m_dest, child ); | |||
} | |||
else | |||
{ | |||
dest = new File( dest, sourceName ); | |||
return new File( m_dest, sourceName ); | |||
} | |||
} | |||
private void validate() | |||
throws TaskException | |||
{ | |||
if( source == null ) | |||
if( null == m_src ) | |||
{ | |||
throw new TaskException( "No Src for gunzip specified" ); | |||
final String message = "No Src for " + getName() + " specified"; | |||
throw new TaskException( message ); | |||
} | |||
if( !source.exists() ) | |||
if( !m_src.exists() ) | |||
{ | |||
throw new TaskException( "Src doesn't exist" ); | |||
final String message = "Src doesn't exist"; | |||
throw new TaskException( message ); | |||
} | |||
if( source.isDirectory() ) | |||
if( m_src.isDirectory() ) | |||
{ | |||
throw new TaskException( "Cannot expand a directory" ); | |||
final String message = "Cannot expand a directory"; | |||
throw new TaskException( message ); | |||
} | |||
if( dest == null ) | |||
if( null == m_dest ) | |||
{ | |||
dest = new File( source.getParent() ); | |||
m_dest = new File( m_src.getParent() ); | |||
} | |||
if( dest.isDirectory() ) | |||
if( m_dest.isDirectory() ) | |||
{ | |||
String defaultExtension = getDefaultExtension(); | |||
createDestFile( defaultExtension ); | |||
m_dest = createDestFile(); | |||
} | |||
} | |||
protected final File getDest() | |||
{ | |||
return m_dest; | |||
} | |||
protected final File getSrc() | |||
{ | |||
return m_src; | |||
} | |||
} |
@@ -7,10 +7,8 @@ | |||
*/ | |||
package org.apache.tools.ant.taskdefs; | |||
import java.io.BufferedInputStream; | |||
import java.io.FileInputStream; | |||
import java.io.FileOutputStream; | |||
import java.io.IOException; | |||
import java.io.InputStream; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.tools.bzip2.CBZip2InputStream; | |||
@@ -20,10 +18,9 @@ import org.apache.tools.bzip2.CBZip2InputStream; | |||
* | |||
* @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a> | |||
*/ | |||
public class BUnzip2 extends Unpack | |||
public class BUnzip2 | |||
extends Unpack | |||
{ | |||
private final static String DEFAULT_EXTENSION = ".bz2"; | |||
protected String getDefaultExtension() | |||
@@ -31,90 +28,17 @@ public class BUnzip2 extends Unpack | |||
return DEFAULT_EXTENSION; | |||
} | |||
protected void extract() | |||
throws TaskException | |||
protected InputStream getUnpackingStream( final InputStream input ) | |||
throws TaskException, IOException | |||
{ | |||
if( source.lastModified() > dest.lastModified() ) | |||
final int b1 = input.read(); | |||
final int b2 = input.read(); | |||
if( b1 != 'B' || b2 != 'Z' ) | |||
{ | |||
getLogger().info( "Expanding " + source.getAbsolutePath() + " to " | |||
+ dest.getAbsolutePath() ); | |||
FileOutputStream out = null; | |||
CBZip2InputStream zIn = null; | |||
FileInputStream fis = null; | |||
BufferedInputStream bis = null; | |||
try | |||
{ | |||
out = new FileOutputStream( dest ); | |||
fis = new FileInputStream( source ); | |||
bis = new BufferedInputStream( fis ); | |||
int b = bis.read(); | |||
if( b != 'B' ) | |||
{ | |||
throw new TaskException( "Invalid bz2 file." ); | |||
} | |||
b = bis.read(); | |||
if( b != 'Z' ) | |||
{ | |||
throw new TaskException( "Invalid bz2 file." ); | |||
} | |||
zIn = new CBZip2InputStream( bis ); | |||
byte[] buffer = new byte[ 8 * 1024 ]; | |||
int count = 0; | |||
do | |||
{ | |||
out.write( buffer, 0, count ); | |||
count = zIn.read( buffer, 0, buffer.length ); | |||
} while( count != -1 ); | |||
} | |||
catch( IOException ioe ) | |||
{ | |||
String msg = "Problem expanding bzip2 " + ioe.getMessage(); | |||
throw new TaskException( msg, ioe ); | |||
} | |||
finally | |||
{ | |||
if( bis != null ) | |||
{ | |||
try | |||
{ | |||
bis.close(); | |||
} | |||
catch( IOException ioex ) | |||
{ | |||
} | |||
} | |||
if( fis != null ) | |||
{ | |||
try | |||
{ | |||
fis.close(); | |||
} | |||
catch( IOException ioex ) | |||
{ | |||
} | |||
} | |||
if( out != null ) | |||
{ | |||
try | |||
{ | |||
out.close(); | |||
} | |||
catch( IOException ioex ) | |||
{ | |||
} | |||
} | |||
if( zIn != null ) | |||
{ | |||
try | |||
{ | |||
zIn.close(); | |||
} | |||
catch( IOException ioex ) | |||
{ | |||
} | |||
} | |||
} | |||
final String message = "Invalid bz2 file."; | |||
throw new TaskException( message ); | |||
} | |||
return new CBZip2InputStream( input ); | |||
} | |||
} |
@@ -7,9 +7,8 @@ | |||
*/ | |||
package org.apache.tools.ant.taskdefs; | |||
import java.io.FileInputStream; | |||
import java.io.FileOutputStream; | |||
import java.io.IOException; | |||
import java.io.InputStream; | |||
import java.util.zip.GZIPInputStream; | |||
import org.apache.myrmidon.api.TaskException; | |||
@@ -20,10 +19,9 @@ import org.apache.myrmidon.api.TaskException; | |||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
* @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a> | |||
*/ | |||
public class GUnzip extends Unpack | |||
public class GUnzip | |||
extends Unpack | |||
{ | |||
private final static String DEFAULT_EXTENSION = ".gz"; | |||
protected String getDefaultExtension() | |||
@@ -31,68 +29,9 @@ public class GUnzip extends Unpack | |||
return DEFAULT_EXTENSION; | |||
} | |||
protected void extract() | |||
throws TaskException | |||
protected InputStream getUnpackingStream( InputStream input ) | |||
throws TaskException, IOException | |||
{ | |||
if( source.lastModified() > dest.lastModified() ) | |||
{ | |||
getLogger().info( "Expanding " + source.getAbsolutePath() + " to " | |||
+ dest.getAbsolutePath() ); | |||
FileOutputStream out = null; | |||
GZIPInputStream zIn = null; | |||
FileInputStream fis = null; | |||
try | |||
{ | |||
out = new FileOutputStream( dest ); | |||
fis = new FileInputStream( source ); | |||
zIn = new GZIPInputStream( fis ); | |||
byte[] buffer = new byte[ 8 * 1024 ]; | |||
int count = 0; | |||
do | |||
{ | |||
out.write( buffer, 0, count ); | |||
count = zIn.read( buffer, 0, buffer.length ); | |||
} while( count != -1 ); | |||
} | |||
catch( IOException ioe ) | |||
{ | |||
String msg = "Problem expanding gzip " + ioe.getMessage(); | |||
throw new TaskException( msg, ioe ); | |||
} | |||
finally | |||
{ | |||
if( fis != null ) | |||
{ | |||
try | |||
{ | |||
fis.close(); | |||
} | |||
catch( IOException ioex ) | |||
{ | |||
} | |||
} | |||
if( out != null ) | |||
{ | |||
try | |||
{ | |||
out.close(); | |||
} | |||
catch( IOException ioex ) | |||
{ | |||
} | |||
} | |||
if( zIn != null ) | |||
{ | |||
try | |||
{ | |||
zIn.close(); | |||
} | |||
catch( IOException ioex ) | |||
{ | |||
} | |||
} | |||
} | |||
} | |||
return new GZIPInputStream( input ); | |||
} | |||
} |
@@ -8,89 +8,147 @@ | |||
package org.apache.tools.ant.taskdefs; | |||
import java.io.File; | |||
import java.io.FileInputStream; | |||
import java.io.FileOutputStream; | |||
import java.io.IOException; | |||
import java.io.InputStream; | |||
import java.io.OutputStream; | |||
import org.apache.avalon.excalibur.io.IOUtil; | |||
import org.apache.myrmidon.api.AbstractTask; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.tools.ant.Task; | |||
/** | |||
* Abstract Base class for unpack tasks. | |||
* | |||
* @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a> | |||
* @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
*/ | |||
public abstract class Unpack extends Task | |||
public abstract class Unpack | |||
extends AbstractTask | |||
{ | |||
protected File dest; | |||
protected File source; | |||
private File m_dest; | |||
private File m_src; | |||
public void setDest( String dest ) | |||
throws TaskException | |||
public void setDest( final File dest ) | |||
{ | |||
this.dest = resolveFile( dest ); | |||
m_dest = dest; | |||
} | |||
public void setSrc( String src ) | |||
throws TaskException | |||
public void setSrc( final File src ) | |||
{ | |||
source = resolveFile( src ); | |||
m_src = src; | |||
} | |||
public void execute() | |||
throws TaskException | |||
{ | |||
validate(); | |||
extract(); | |||
final File source = getSrc(); | |||
final File dest = getDest(); | |||
if( source.lastModified() > dest.lastModified() ) | |||
{ | |||
final String message = "Expanding " + source.getAbsolutePath() + | |||
" to " + dest.getAbsolutePath(); | |||
getLogger().info( message ); | |||
extract(); | |||
} | |||
} | |||
protected abstract String getDefaultExtension(); | |||
protected abstract void extract() | |||
throws TaskException; | |||
protected abstract InputStream getUnpackingStream( InputStream input ) | |||
throws TaskException, IOException; | |||
private void extract() | |||
throws TaskException | |||
{ | |||
OutputStream output = null; | |||
InputStream input = null; | |||
InputStream fileInput = null; | |||
try | |||
{ | |||
output = new FileOutputStream( getDest() ); | |||
fileInput = new FileInputStream( getSrc() ); | |||
input = getUnpackingStream( fileInput ); | |||
IOUtil.copy( input, output ); | |||
} | |||
catch( final IOException ioe ) | |||
{ | |||
final String message = "Problem expanding " + getSrc() + | |||
":" + ioe.getMessage(); | |||
throw new TaskException( message, ioe ); | |||
} | |||
finally | |||
{ | |||
IOUtil.shutdownStream( fileInput ); | |||
IOUtil.shutdownStream( output ); | |||
IOUtil.shutdownStream( input ); | |||
} | |||
} | |||
private void createDestFile( String defaultExtension ) | |||
private File createDestFile() | |||
{ | |||
String sourceName = source.getName(); | |||
int len = sourceName.length(); | |||
if( defaultExtension != null | |||
&& len > defaultExtension.length() | |||
&& defaultExtension.equalsIgnoreCase( sourceName.substring( len - defaultExtension.length() ) ) ) | |||
final String extension = getDefaultExtension(); | |||
final String sourceName = m_src.getName(); | |||
final int length = sourceName.length(); | |||
final int index = length - extension.length(); | |||
if( null != extension && | |||
length > extension.length() && | |||
extension.equalsIgnoreCase( sourceName.substring( index ) ) ) | |||
{ | |||
dest = new File( dest, sourceName.substring( 0, | |||
len - defaultExtension.length() ) ); | |||
final String child = sourceName.substring( 0, index ); | |||
return new File( m_dest, child ); | |||
} | |||
else | |||
{ | |||
dest = new File( dest, sourceName ); | |||
return new File( m_dest, sourceName ); | |||
} | |||
} | |||
private void validate() | |||
throws TaskException | |||
{ | |||
if( source == null ) | |||
if( null == m_src ) | |||
{ | |||
throw new TaskException( "No Src for gunzip specified" ); | |||
final String message = "No Src for " + getName() + " specified"; | |||
throw new TaskException( message ); | |||
} | |||
if( !source.exists() ) | |||
if( !m_src.exists() ) | |||
{ | |||
throw new TaskException( "Src doesn't exist" ); | |||
final String message = "Src doesn't exist"; | |||
throw new TaskException( message ); | |||
} | |||
if( source.isDirectory() ) | |||
if( m_src.isDirectory() ) | |||
{ | |||
throw new TaskException( "Cannot expand a directory" ); | |||
final String message = "Cannot expand a directory"; | |||
throw new TaskException( message ); | |||
} | |||
if( dest == null ) | |||
if( null == m_dest ) | |||
{ | |||
dest = new File( source.getParent() ); | |||
m_dest = new File( m_src.getParent() ); | |||
} | |||
if( dest.isDirectory() ) | |||
if( m_dest.isDirectory() ) | |||
{ | |||
String defaultExtension = getDefaultExtension(); | |||
createDestFile( defaultExtension ); | |||
m_dest = createDestFile(); | |||
} | |||
} | |||
protected final File getDest() | |||
{ | |||
return m_dest; | |||
} | |||
protected final File getSrc() | |||
{ | |||
return m_src; | |||
} | |||
} |