Skip to content

Commit 238fe08

Browse files
committed
Converted to single transformer, added testcase
1 parent 600f18b commit 238fe08

File tree

9 files changed

+66
-22
lines changed

9 files changed

+66
-22
lines changed

src/main/java/org/codehaus/plexus/archiver/AbstractArchiver.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
4343
import org.codehaus.plexus.components.io.attributes.Java7Reflector;
4444
import org.codehaus.plexus.components.io.attributes.PlexusIoResourceAttributes;
45+
import org.codehaus.plexus.components.io.resources.AbstractPlexusIoResourceCollection;
4546
import org.codehaus.plexus.components.io.resources.PlexusIoArchivedResourceCollection;
4647
import org.codehaus.plexus.components.io.resources.PlexusIoFileResourceCollection;
4748
import org.codehaus.plexus.components.io.resources.PlexusIoResource;
@@ -310,7 +311,7 @@ public void addFileSet( @Nonnull final FileSet fileSet )
310311
collection.setPrefix( fileSet.getPrefix() );
311312
collection.setCaseSensitive( fileSet.isCaseSensitive() );
312313
collection.setUsingDefaultExcludes( fileSet.isUsingDefaultExcludes() );
313-
collection.setStreamTransformers( fileSet.getStreamTransformers() );
314+
collection.setStreamTransformer( fileSet.getStreamTransformer() );
314315

315316
if ( getOverrideDirectoryMode() > -1 || getOverrideFileMode() > -1 )
316317
{
@@ -684,6 +685,9 @@ protected PlexusIoResourceCollection asResourceCollection( final ArchivedFileSet
684685
+ resources.getClass().getName() );
685686
}
686687

688+
if (resources instanceof AbstractPlexusIoResourceCollection ){
689+
((AbstractPlexusIoResourceCollection)resources).setStreamTransformer( fileSet.getStreamTransformer() );
690+
}
687691
final PlexusIoProxyResourceCollection proxy = new PlexusIoProxyResourceCollection(resources);
688692

