View Javadoc
1   /**
2    *
3    * Copyright 2004 The Apache Software Foundation
4    *
5    * Licensed under the Apache License, Version 2.0 (the "License");
6    * you may not use this file except in compliance with the License.
7    * You may obtain a copy of the License at
8    *
9    * http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.codehaus.plexus.archiver.bzip2;
18  
19  import java.io.File;
20  import java.io.IOException;
21  import java.io.InputStream;
22  import javax.annotation.Nonnull;
23  import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
24  import org.codehaus.plexus.archiver.AbstractUnArchiver;
25  import org.codehaus.plexus.archiver.ArchiverException;
26  import static org.codehaus.plexus.archiver.util.Streams.bufferedInputStream;
27  import static org.codehaus.plexus.archiver.util.Streams.bufferedOutputStream;
28  import static org.codehaus.plexus.archiver.util.Streams.copyFully;
29  import static org.codehaus.plexus.archiver.util.Streams.fileInputStream;
30  import static org.codehaus.plexus.archiver.util.Streams.fileOutputStream;
31  
32  /**
33   * @author <a href="mailto:evenisse@codehaus.org">Emmanuel Venisse</a>
34   */
35  public class BZip2UnArchiver
36      extends AbstractUnArchiver
37  {
38  
39      private final static String OPERATION_BZIP2 = "bzip2";
40  
41      public BZip2UnArchiver()
42      {
43      }
44  
45      public BZip2UnArchiver( File sourceFile )
46      {
47          super( sourceFile );
48      }
49  
50      @Override
51      protected void execute()
52          throws ArchiverException
53      {
54          if ( getSourceFile().lastModified() > getDestFile().lastModified() )
55          {
56              getLogger().info(
57                  "Expanding " + getSourceFile().getAbsolutePath() + " to " + getDestFile().getAbsolutePath() );
58  
59              copyFully( getBZip2InputStream( bufferedInputStream( fileInputStream( getSourceFile(), OPERATION_BZIP2 ) ) ),
60                         bufferedOutputStream( fileOutputStream( getDestFile(), OPERATION_BZIP2 ) ), OPERATION_BZIP2 );
61          }
62      }
63  
64      public static @Nonnull
65      BZip2CompressorInputStream getBZip2InputStream( InputStream bis )
66          throws ArchiverException
67      {
68          try
69          {
70              // Note that bis must be buffered for performance. Does not need buffering around BZip2CompressorInputStream
71              return new BZip2CompressorInputStream( bis );
72          }
73          catch ( IOException e )
74          {
75              throw new ArchiverException( "Trouble creating BZIP2 compressor, invalid file ?", e );
76          }
77      }
78  
79      @Override
80      protected void execute( String path, File outputDirectory )
81      {
82          throw new UnsupportedOperationException( "Targeted extraction not supported in BZIP2 format." );
83      }
84  
85  }