1 package org
.argeo
.init
.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
.init
.osgi
.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 String versionStr
= readVersionFromModule(modulePath
);
60 String componentName
= readSymbolicNameFromModule(modulePath
);
61 if (versionStr
!= null) {
62 version
= new Version(versionStr
);
64 OsgiBootUtils
.debug("Ignore " + modulePath
+ " since version cannot be found");
68 A2Component component
= contribution
.getOrAddComponent(componentName
);
69 A2Module module
= component
.getOrAddModule(version
, modulePath
);
70 if (OsgiBootUtils
.isDebug())
71 OsgiBootUtils
.debug("Registered " + module
);
78 public static void main(String
[] args
) {
80 FsA2Source context
= new FsA2Source(Paths
.get(
81 "/home/mbaudier/dev/git/apache2/argeo-commons/dist/argeo-node/target/argeo-node-2.1.77-SNAPSHOT/share/osgi"));
84 } catch (Exception e
) {