]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.osgi.boot/src/org/argeo/osgi/boot/a2/FsA2Source.java
Add text() utility to CMS utils.
[lgpl/argeo-commons.git] / org.argeo.osgi.boot / src / org / argeo / osgi / boot / a2 / FsA2Source.java
1 package org.argeo.osgi.boot.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 public class FsA2Source extends ProvisioningSource {
15 private final Path base;
16
17 public FsA2Source(Path base) {
18 super();
19 this.base = base;
20 }
21
22 void load() throws IOException {
23 DirectoryStream<Path> contributionPaths = Files.newDirectoryStream(base);
24 SortedSet<A2Contribution> contributions = new TreeSet<>();
25 contributions: for (Path contributionPath : contributionPaths) {
26 if (Files.isDirectory(contributionPath)) {
27 String contributionId = contributionPath.getFileName().toString();
28 if (A2Contribution.BOOT.equals(contributionId))// skip boot
29 continue contributions;
30 A2Contribution contribution = new A2Contribution(this, contributionId);
31 contributions.add(contribution);
32 }
33 }
34
35 for (A2Contribution contribution : contributions) {
36 DirectoryStream<Path> modulePaths = Files.newDirectoryStream(base.resolve(contribution.getId()));
37 modules: for (Path modulePath : modulePaths) {
38 if (!Files.isDirectory(modulePath)) {
39 // OsgiBootUtils.debug("Registering " + modulePath);
40 String moduleFileName = modulePath.getFileName().toString();
41 int lastDot = moduleFileName.lastIndexOf('.');
42 String ext = moduleFileName.substring(lastDot + 1);
43 if (!"jar".equals(ext))
44 continue modules;
45 String moduleName = moduleFileName.substring(0, lastDot);
46 if (moduleName.endsWith("-SNAPSHOT"))
47 moduleName = moduleName.substring(0, moduleName.length() - "-SNAPSHOT".length());
48 int lastDash = moduleName.lastIndexOf('-');
49 String versionStr = moduleName.substring(lastDash + 1);
50 String componentName = moduleName.substring(0, lastDash);
51 // if(versionStr.endsWith("-SNAPSHOT")) {
52 // versionStr = readVersionFromModule(modulePath);
53 // }
54 Version version;
55 try {
56 version = new Version(versionStr);
57 } catch (Exception e) {
58 versionStr = readVersionFromModule(modulePath);
59 if (versionStr != null) {
60 version = new Version(versionStr);
61 } else {
62 OsgiBootUtils.debug("Ignore " + modulePath + " (" + e.getMessage() + ")");
63 continue modules;
64 }
65 }
66 A2Component component = contribution.getOrAddComponent(componentName);
67 A2Module module = component.getOrAddModule(version, modulePath);
68 if (OsgiBootUtils.isDebug())
69 OsgiBootUtils.debug("Registered " + module);
70 }
71 }
72 }
73
74 }
75
76 public static void main(String[] args) {
77 try {
78 FsA2Source context = new FsA2Source(Paths.get(
79 "/home/mbaudier/dev/git/apache2/argeo-commons/dist/argeo-node/target/argeo-node-2.1.77-SNAPSHOT/share/osgi"));
80 context.load();
81 context.asTree();
82 } catch (Exception e) {
83 e.printStackTrace();
84 }
85 }
86
87 }