1 package org
.argeo
.osgi
.a2
;
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
;
11 import org
.argeo
.osgi
.boot
.OsgiBootUtils
;
12 import org
.osgi
.framework
.Version
;
14 /** A file system {@link AbstractProvisioningSource} in A2 format. */
15 public class FsA2Source
extends AbstractProvisioningSource
implements A2Source
{
16 private final Path base
;
18 public FsA2Source(Path base
) {
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
);
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
))
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);
57 version
= new Version(versionStr
);
58 } catch (Exception e
) {
59 versionStr
= readVersionFromModule(modulePath
);
60 if (versionStr
!= null) {
61 version
= new Version(versionStr
);
63 OsgiBootUtils
.debug("Ignore " + modulePath
+ " (" + e
.getMessage() + ")");
67 A2Component component
= contribution
.getOrAddComponent(componentName
);
68 A2Module module
= component
.getOrAddModule(version
, modulePath
);
69 if (OsgiBootUtils
.isDebug())
70 OsgiBootUtils
.debug("Registered " + module
);
77 public static void main(String
[] args
) {
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"));
83 } catch (Exception e
) {