1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package io.earcam.instrumental.archive.jpms.auto;
20
21 import static io.earcam.unexceptional.Exceptional.uncheckFunction;
22 import static java.util.stream.Collectors.toList;
23
24 import java.util.Arrays;
25 import java.util.Collections;
26 import java.util.List;
27 import java.util.Optional;
28 import java.util.jar.JarInputStream;
29
30 import io.earcam.instrumental.archive.Archive;
31 import io.earcam.instrumental.module.jpms.ModuleInfo;
32
33 public final class ArchivePackageModuleMapper extends AbstractPackageModuleMapper {
34
35 private final List<ModuleInfo> modules;
36
37
38 private ArchivePackageModuleMapper(List<ModuleInfo> modules)
39 {
40 this.modules = Collections.unmodifiableList(modules);
41 }
42
43
44 public static ArchivePackageModuleMapper fromArchives(Archive... archives)
45 {
46 return fromArchives(Arrays.asList(archives));
47 }
48
49
50 public static ArchivePackageModuleMapper fromArchives(List<Archive> archives)
51 {
52 List<ModuleInfo> modules = archives.stream()
53 .map(Archive::toInputStream)
54 .map(uncheckFunction(JarInputStream::new))
55 .map(uncheckFunction(ModuleInfo::extract))
56 .filter(Optional::isPresent)
57 .map(Optional::get)
58 .collect(toList());
59
60
61
62
63 return new ArchivePackageModuleMapper(modules);
64 }
65
66
67 @Override
68 protected List<ModuleInfo> modules()
69 {
70 return modules;
71 }
72 }