]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.osgi.boot/src/org/argeo/osgi/a2/FsA2Source.java
Merge remote-tracking branch 'origin/master' into v2.x
[lgpl/argeo-commons.git] / org.argeo.osgi.boot / src / org / argeo / osgi / a2 / FsA2Source.java
1 package org.argeo.osgi.a2;
2
3 import java.io.IOException;
4 import java.nio.file.DirectoryStream;
5 import java.nio.file.Files;
6 import java.nio.file.Path;
7 import java.nio.file.Paths;
8 import java.util.SortedSet;
9 import java.util.TreeSet;
10
11 import org.argeo.osgi.boot.OsgiBootUtils;
12 import org.osgi.framework.Version;
13
14 /** A file system {@link AbstractProvisioningSource} in A2 format. */
15 public class FsA2Source extends AbstractProvisioningSource implements A2Source {
16 private final Path base;
17
18 public FsA2Source(Path base) {
19 super();
20 this.base = base;
21 }
22
23 void load() throws IOException {
24 DirectoryStream<Path> contributionPaths = Files.newDirectoryStream(base);
25 SortedSet<A2Contribution> contributions = new TreeSet<>();
26 contributions: for (Path contributionPath : contributionPaths) {
27 if (Files.isDirectory(contributionPath)) {
28 String contributionId = contributionPath.getFileName().toString();
29 if (A2Contribution.BOOT.equals(contributionId))// skip boot
30 continue contributions;
31 A2Contribution contribution = getOrAddContribution(contributionId);
32 contributions.add(contribution);
33 }
34 }
35
36 for (A2Contribution contribution : contributions) {
37 DirectoryStream<Path> modulePaths = Files.newDirectoryStream(base.resolve(contribution.getId()));
38 modules: for (Path modulePath : modulePaths) {
39 if (!Files.isDirectory(modulePath)) {
40 // OsgiBootUtils.debug("Registering " + modulePath);
41 String moduleFileName = modulePath.getFileName().toString();
42 int lastDot = moduleFileName.lastIndexOf('.');
43 String ext = moduleFileName.substring(lastDot + 1);
44 if (!"jar".equals(ext))
45 continue modules;
46 String moduleName = moduleFileName.substring(0, lastDot);
47 if (moduleName.endsWith("-SNAPSHOT"))
48 moduleName = moduleName.substring(0, moduleName.length() - "-SNAPSHOT".length());
49 int lastDash = moduleName.lastIndexOf('-');
50 String versionStr = moduleName.substring(lastDash + 1);
51 String componentName = moduleName.substring(0, lastDash);
52 // if(versionStr.endsWith("-SNAPSHOT")) {
53 // versionStr = readVersionFromModule(modulePath);
54 // }
55 Version version;
56 try {
57 version = new Version(versionStr);
58 } catch (Exception e) {
59 versionStr = readVersionFromModule(modulePath);
60 if (versionStr != null) {
61 version = new Version(versionStr);
62 } else {
63 OsgiBootUtils.debug("Ignore " + modulePath + " (" + e.getMessage() + ")");
64 continue modules;
65 }
66 }
67 A2Component component = contribution.getOrAddComponent(componentName);
68 A2Module module = component.getOrAddModule(version, modulePath);
69 if (OsgiBootUtils.isDebug())
70 OsgiBootUtils.debug("Registered " + module);
71 }
72 }
73 }
74
75 }
76
77 public static void main(String[] args) {
78 try {
79 FsA2Source context = new FsA2Source(Paths.get(
80 "/home/mbaudier/dev/git/apache2/argeo-commons/dist/argeo-node/target/argeo-node-2.1.77-SNAPSHOT/share/osgi"));
81 context.load();
82 context.asTree();
83 } catch (Exception e) {
84 e.printStackTrace();
85 }
86 }
87
88 }