X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.osgi.boot%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fboot%2Fa2%2FFsM2Source.java;fp=org.argeo.osgi.boot%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fboot%2Fa2%2FFsM2Source.java;h=ecf8771a6f3f6d83e647e587d5473f2fd8c9160b;hb=1091271b89f2d12e9898e01f6639c48831b1bc4b;hp=0000000000000000000000000000000000000000;hpb=1c0c3d0b0476adfc6489bb08d96daf1e74aea4b3;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.osgi.boot/src/org/argeo/osgi/boot/a2/FsM2Source.java b/org.argeo.osgi.boot/src/org/argeo/osgi/boot/a2/FsM2Source.java new file mode 100644 index 000000000..ecf8771a6 --- /dev/null +++ b/org.argeo.osgi.boot/src/org/argeo/osgi/boot/a2/FsM2Source.java @@ -0,0 +1,65 @@ +package org.argeo.osgi.boot.a2; + +import java.io.File; +import java.io.IOException; +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; + +import org.argeo.osgi.boot.OsgiBootUtils; +import org.osgi.framework.Version; + +public class FsM2Source extends ProvisioningSource { + private final Path base; + + public FsM2Source(Path base) { + super(); + this.base = base; + } + + void load() throws IOException { + Files.walkFileTree(base, new ArtifactFileVisitor()); + } + + class ArtifactFileVisitor extends SimpleFileVisitor { + + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + // OsgiBootUtils.debug("Processing " + file); + if (file.toString().endsWith(".jar")) { + Version version; + try { + version = new Version(readVersionFromModule(file)); + } catch (Exception e) { + // ignore non OSGi + return FileVisitResult.CONTINUE; + } + String moduleName = readSymbolicNameFromModule(file); + Path groupPath = file.getParent().getParent().getParent(); + Path relGroupPath = base.relativize(groupPath); + String contributionName = relGroupPath.toString().replace(File.separatorChar, '.'); + A2Contribution contribution = getOrAddContribution(contributionName); + A2Component component = contribution.getOrAddComponent(moduleName); + A2Module module = component.getOrAddModule(version, file); + if (OsgiBootUtils.isDebug()) + OsgiBootUtils.debug("Registered " + module); + } + return super.visitFile(file, attrs); + } + + } + + public static void main(String[] args) { + try { + FsM2Source context = new FsM2Source(Paths.get("/home/mbaudier/.m2/repository")); + context.load(); + context.asTree(); + } catch (Exception e) { + e.printStackTrace(); + } + } + +}