689693
proxy.setExcludes( fileSet.getExcludes() );
@@ -693,7 +697,7 @@ protected PlexusIoResourceCollection asResourceCollection( final ArchivedFileSet
693697
proxy.setPrefix( fileSet.getPrefix() );
694698
proxy.setUsingDefaultExcludes( fileSet.isUsingDefaultExcludes() );
695699
proxy.setFileSelectors( fileSet.getFileSelectors() );
696-
proxy.setStreamTransformers( fileSet.getStreamTransformers() );
700+
proxy.setStreamTransformer( fileSet.getStreamTransformer() );
697701

698702
if ( getOverrideDirectoryMode() > -1 || getOverrideFileMode() > -1 )
699703
{

src/main/java/org/codehaus/plexus/archiver/ArchiveEntry.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,6 @@
3030
import org.codehaus.plexus.components.io.resources.PlexusIoFileResource;
3131
import org.codehaus.plexus.components.io.resources.PlexusIoResource;
3232
import org.codehaus.plexus.components.io.resources.PlexusIoResourceWithAttributes;
33-
import org.codehaus.plexus.components.io.resources.PlexusIoSymlinkResource;
34-
35-
import java.io.File;
36-
import java.io.IOException;
37-
import java.io.InputStream;
3833

3934
/**
4035
* @version $Revision: 1502 $ $Date$
@@ -173,7 +168,7 @@ public static ArchiveEntry createFileEntry( String target, File file, int permis
173168
throw new ArchiverException( "Failed to read filesystem attributes for: " + file, e );
174169
}
175170

176-
final PlexusIoFileResource res = PlexusIoFileResource.existingFile( file, attrs );
171+
final PlexusIoFileResource res = PlexusIoFileResource.justAFile( file, attrs );
177172
return new ArchiveEntry( target, res, FILE, permissions );
178173
}
179174

src/main/java/org/codehaus/plexus/archiver/BaseFileSet.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public interface BaseFileSet
6565
* @return The transformers.
6666
*/
6767

68-
InputStreamTransformer[] getStreamTransformers();
68+
InputStreamTransformer getStreamTransformer();
6969

7070

7171
}

src/main/java/org/codehaus/plexus/archiver/util/AbstractFileSet.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import org.codehaus.plexus.components.io.functions.InputStreamTransformer;
2121

2222
import javax.annotation.Nonnull;
23-
import java.util.Arrays;
2423

2524

2625
/**
@@ -30,7 +29,6 @@
3029
public abstract class AbstractFileSet<T extends AbstractFileSet>
3130
implements BaseFileSet
3231
{
33-
private static final InputStreamTransformer[] empty = new InputStreamTransformer[0];
3432

3533
private String prefix;
3634

@@ -46,7 +44,7 @@ public abstract class AbstractFileSet<T extends AbstractFileSet>
4644

4745
private boolean includingEmptyDirectories = true;
4846

49-
private InputStreamTransformer[] streamTransformers = empty;
47+
private InputStreamTransformer streamTransformer = null;
5048

5149

5250
/**
@@ -171,15 +169,13 @@ public T includeEmptyDirs( boolean includeEmptyDirectories ){
171169
return (T) this;
172170
}
173171

174-
public void addStreamTransformers( @Nonnull InputStreamTransformer... streamTransformer )
172+
public void setStreamTransformer( @Nonnull InputStreamTransformer streamTransformer )
175173
{
176-
final int orgLength = this.streamTransformers.length;
177-
streamTransformers = Arrays.copyOf( this.streamTransformers, orgLength + streamTransformer.length );
178-
System.arraycopy(streamTransformer, 0, streamTransformers, orgLength, streamTransformer.length);
174+
this.streamTransformer = streamTransformer;
179175
}
180176

181-
public InputStreamTransformer[] getStreamTransformers()
177+
public InputStreamTransformer getStreamTransformer()
182178
{
183-
return streamTransformers;
179+
return streamTransformer;
184180
}
185181
}

src/main/java/org/codehaus/plexus/archiver/zip/AbstractZipArchiver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,7 @@ protected void zipFile( ArchiveEntry entry, ZipArchiveOutputStream zOut, String
601601
}
602602
catch ( IOException e )
603603
{
604-
throw new ArchiverException( "IOException when zipping " + entry.getName() + ": " + e.getMessage(), e );
604+
throw new ArchiverException( "IOException when zipping r" + entry.getName() + ": " + e.getMessage(), e );
605605
}
606606
finally
607607
{

src/main/java/org/codehaus/plexus/archiver/zip/PlexusIoZipFileResourceCollection.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public PlexusIoResource next()
3939
{
4040
final ZipArchiveEntry entry = (ZipArchiveEntry) en.nextElement();
4141

42-
return new ZipResource( zipFile, entry );
42+
return new ZipResource( zipFile, entry, getStreamTransformer() );
4343
}
4444

4545
public void remove()

src/main/java/org/codehaus/plexus/archiver/zip/ZipResource.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,13 @@
55
import java.net.URL;
66

77
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
8+
import org.apache.commons.compress.archivers.zip.ZipFile;
89
import org.codehaus.plexus.archiver.UnixStat;
910
import org.codehaus.plexus.components.io.attributes.PlexusIoResourceAttributes;
1011
import org.codehaus.plexus.components.io.attributes.SimpleResourceAttributes;
12+
import org.codehaus.plexus.components.io.functions.InputStreamTransformer;
1113
import org.codehaus.plexus.components.io.resources.AbstractPlexusIoResource;
14+
import org.codehaus.plexus.components.io.resources.ClosingInputStream;
1215
import org.codehaus.plexus.components.io.resources.PlexusIoResource;
1316
import org.codehaus.plexus.components.io.resources.PlexusIoResourceWithAttributes;
1417

@@ -18,14 +21,18 @@ public class ZipResource extends AbstractPlexusIoResource
1821

1922
private final org.apache.commons.compress.archivers.zip.ZipFile zipFile;
2023
private final ZipArchiveEntry entry;
24+
25+
private final InputStreamTransformer streamTransformer;
26+
2127
private PlexusIoResourceAttributes attributes;
2228

23-
public ZipResource( org.apache.commons.compress.archivers.zip.ZipFile zipFile, ZipArchiveEntry entry )
29+
public ZipResource( ZipFile zipFile, ZipArchiveEntry entry, InputStreamTransformer streamTransformer )
2430
{
2531
super(entry.getName(),getLastModofied( entry), entry.isDirectory() ? PlexusIoResource.UNKNOWN_RESOURCE_SIZE : entry.getSize() ,
2632
!entry.isDirectory(), entry.isDirectory(), true);
2733
this.zipFile = zipFile;
2834
this.entry = entry;
35+
this.streamTransformer = streamTransformer;
2936
}
3037

3138
private static long getLastModofied( ZipArchiveEntry entry )
@@ -68,7 +75,8 @@ public URL getURL()
6875
public InputStream getContents()
6976
throws IOException
7077
{
71-
return zipFile.getInputStream( entry );
78+
final InputStream inputStream = zipFile.getInputStream( entry );
79+
return new ClosingInputStream( streamTransformer.transform( this, inputStream ), inputStream);
7280
}
7381

7482
}

src/test/java/org/codehaus/plexus/archiver/zip/ZipArchiverTest.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,21 @@
2525
*/
2626

2727
import org.apache.commons.compress.archivers.zip.*;
28+
import org.apache.commons.compress.utils.BoundedInputStream;
29+
import org.codehaus.plexus.archiver.ArchivedFileSet;
2830
import org.codehaus.plexus.archiver.Archiver;
2931
import org.codehaus.plexus.archiver.ArchiverException;
3032
import org.codehaus.plexus.archiver.BasePlexusArchiverTest;
3133
import org.codehaus.plexus.archiver.UnixStat;
3234
import org.codehaus.plexus.archiver.util.ArchiveEntryUtils;
35+
import org.codehaus.plexus.archiver.util.DefaultArchivedFileSet;
36+
import org.codehaus.plexus.archiver.util.DefaultFileSet;
3337
import org.codehaus.plexus.archiver.util.Streams;
3438
import org.codehaus.plexus.components.io.attributes.PlexusIoResourceAttributeUtils;
3539
import org.codehaus.plexus.components.io.attributes.PlexusIoResourceAttributes;
40+
import org.codehaus.plexus.components.io.functions.InputStreamTransformer;
41+
import org.codehaus.plexus.components.io.resources.PlexusIoFileResourceCollection;
42+
import org.codehaus.plexus.components.io.resources.PlexusIoResource;
3643
import org.codehaus.plexus.logging.Logger;
3744
import org.codehaus.plexus.logging.console.ConsoleLogger;
3845
import org.codehaus.plexus.util.FileUtils;
@@ -258,6 +265,40 @@ public void testCreateArchive()
258265
createArchive(archiver);
259266
}
260267

