1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package gov.nist.secauto.swid.plugin.entry.archive;
28
29 import gov.nist.secauto.swid.builder.resource.PathRelativizer;
30 import gov.nist.secauto.swid.plugin.entry.FileEntry;
31
32 import org.apache.maven.artifact.Artifact;
33 import org.codehaus.plexus.archiver.ArchiveEntry;
34 import org.codehaus.plexus.components.io.fileselectors.FileInfo;
35 import org.codehaus.plexus.components.io.resources.PlexusIoFileResource;
36 import org.codehaus.plexus.components.io.resources.PlexusIoResource;
37
38 import java.io.File;
39 import java.io.IOException;
40 import java.io.InputStream;
41 import java.nio.file.Path;
42 import java.util.List;
43 import java.util.Objects;
44
45 public class ArchiveFileEntry implements FileEntry {
46
47 private final ArchiveEntry archiveEntry;
48 private final Artifact artifact;
49
50
51
52
53
54
55
56
57
58 public ArchiveFileEntry(ArchiveEntry archiveEntry, Artifact artifact) {
59 Objects.requireNonNull(archiveEntry, "archiveEntry");
60 this.archiveEntry = archiveEntry;
61 this.artifact = artifact;
62 }
63
64 @Override
65 public Long getSize() {
66 PlexusIoResource resource = archiveEntry.getResource();
67
68 File file = null;
69 if (resource instanceof PlexusIoFileResource) {
70 file = ((PlexusIoFileResource) resource).getFile();
71 }
72
73 return (file == null) ? null : file.length();
74 }
75
76 @Override
77 public InputStream getInputStream() throws IOException {
78 return archiveEntry.getInputStream();
79 }
80
81 @Override
82 public String getVersion() {
83 String retval = null;
84 if (artifact != null) {
85 retval = artifact.getVersion();
86 }
87 return retval;
88 }
89
90 @Override
91 public Path getPath() {
92 PlexusIoResource resource = archiveEntry.getResource();
93
94 File file = null;
95 if (resource instanceof PlexusIoFileResource) {
96 file = ((PlexusIoFileResource) resource).getFile();
97 }
98
99 return (file == null) ? null : file.toPath();
100 }
101
102 @Override
103 public String getOutputRelativePath() {
104 return archiveEntry.getName();
105 }
106
107 @Override
108 public List<String> getRelativePathSegements(String swidTagPath) {
109 return PathRelativizer.relativize(swidTagPath, getOutputRelativePath());
110 }
111
112 @Override
113 public FileInfo asFileInfo() {
114 PlexusIoResource resource = archiveEntry.getResource();
115 return resource;
116 }
117
118 }