diff --git a/src/main/java/org/codehaus/plexus/archiver/AbstractArchiver.java b/src/main/java/org/codehaus/plexus/archiver/AbstractArchiver.java index 3fab3dd2a..eae95e0c1 100755 --- a/src/main/java/org/codehaus/plexus/archiver/AbstractArchiver.java +++ b/src/main/java/org/codehaus/plexus/archiver/AbstractArchiver.java @@ -346,6 +346,7 @@ public void addFileSet( @Nonnull final FileSet fileSet ) collection.setCaseSensitive( fileSet.isCaseSensitive() ); collection.setUsingDefaultExcludes( fileSet.isUsingDefaultExcludes() ); collection.setStreamTransformer( fileSet.getStreamTransformer() ); + collection.setFileMappers( fileSet.getFileMappers() ); if ( getOverrideDirectoryMode() > -1 || getOverrideFileMode() > -1 ) { @@ -737,6 +738,7 @@ protected PlexusIoResourceCollection asResourceCollection( final ArchivedFileSet proxy.setUsingDefaultExcludes( fileSet.isUsingDefaultExcludes() ); proxy.setFileSelectors( fileSet.getFileSelectors() ); proxy.setStreamTransformer( fileSet.getStreamTransformer() ); + proxy.setFileMappers( fileSet.getFileMappers() ); if ( getOverrideDirectoryMode() > -1 || getOverrideFileMode() > -1 ) { diff --git a/src/main/java/org/codehaus/plexus/archiver/BaseFileSet.java b/src/main/java/org/codehaus/plexus/archiver/BaseFileSet.java index a3cc2f892..b8ede7369 100644 --- a/src/main/java/org/codehaus/plexus/archiver/BaseFileSet.java +++ b/src/main/java/org/codehaus/plexus/archiver/BaseFileSet.java @@ -1,6 +1,8 @@ package org.codehaus.plexus.archiver; import javax.annotation.CheckForNull; + +import org.codehaus.plexus.components.io.filemappers.FileMapper; import org.codehaus.plexus.components.io.fileselectors.FileSelector; import org.codehaus.plexus.components.io.functions.InputStreamTransformer; @@ -64,5 +66,12 @@ public interface BaseFileSet * @return The transformers. */ InputStreamTransformer getStreamTransformer(); + + /** + * Returns a set of file mappers, which should be used + * to change the filename of the included files. + */ + @CheckForNull + FileMapper[] getFileMappers(); } diff --git a/src/main/java/org/codehaus/plexus/archiver/util/AbstractFileSet.java b/src/main/java/org/codehaus/plexus/archiver/util/AbstractFileSet.java index 73dbb2357..7543a6d96 100644 --- a/src/main/java/org/codehaus/plexus/archiver/util/AbstractFileSet.java +++ b/src/main/java/org/codehaus/plexus/archiver/util/AbstractFileSet.java @@ -17,6 +17,7 @@ import javax.annotation.Nonnull; import org.codehaus.plexus.archiver.BaseFileSet; +import org.codehaus.plexus.components.io.filemappers.FileMapper; import org.codehaus.plexus.components.io.fileselectors.FileSelector; import org.codehaus.plexus.components.io.functions.InputStreamTransformer; @@ -44,6 +45,8 @@ public abstract class AbstractFileSet private boolean includingEmptyDirectories = true; private InputStreamTransformer streamTransformer = null; + + private FileMapper[] fileMappers; /** * Sets a string of patterns, which excluded files @@ -189,5 +192,20 @@ public InputStreamTransformer getStreamTransformer() { return streamTransformer; } + + /** + * Sets a set of file mappers, which should be used + * to change the filename of the included files. + */ + public void setFileMappers( FileMapper[] fileMappers ) + { + this.fileMappers = fileMappers; + } + + @Override + public FileMapper[] getFileMappers() + { + return fileMappers; + } } diff --git a/src/test/java/org/codehaus/plexus/archiver/zip/ZipArchiverTest.java b/src/test/java/org/codehaus/plexus/archiver/zip/ZipArchiverTest.java index 03cd44026..9be4a77b8 100644 --- a/src/test/java/org/codehaus/plexus/archiver/zip/ZipArchiverTest.java +++ b/src/test/java/org/codehaus/plexus/archiver/zip/ZipArchiverTest.java @@ -59,6 +59,8 @@ import org.codehaus.plexus.components.io.attributes.PlexusIoResourceAttributeUtils; import org.codehaus.plexus.components.io.attributes.PlexusIoResourceAttributes; import org.codehaus.plexus.components.io.attributes.SimpleResourceAttributes; +import org.codehaus.plexus.components.io.filemappers.FileMapper; +import org.codehaus.plexus.components.io.filemappers.PrefixFileMapper; import org.codehaus.plexus.components.io.functions.InputStreamTransformer; import org.codehaus.plexus.components.io.resources.PlexusIoFileResourceCollection; import org.codehaus.plexus.components.io.resources.PlexusIoResource; @@ -429,6 +431,9 @@ public InputStream transform( @Nonnull PlexusIoResource resource, @Nonnull Input }; sfd.setStreamTransformer( is ); + PrefixFileMapper mapper = new PrefixFileMapper(); + mapper.setPrefix( "prefix" ); + sfd.setFileMappers( new FileMapper[] { mapper } ); zipArchiver.addArchivedFileSet( sfd ); zipArchiver.createArchive(); @@ -438,7 +443,7 @@ public InputStream transform( @Nonnull PlexusIoResource resource, @Nonnull Input zipUnArchiver.setDestFile( destFile ); zipUnArchiver.extract(); File a3byteFile = new File( destFile, - "Users/kristian/lsrc/plexus/plexus-archiver/src/main/java/org/codehaus/plexus/archiver/zip/ZipArchiver.java" ); + "prefixUsers/kristian/lsrc/plexus/plexus-archiver/src/main/java/org/codehaus/plexus/archiver/zip/ZipArchiver.java" ); assertTrue( a3byteFile.exists() ); assertTrue( a3byteFile.length() == 3 ); }