268+
public void testCreateArchiveWithStreamTransformer()
269+
throws IOException
270+
{
271+
InputStreamTransformer is = new InputStreamTransformer()
272+
{
273+
public InputStream transform( PlexusIoResource resource, InputStream inputStream )
274+
throws IOException
275+
{
276+
return new BoundedInputStream( inputStream, 3 );
277+
}
278+
};
279+
280+
final ZipArchiver zipArchiver = getZipArchiver( getTestFile( "target/output/all3bytes.zip" ) );
281+
DefaultArchivedFileSet afs = new DefaultArchivedFileSet( new File("src/test/resources/test.zip" ));
282+
afs.setStreamTransformer( is );
283+
afs.setPrefix( "azip/" );
284+
zipArchiver.addArchivedFileSet( afs );
285+
286+
DefaultFileSet dfs = new DefaultFileSet( new File("src/test/resources/mjar179" ));
287+
dfs.setStreamTransformer( is );
288+
dfs.setPrefix( "mj179/" );
289+
zipArchiver.addFileSet( dfs );
290+
291+
PlexusIoFileResourceCollection files = new PlexusIoFileResourceCollection();
292+
files.setBaseDir( new File("src/test/resources" ));
293+
files.setStreamTransformer( is );
294+
files.setPrefix( "plexus/" );
295+
zipArchiver.addResources( files );
296+
297+
zipArchiver.createArchive();
298+
299+
300+
301+
}
261302
private ZipArchiver newArchiver( String name ) throws Exception {
262303
ZipArchiver archiver = getZipArchiver(getTestFile( "target/output/" + name ));
263304

src/test/resources/test.zip

14 KB
Binary file not shown.

0 commit comments

Comments
 (0)