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/01/13 10:39:56 UTC

[5/5] karaf git commit: Support karaf 2.4 installations and conditional in startup features

Support karaf 2.4 installations and conditional in startup features

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

Branch: refs/heads/master
Commit: abf3e829c1eeba6871446e58da2fc98856439ff2
Parents: 5ab1c91
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Mon Jan 12 18:14:45 2015 +0100
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Mon Jan 12 18:14:45 2015 +0100

----------------------------------------------------------------------
 .../karaf/tooling/features/InstallKarsMojo.java | 54 ++++++++++++++++++--
 1 file changed, 50 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/abf3e829/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java
----------------------------------------------------------------------
diff --git a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java
index 8dee460..9210773 100644
--- a/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java
+++ b/tooling/karaf-maven-plugin/src/main/java/org/apache/karaf/tooling/features/InstallKarsMojo.java
@@ -18,6 +18,8 @@
  */
 package org.apache.karaf.tooling.features;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.InputStream;
@@ -174,6 +176,9 @@ public class InstallKarsMojo extends MojoSupport {
     @Parameter
     protected boolean installAllFeaturesByDefault = true;
 
+    @Parameter
+    protected boolean use24SyntaxForStartup = false;
+
     // an access layer for available Aether implementation
     protected DependencyHelper dependencyHelper;
 
@@ -383,6 +388,23 @@ public class InstallKarsMojo extends MojoSupport {
                 installConfig(config);
             }
             for (Conditional cond : feature.getConditional()) {
+                boolean doInstall = true;
+                for (Dependency dep : cond.getFeature()) {
+                    if (!startupFeatures.contains(dep.getName())) {
+                        doInstall = false;
+                        break;
+                    }
+                }
+                if (doInstall) {
+                    for (Bundle bundleInfo : cond.getBundle()) {
+                        String bundleLocation = bundleInfo.getLocation();
+                        int bundleStartLevel = bundleInfo.getStartLevel() == 0 ? defaultStartLevel : bundleInfo.getStartLevel();
+                        if (allStartupBundles.containsKey(bundleLocation)) {
+                            bundleStartLevel = Math.min(bundleStartLevel, allStartupBundles.get(bundleLocation));
+                        }
+                        allStartupBundles.put(bundleLocation, bundleStartLevel);
+                    }
+                }
                 for (Config config : cond.getConfig()) {
                     installConfig(config);
                 }
@@ -425,10 +447,13 @@ public class InstallKarsMojo extends MojoSupport {
         for (Map.Entry<Integer, Set<String>> entry : invertedStartupBundles.entrySet()) {
             String startLevel = Integer.toString(entry.getKey());
             for (String location : new TreeSet<>(entry.getValue())) {
-                location = installStartupArtifact(location, useReferenceUrls);
+                location = installStartupArtifact(location, useReferenceUrls || use24SyntaxForStartup);
                 if (location.startsWith("file:") && useReferenceUrls) {
                     location = "reference:" + location;
                 }
+                if (location.startsWith("file:") && use24SyntaxForStartup) {
+                    location = location.substring("file:".length());
+                }
                 startupProperties.put(location, startLevel);
             }
         }
@@ -549,11 +574,32 @@ public class InstallKarsMojo extends MojoSupport {
         // so keep the generated feature
         if (!generated.getBundle().isEmpty()) {
             File output = new File(workDirectory, "etc/" + rep.getName() + ".xml");
-            try (FileOutputStream os = new FileOutputStream(output)) {
-                JaxbUtil.marshal(rep, os);
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            JaxbUtil.marshal(rep, baos);
+            ByteArrayInputStream bais;
+            String repoUrl;
+            if (use24SyntaxForStartup) {
+                String str = baos.toString();
+                str = str.replace("http://karaf.apache.org/xmlns/features/v1.3.0", "http://karaf.apache.org/xmlns/features/v1.2.0");
+                str = str.replaceAll(" dependency=\".*?\"", "");
+                str = str.replaceAll(" prerequisite=\".*?\"", "");
+                for (Feature f : rep.getFeature()) {
+                    for (Dependency d : f.getFeature()) {
+                        if (d.isPrerequisite()) {
+                            if (!startupEffective.getFeatures().contains(d.getName())) {
+                                getLog().warn("Feature " + d.getName() + " is a prerequisite and should be installed as a startup feature.");                }
+                        }
+                    }
+                }
+                bais = new ByteArrayInputStream(str.getBytes());
+                repoUrl = "file:etc/" + output.getName();
+            } else {
+                bais = new ByteArrayInputStream(baos.toByteArray());
+                repoUrl = "file:${karaf.home}/etc/" + output.getName();
             }
+            Files.copy(bais, output.toPath());
             Properties featuresProperties = new Properties(featuresCfgFile);
-            featuresProperties.put(FEATURES_REPOSITORIES, "file:${karaf.home}/etc/" + output.getName());
+            featuresProperties.put(FEATURES_REPOSITORIES, repoUrl);
             featuresProperties.put(FEATURES_BOOT, generated.getName());
             featuresProperties.save();
         }