All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.codehaus.plexus.archiver.tar.TarUnArchiver Maven / Gradle / Ivy

/**
 *
 * Copyright 2004 The Apache Software Foundation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.codehaus.plexus.archiver.tar;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.GZIPInputStream;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
import org.apache.commons.compress.compressors.xz.XZCompressorInputStream;
import org.codehaus.plexus.archiver.AbstractUnArchiver;
import org.codehaus.plexus.archiver.ArchiverException;
import org.codehaus.plexus.archiver.util.Streams;
import org.codehaus.plexus.util.IOUtil;
import org.iq80.snappy.SnappyInputStream;

/**
 * @author Emmanuel Venisse
 */
public class TarUnArchiver
    extends AbstractUnArchiver
{

    public TarUnArchiver()
    {
    }

    public TarUnArchiver( File sourceFile )
    {
        super( sourceFile );
    }

    /**
     * compression method
     */
    private UntarCompressionMethod compression = UntarCompressionMethod.NONE;

    /**
     * Set decompression algorithm to use; default=none.
     * 

* Allowable values are *

    *
  • none - no compression
  • *
  • gzip - Gzip compression
  • *
  • bzip2 - Bzip2 compression
  • *
  • snappy - Snappy compression
  • *
  • xz - Xz compression
  • *
* * @param method compression method */ public void setCompression( UntarCompressionMethod method ) { compression = method; } /** * No encoding support in Untar. */ public void setEncoding( String encoding ) { getLogger().warn( "The TarUnArchiver doesn't support the encoding attribute" ); } @Override protected void execute() throws ArchiverException { execute( getSourceFile(), getDestDirectory() ); } @Override protected void execute( String path, File outputDirectory ) { execute( new File( path ), getDestDirectory() ); } protected void execute( File sourceFile, File destDirectory ) throws ArchiverException { TarArchiveInputStream tis = null; try { getLogger().info( "Expanding: " + sourceFile + " into " + destDirectory ); TarFile tarFile = new TarFile( sourceFile ); tis = new TarArchiveInputStream( decompress( compression, sourceFile, new BufferedInputStream( new FileInputStream( sourceFile ) ) ) ); TarArchiveEntry te; while ( ( te = tis.getNextTarEntry() ) != null ) { TarResource fileInfo = new TarResource( tarFile, te ); if ( isSelected( te.getName(), fileInfo ) ) { final String symlinkDestination = te.isSymbolicLink() ? te.getLinkName() : null; extractFile( sourceFile, destDirectory, tis, te.getName(), te.getModTime(), te.isDirectory(), te.getMode() != 0 ? te.getMode() : null, symlinkDestination ); } } getLogger().debug( "expand complete" ); tis.close(); tis = null; } catch ( IOException ioe ) { throw new ArchiverException( "Error while expanding " + sourceFile.getAbsolutePath(), ioe ); } finally { IOUtil.close( tis ); } } /** * This method wraps the input stream with the * corresponding decompression method * * @param file provides location information for BuildException * @param istream input stream * * @return input stream with on-the-fly decompression * * @throws IOException thrown by GZIPInputStream constructor */ private InputStream decompress( UntarCompressionMethod compression, final File file, final InputStream istream ) throws IOException, ArchiverException { if ( compression == UntarCompressionMethod.GZIP ) { return Streams.bufferedInputStream( new GZIPInputStream( istream ) ); } else if ( compression == UntarCompressionMethod.BZIP2 ) { return new BZip2CompressorInputStream( istream ); } else if ( compression == UntarCompressionMethod.SNAPPY ) { return new SnappyInputStream( istream, true ); } else if ( compression == UntarCompressionMethod.XZ ) { return new XZCompressorInputStream( istream ); } return istream; } /** * Valid Modes for Compression attribute to Untar Task */ public static enum UntarCompressionMethod { NONE( "none" ), GZIP( "gzip" ), BZIP2( "bzip2" ), SNAPPY( "snappy" ), XZ( "xz" ); final String value; /** * Constructor */ UntarCompressionMethod( String value ) { this.value = value; } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy