1 package org.codehaus.plexus.archiver.tar; 2 3 import javax.annotation.Nonnull; 4 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java.net.URL; 8 9 import org.apache.commons.compress.archivers.tar.TarArchiveEntry; 10 import org.codehaus.plexus.components.io.attributes.PlexusIoResourceAttributes; 11 import org.codehaus.plexus.components.io.attributes.SimpleResourceAttributes; 12 import org.codehaus.plexus.components.io.functions.ResourceAttributeSupplier; 13 import org.codehaus.plexus.components.io.resources.AbstractPlexusIoResource; 14 import org.codehaus.plexus.components.io.resources.PlexusIoResource; 15 16 public class TarResource extends AbstractPlexusIoResource implements ResourceAttributeSupplier { 17 18 private final TarFile tarFile; 19 20 private final TarArchiveEntry entry; 21 22 private PlexusIoResourceAttributes attributes; 23 24 public TarResource(TarFile tarFile, TarArchiveEntry entry) { 25 super( 26 entry.getName(), 27 getLastModifiedTime(entry), 28 entry.isDirectory() ? PlexusIoResource.UNKNOWN_RESOURCE_SIZE : entry.getSize(), 29 !entry.isDirectory(), 30 entry.isDirectory(), 31 true); 32 33 this.tarFile = tarFile; 34 this.entry = entry; 35 } 36 37 private static long getLastModifiedTime(TarArchiveEntry entry) { 38 long l = entry.getModTime().getTime(); 39 return l == -1 ? PlexusIoResource.UNKNOWN_MODIFICATION_DATE : l; 40 } 41 42 @Override 43 public synchronized PlexusIoResourceAttributes getAttributes() { 44 if (attributes == null) { 45 attributes = new SimpleResourceAttributes( 46 entry.getUserId(), entry.getUserName(), entry.getGroupId(), entry.getGroupName(), entry.getMode()); 47 } 48 49 return attributes; 50 } 51 52 public synchronized void setAttributes(PlexusIoResourceAttributes attributes) { 53 this.attributes = attributes; 54 } 55 56 @Override 57 public URL getURL() throws IOException { 58 return null; 59 } 60 61 @Nonnull 62 @Override 63 public InputStream getContents() throws IOException { 64 return tarFile.getInputStream(entry); 65 } 66 }