Introduce runtime manager
[lgpl/argeo-commons.git] / org.argeo.init / src / org / argeo / init / a2 / FsA2Source.java
index e0e2e437f58307c50b60e53500634b3111da2f21..acc553d7d14b233adb9dacce510d2859840cc1a3 100644 (file)
@@ -7,6 +7,7 @@ import java.nio.file.DirectoryStream;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.SortedMap;
 import java.util.StringJoiner;
@@ -20,14 +21,16 @@ public class FsA2Source extends AbstractProvisioningSource implements A2Source {
        private final Path base;
        private final Map<String, String> variantsXOr;
 
-//     public FsA2Source(Path base) {
-//             this(base, new HashMap<>());
-//     }
+       private final List<String> includes;
+       private final List<String> excludes;
 
-       public FsA2Source(Path base, Map<String, String> variantsXOr, boolean usingReference) {
+       public FsA2Source(Path base, Map<String, String> variantsXOr, boolean usingReference, List<String> includes,
+                       List<String> excludes) {
                super(usingReference);
                this.base = base;
                this.variantsXOr = new HashMap<>(variantsXOr);
+               this.includes = includes;
+               this.excludes = excludes;
        }
 
        void load() throws IOException {
@@ -63,26 +66,34 @@ public class FsA2Source extends AbstractProvisioningSource implements A2Source {
 
                                        // a variant was found, let's collect its contributions (also common ones in its
                                        // parent)
-                                       for (Path variantContributionPath : Files.newDirectoryStream(variantPath.getParent())) {
-                                               String variantContributionId = variantContributionPath.getFileName().toString();
-                                               if (variantContributionId.contains(".")) {
-                                                       A2Contribution contribution = getOrAddContribution(variantContributionId);
-                                                       contributions.put(variantContributionPath, contribution);
+                                       if (Files.exists(variantPath.getParent())) {
+                                               for (Path variantContributionPath : Files.newDirectoryStream(variantPath.getParent())) {
+                                                       String variantContributionId = variantContributionPath.getFileName().toString();
+                                                       if (variantContributionId.contains(".")) {
+                                                               A2Contribution contribution = getOrAddContribution(variantContributionId);
+                                                               contributions.put(variantContributionPath, contribution);
+                                                       }
                                                }
                                        }
-                                       for (Path variantContributionPath : Files.newDirectoryStream(variantPath)) {
-                                               String variantContributionId = variantContributionPath.getFileName().toString();
-                                               if (variantContributionId.contains(".")) {
-                                                       A2Contribution contribution = getOrAddContribution(variantContributionId);
-                                                       contributions.put(variantContributionPath, contribution);
+                                       if (Files.exists(variantPath)) {
+                                               for (Path variantContributionPath : Files.newDirectoryStream(variantPath)) {
+                                                       String variantContributionId = variantContributionPath.getFileName().toString();
+                                                       if (variantContributionId.contains(".")) {
+                                                               A2Contribution contribution = getOrAddContribution(variantContributionId);
+                                                               contributions.put(variantContributionPath, contribution);
+                                                       }
                                                }
                                        }
                                }
                        }
                }
 
-               for (Path contributionPath : contributions.keySet()) {
+               contributions: for (Path contributionPath : contributions.keySet()) {
                        String contributionId = contributionPath.getFileName().toString();
+                       if (includes != null && !includes.contains(contributionId))
+                               continue contributions;
+                       if (excludes != null && excludes.contains(contributionId))
+                               continue contributions;
                        A2Contribution contribution = getOrAddContribution(contributionId);
                        DirectoryStream<Path> modulePaths = Files.newDirectoryStream(contributionPath);
                        modules: for (Path modulePath : modulePaths) {