1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.codehaus.plexus.archiver.snappy;
18
19 import javax.annotation.Nonnull;
20 import javax.inject.Named;
21
22 import java.io.File;
23 import java.io.IOException;
24 import java.io.InputStream;
25
26 import org.apache.commons.compress.compressors.snappy.FramedSnappyCompressorInputStream;
27 import org.codehaus.plexus.archiver.AbstractUnArchiver;
28 import org.codehaus.plexus.archiver.ArchiverException;
29
30 import static org.codehaus.plexus.archiver.util.Streams.bufferedInputStream;
31 import static org.codehaus.plexus.archiver.util.Streams.bufferedOutputStream;
32 import static org.codehaus.plexus.archiver.util.Streams.copyFully;
33 import static org.codehaus.plexus.archiver.util.Streams.fileInputStream;
34 import static org.codehaus.plexus.archiver.util.Streams.fileOutputStream;
35
36
37
38
39 @Named("snappy")
40 public class SnappyUnArchiver extends AbstractUnArchiver {
41
42 private static final String OPERATION_SNAPPY = "snappy";
43
44 public SnappyUnArchiver() {}
45
46 public SnappyUnArchiver(File sourceFile) {
47 super(sourceFile);
48 }
49
50 @Override
51 protected void execute() throws ArchiverException {
52 if (getSourceFile().lastModified() > getDestFile().lastModified()) {
53 getLogger()
54 .info("Expanding " + getSourceFile().getAbsolutePath() + " to "
55 + getDestFile().getAbsolutePath());
56
57 copyFully(
58 getSnappyInputStream(bufferedInputStream(fileInputStream(getSourceFile(), OPERATION_SNAPPY))),
59 bufferedOutputStream(fileOutputStream(getDestFile(), OPERATION_SNAPPY)),
60 OPERATION_SNAPPY);
61 }
62 }
63
64 public static @Nonnull FramedSnappyCompressorInputStream getSnappyInputStream(InputStream bis)
65 throws ArchiverException {
66 try {
67 return new FramedSnappyCompressorInputStream(bis);
68 } catch (IOException e) {
69 throw new ArchiverException("Trouble creating Snappy compressor, invalid file ?", e);
70 }
71 }
72
73 @Override
74 protected void execute(String path, File outputDirectory) {
75 throw new UnsupportedOperationException("Targeted extraction not supported in Snappy format.");
76 }
77 }