]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.init/src/org/argeo/api/a2/FsM2Source.java
Improve init launch
[lgpl/argeo-commons.git] / org.argeo.init / src / org / argeo / api / a2 / FsM2Source.java
1 package org.argeo.api.a2;
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.lang.System.Logger;
6 import java.lang.System.Logger.Level;
7 import java.nio.file.FileVisitResult;
8 import java.nio.file.Files;
9 import java.nio.file.Path;
10 import java.nio.file.Paths;
11 import java.nio.file.SimpleFileVisitor;
12 import java.nio.file.attribute.BasicFileAttributes;
13
14 import org.osgi.framework.Version;
15
16 /** A file system {@link AbstractProvisioningSource} in Maven 2 format. */
17 public class FsM2Source extends AbstractProvisioningSource {
18 private final static Logger logger = System.getLogger(FsM2Source.class.getName());
19
20 private final Path base;
21
22 public FsM2Source(Path base) {
23 super(false);
24 this.base = base;
25 }
26
27 void load() throws IOException {
28 Files.walkFileTree(base, new ArtifactFileVisitor());
29 }
30
31 class ArtifactFileVisitor extends SimpleFileVisitor<Path> {
32
33 @Override
34 public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
35 // OsgiBootUtils.debug("Processing " + file);
36 if (file.toString().endsWith(".jar")) {
37 Version version;
38 try {
39 version = new Version(readVersionFromModule(file));
40 } catch (Exception e) {
41 // ignore non OSGi
42 return FileVisitResult.CONTINUE;
43 }
44 String moduleName = readSymbolicNameFromModule(file);
45 Path groupPath = file.getParent().getParent().getParent();
46 Path relGroupPath = base.relativize(groupPath);
47 String contributionName = relGroupPath.toString().replace(File.separatorChar, '.');
48 A2Contribution contribution = getOrAddContribution(contributionName);
49 A2Component component = contribution.getOrAddComponent(moduleName);
50 A2Module module = component.getOrAddModule(version, file);
51 logger.log(Level.TRACE, () -> "Registered " + module);
52 }
53 return super.visitFile(file, attrs);
54 }
55
56 }
57
58 public static void main(String[] args) {
59 try {
60 FsM2Source context = new FsM2Source(Paths.get("/home/mbaudier/.m2/repository"));
61 context.load();
62 context.asTree();
63 } catch (Exception e) {
64 e.printStackTrace();
65 }
66 }
67
68 }