You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2015/02/12 18:22:26 UTC

[2/2] karaf git commit: [KARAF-3524] Features on conditionals are not installed

[KARAF-3524] Features on conditionals are not installed

Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/00743ee7
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/00743ee7
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/00743ee7

Branch: refs/heads/master
Commit: 00743ee769b6b70e655834d16e236c0a818cceaf
Parents: 8685407
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Thu Feb 12 18:22:11 2015 +0100
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Thu Feb 12 18:22:11 2015 +0100

----------------------------------------------------------------------
 .../features/internal/region/Subsystem.java      | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/00743ee7/features/core/src/main/java/org/apache/karaf/features/internal/region/Subsystem.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/region/Subsystem.java b/features/core/src/main/java/org/apache/karaf/features/internal/region/Subsystem.java
index a958e8a..575bac7 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/region/Subsystem.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/region/Subsystem.java
@@ -258,8 +258,12 @@ public class Subsystem extends ResourceImpl {
 
     @SuppressWarnings("InfiniteLoopStatement")
     public void build(Collection<Feature> features) throws Exception {
+        doBuild(features, true);
+    }
+
+    private void doBuild(Collection<Feature> features, boolean mandatory) throws Exception {
         for (Subsystem child : children) {
-            child.build(features);
+            child.doBuild(features, true);
         }
         if (feature != null) {
             for (Dependency dep : feature.getDependencies()) {
@@ -267,7 +271,18 @@ public class Subsystem extends ResourceImpl {
                 while (!ss.isAcceptDependencies()) {
                     ss = ss.getParent();
                 }
-                ss.requireFeature(dep.getName(), dep.getVersion(), !dep.isDependency());
+                ss.requireFeature(dep.getName(), dep.getVersion(), mandatory && !dep.isDependency());
+            }
+            for (Conditional cond : feature.getConditional()) {
+                Feature fcond = cond.asFeature(feature.getName(), feature.getVersion());
+                String ssName = this.name + "#" + (fcond.hasVersion() ? fcond.getName() + "-" + fcond.getVersion() : fcond.getName());
+                Subsystem fs = getChild(ssName);
+                if (fs == null) {
+                    fs = new Subsystem(ssName, fcond, this);
+                    fs.doBuild(features, false);
+                    installable.add(fs);
+                    children.add(fs);
+                }
             }
         }
         List<Requirement> processed = new ArrayList<>();