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/03/20 15:56:00 UTC

karaf git commit: [KARAF-3589] karaf-maven-plugin doesn't allow specifying a version for a boot feature in etc/org.apache.karaf.features.cfg

Repository: karaf
Updated Branches:
  refs/heads/karaf-3.0.x ac97da44a -> 1b044c6ad


[KARAF-3589] karaf-maven-plugin doesn't allow specifying a version for a boot feature in etc/org.apache.karaf.features.cfg


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

Branch: refs/heads/karaf-3.0.x
Commit: 1b044c6ad84d717f964482307d719d1640529b8d
Parents: ac97da4
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Fri Mar 20 15:22:32 2015 +0100
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Fri Mar 20 15:55:54 2015 +0100

----------------------------------------------------------------------
 .../karaf/tooling/features/InstallKarsMojo.java | 63 ++++++++++++++------
 1 file changed, 46 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/1b044c6a/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 543fab2..7c4c1aa 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
@@ -26,8 +26,12 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.URI;
 import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.apache.felix.utils.properties.Properties;
+import org.apache.felix.utils.version.VersionRange;
+import org.apache.felix.utils.version.VersionTable;
 import org.apache.karaf.features.BundleInfo;
 import org.apache.karaf.features.Dependency;
 import org.apache.karaf.features.internal.model.*;
@@ -243,23 +247,6 @@ public class InstallKarsMojo extends MojoSupport {
                 } else if (bootFeatures != null && resolveFeature(bootFeatures, feature)) {
                     // the feature is a boot feature, updating the etc/org.apache.karaf.features.cfg file
                     getLog().info("Feature " + feature.getName() + "/" + feature.getVersion() + " is defined as a boot feature");
-                    if (featuresCfgFile.exists()) {
-                        getLog().info("= Updating " + featuresCfgFile.getPath());
-                        Properties featuresProperties = new Properties();
-                        InputStream in = new FileInputStream(featuresCfgFile);
-                        try {
-                            featuresProperties.load(in);
-                        } finally {
-                            in.close();
-                        }
-                        String featuresBoot = featuresProperties.getProperty(FEATURES_BOOT);
-                        featuresBoot = featuresBoot != null && featuresBoot.length() > 0 ? featuresBoot + "," : "";
-                        if (!featuresBoot.contains(feature.getName())) {
-                            featuresBoot = featuresBoot + feature.getName();
-                            featuresProperties.put(FEATURES_BOOT, featuresBoot);
-                            featuresProperties.save(featuresCfgFile);
-                        }
-                    }
                     // add the feature in the system folder
                     resolveFeature(feature, features);
                 } else if (installedFeatures != null && resolveFeature(installedFeatures, feature)) {
@@ -273,6 +260,33 @@ public class InstallKarsMojo extends MojoSupport {
                 throw new MojoFailureException("Can not install " + feature.getName() + "/" + feature.getVersion() + " feature", e);
             }
         }
+        // Add boot features to the configuration file
+        if (bootFeatures != null && featuresCfgFile.exists()) {
+            try {
+                getLog().info("= Updating " + featuresCfgFile.getPath());
+                Properties featuresProperties = new Properties(featuresCfgFile);
+                String featuresBoot = featuresProperties.getProperty(FEATURES_BOOT);
+                if (featuresBoot == null) {
+                    featuresBoot = "";
+                }
+                Set<String> boot = parseBootFeatures(featuresBoot);
+                for (String bootFeature : bootFeatures) {
+                    String[] split = bootFeature.split("/");
+                    String name = split[0].trim();
+                    if (split.length == 2) {
+                        name += ";version=\"" + split[1].trim() + "\"";
+                    }
+                    if (boot.add(name)) {
+                        featuresBoot = featuresBoot + (featuresBoot.isEmpty() ? "" : ",") + name;
+                    }
+                }
+                featuresProperties.put(FEATURES_BOOT, featuresBoot);
+                featuresProperties.save(featuresCfgFile);
+            } catch (Exception e) {
+                throw new MojoFailureException("Can not update " + featuresCfgFile, e);
+            }
+        }
+
 
         // install bundles defined in startup.properties
         getLog().info("Installing bundles defined in startup.properties in the system");
@@ -301,6 +315,21 @@ public class InstallKarsMojo extends MojoSupport {
         }
     }
 
+    protected Set<String> parseBootFeatures(String bootFeatures) {
+        Pattern pattern = Pattern.compile("(\\s*\\(([^)]+))\\s*\\)\\s*,\\s*|.+");
+        Matcher matcher = pattern.matcher(bootFeatures);
+        Set<String> result = new HashSet<String>();
+        while (matcher.find()) {
+            String group = matcher.group(2) != null ? matcher.group(2) : matcher.group();
+            for (String feature : Arrays.asList(group.trim().split("\\s*,\\s*"))) {
+                if (feature.length() > 0) {
+                    result.add(feature);
+                }
+            }
+        }
+        return result;
+    }
+
     private boolean resolveFeature(Set<Feature> features, String featureToCheck) {
         String name = featureToCheck;
         // the format can be name/version