|
1 | 1 | package org.fedoraproject.xmvn.generator.maven; |
2 | 2 |
|
3 | | -import java.io.BufferedInputStream; |
4 | | -import java.io.DataInputStream; |
5 | | -import java.io.EOFException; |
6 | 3 | import java.io.IOException; |
7 | | -import java.io.InputStream; |
8 | 4 | import java.io.PrintWriter; |
9 | 5 | import java.io.Reader; |
10 | 6 | import java.io.StringWriter; |
|
17 | 13 | import java.util.List; |
18 | 14 | import java.util.Map; |
19 | 15 | import java.util.Set; |
20 | | -import java.util.stream.Stream; |
21 | | -import java.util.zip.GZIPInputStream; |
22 | | - |
23 | | -import javax.xml.stream.XMLStreamException; |
24 | 16 |
|
25 | 17 | import org.apache.maven.model.Extension; |
26 | 18 | import org.apache.maven.model.Model; |
|
34 | 26 | import org.fedoraproject.xmvn.generator.Collector; |
35 | 27 | import org.fedoraproject.xmvn.generator.Generator; |
36 | 28 | import org.fedoraproject.xmvn.generator.logging.Logger; |
| 29 | +import org.fedoraproject.xmvn.locator.ServiceLocator; |
37 | 30 | import org.fedoraproject.xmvn.locator.ServiceLocatorFactory; |
38 | 31 | import org.fedoraproject.xmvn.metadata.ArtifactAlias; |
39 | 32 | import org.fedoraproject.xmvn.metadata.ArtifactMetadata; |
40 | 33 | import org.fedoraproject.xmvn.metadata.Dependency; |
41 | | -import org.fedoraproject.xmvn.metadata.PackageMetadata; |
| 34 | +import org.fedoraproject.xmvn.metadata.MetadataRequest; |
| 35 | +import org.fedoraproject.xmvn.metadata.MetadataResolver; |
42 | 36 | import org.fedoraproject.xmvn.metadata.SkippedArtifactMetadata; |
43 | | -import org.fedoraproject.xmvn.metadata.io.stax.MetadataStaxReader; |
44 | 37 | import org.fedoraproject.xmvn.resolver.ResolutionRequest; |
45 | 38 | import org.fedoraproject.xmvn.resolver.ResolutionResult; |
46 | 39 | import org.fedoraproject.xmvn.resolver.Resolver; |
@@ -72,39 +65,20 @@ class UniqueArtifact { |
72 | 65 |
|
73 | 66 | class MavenGenerator implements Generator { |
74 | 67 | private final BuildContext context; |
| 68 | + private final MetadataResolver metadataResolver; |
75 | 69 | private final Resolver resolver; |
76 | 70 |
|
77 | | - MavenGenerator(BuildContext context, Resolver resolver) { |
| 71 | + MavenGenerator(BuildContext context, MetadataResolver metadataResolver, Resolver resolver) { |
78 | 72 | this.context = context; |
| 73 | + this.metadataResolver = metadataResolver; |
79 | 74 | this.resolver = resolver; |
80 | 75 | } |
81 | 76 |
|
82 | 77 | public MavenGenerator(BuildContext context) { |
83 | | - this(context, new ServiceLocatorFactory().createServiceLocator().getService(Resolver.class)); |
84 | | - } |
85 | | - |
86 | | - private boolean isCompressed(BufferedInputStream bis) throws IOException { |
87 | | - try { |
88 | | - bis.mark(2); |
89 | | - DataInputStream ois = new DataInputStream(bis); |
90 | | - int magic = Short.reverseBytes(ois.readShort()) & 0xFFFF; |
91 | | - return magic == GZIPInputStream.GZIP_MAGIC; |
92 | | - } catch (EOFException e) { |
93 | | - return false; |
94 | | - } finally { |
95 | | - bis.reset(); |
96 | | - } |
97 | | - } |
98 | | - |
99 | | - private PackageMetadata readMetadata(Path path) throws IOException, XMLStreamException { |
100 | | - try (InputStream fis = Files.newInputStream(path)) { |
101 | | - try (BufferedInputStream bis = new BufferedInputStream(fis, 128)) { |
102 | | - try (InputStream is = isCompressed(bis) ? new GZIPInputStream(bis) : bis) { |
103 | | - MetadataStaxReader reader = new MetadataStaxReader(); |
104 | | - return reader.read(is); |
105 | | - } |
106 | | - } |
107 | | - } |
| 78 | + ServiceLocator serviceLocator = new ServiceLocatorFactory().createServiceLocator(); |
| 79 | + this.context = context; |
| 80 | + this.metadataResolver = serviceLocator.getService(MetadataResolver.class); |
| 81 | + this.resolver = serviceLocator.getService(Resolver.class); |
108 | 82 | } |
109 | 83 |
|
110 | 84 | private String formatDep(Artifact art, String pkgver, String ns) { |
@@ -188,48 +162,42 @@ public void generate(Collector collector) { |
188 | 162 | Set<Artifact> skipped = new LinkedHashSet<>(); |
189 | 163 | List<UniqueArtifact> umds = new ArrayList<>(); |
190 | 164 | if (Files.isDirectory(prefix)) { |
191 | | - try (Stream<Path> filePaths = Files.find(prefix, 1, (path, attr) -> attr.isRegularFile())) { |
192 | | - for (Path filePath : filePaths.toList()) { |
193 | | - PackageMetadata pmd = readMetadata(filePath); |
194 | | - Subpackage md = new Subpackage(filePath); |
195 | | - for (ArtifactMetadata amd : pmd.getArtifacts()) { |
196 | | - UniqueArtifact umd = new UniqueArtifact(md, amd); |
197 | | - umds.add(umd); |
198 | | - List<Artifact> arts = new ArrayList<>(); |
199 | | - arts.add(amd.toArtifact()); |
200 | | - for (ArtifactAlias alias : amd.getAliases()) { |
201 | | - arts.add(new DefaultArtifact(alias.getGroupId(), alias.getArtifactId(), |
202 | | - alias.getExtension(), alias.getClassifier(), Artifact.DEFAULT_VERSION)); |
| 165 | + MetadataRequest mdReq = new MetadataRequest(List.of(prefix.toString())); |
| 166 | + metadataResolver.resolveMetadata(mdReq).getPackageMetadataMap().forEach((filePath, pmd) -> { |
| 167 | + Subpackage md = new Subpackage(filePath); |
| 168 | + for (ArtifactMetadata amd : pmd.getArtifacts()) { |
| 169 | + UniqueArtifact umd = new UniqueArtifact(md, amd); |
| 170 | + umds.add(umd); |
| 171 | + List<Artifact> arts = new ArrayList<>(); |
| 172 | + arts.add(amd.toArtifact()); |
| 173 | + for (ArtifactAlias alias : amd.getAliases()) { |
| 174 | + arts.add(new DefaultArtifact(alias.getGroupId(), alias.getArtifactId(), alias.getExtension(), |
| 175 | + alias.getClassifier(), Artifact.DEFAULT_VERSION)); |
| 176 | + } |
| 177 | + umd.pom = true; |
| 178 | + for (Artifact art : arts) { |
| 179 | + if (!"pom".equals(art.getExtension())) { |
| 180 | + umd.pom = false; |
203 | 181 | } |
204 | | - umd.pom = true; |
205 | | - for (Artifact art : arts) { |
206 | | - if (!"pom".equals(art.getExtension())) { |
207 | | - umd.pom = false; |
208 | | - } |
209 | | - if (amd.getCompatVersions().isEmpty()) { |
210 | | - umd.artifacts.add(art.setVersion(Artifact.DEFAULT_VERSION)); |
211 | | - } else { |
212 | | - for (String ver : amd.getCompatVersions()) { |
213 | | - umd.artifacts.add(art.setVersion(ver)); |
214 | | - } |
| 182 | + if (amd.getCompatVersions().isEmpty()) { |
| 183 | + umd.artifacts.add(art.setVersion(Artifact.DEFAULT_VERSION)); |
| 184 | + } else { |
| 185 | + for (String ver : amd.getCompatVersions()) { |
| 186 | + umd.artifacts.add(art.setVersion(ver)); |
215 | 187 | } |
216 | 188 | } |
217 | | - md.pomOnly &= umd.pom; |
218 | | - for (Artifact vart : umd.artifacts) { |
219 | | - myArtifacts.computeIfAbsent(vart, x -> new ArrayList<>()).add(umd); |
220 | | - } |
221 | 189 | } |
222 | | - for (SkippedArtifactMetadata smd : pmd.getSkippedArtifacts()) { |
223 | | - Artifact sart = new DefaultArtifact(smd.getGroupId(), smd.getArtifactId(), smd.getExtension(), |
224 | | - smd.getClassifier(), Artifact.DEFAULT_VERSION); |
225 | | - skipped.add(sart); |
| 190 | + md.pomOnly &= umd.pom; |
| 191 | + for (Artifact vart : umd.artifacts) { |
| 192 | + myArtifacts.computeIfAbsent(vart, x -> new ArrayList<>()).add(umd); |
226 | 193 | } |
227 | 194 | } |
228 | | - } catch (IOException e) { |
229 | | - throw new UncheckedIOException(e); |
230 | | - } catch (XMLStreamException e) { |
231 | | - throw new RuntimeException(e); |
232 | | - } |
| 195 | + for (SkippedArtifactMetadata smd : pmd.getSkippedArtifacts()) { |
| 196 | + Artifact sart = new DefaultArtifact(smd.getGroupId(), smd.getArtifactId(), smd.getExtension(), |
| 197 | + smd.getClassifier(), Artifact.DEFAULT_VERSION); |
| 198 | + skipped.add(sart); |
| 199 | + } |
| 200 | + }); |
233 | 201 | } |
234 | 202 | for (UniqueArtifact umd : umds) { |
235 | 203 | for (Artifact art : umd.artifacts) { |
|
0 commit comments