Repository: karaf
Updated Branches:
  refs/heads/karaf-3.0.x 2d3da7ebc -> 07f33e9c1


[KARAF-3425] Add support of feature name/version format in install-kars MOJO


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

Branch: refs/heads/karaf-3.0.x
Commit: 07f33e9c1cead0af78d0ce5d4db3e13bd3f3f727
Parents: 2d3da7e
Author: Jean-Baptiste Onofré <[email protected]>
Authored: Sun Jan 4 11:40:44 2015 +0100
Committer: Jean-Baptiste Onofré <[email protected]>
Committed: Sun Jan 4 11:40:44 2015 +0100

----------------------------------------------------------------------
 .../karaf/tooling/features/InstallKarsMojo.java | 81 +++++++++++++++-----
 1 file changed, 62 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/07f33e9c/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 c9d5b7c..b75c3e9 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
@@ -157,7 +157,7 @@ public class InstallKarsMojo extends MojoSupport {
         Set<String> repositories = new HashSet<String>();
         Map<Feature, Boolean> features = new HashMap<Feature, Boolean>();
 
-        // loading kar and featres repositories
+        // loading kar and features repositories
         getLog().info("Loading kar and features repositories dependencies with 
compile or runtime scopes");
         getLog().info("The startup.properties file is updated using kar and 
features dependency with a scope different from runtime, or defined in the 
<startupFeatures/> plugin configuration");
         Collection<Artifact> dependencies = project.getDependencyArtifacts();
@@ -192,28 +192,24 @@ public class InstallKarsMojo extends MojoSupport {
 
         // checking if all startup, installed, and boot features have been 
resolved
         getLog().info("Checking features resolution");
-        List<String> resolvedFeaturesNames = new ArrayList<String>();
-        for (Feature feature : features.keySet()) {
-            resolvedFeaturesNames.add(feature.getName());
-        }
         if (startupFeatures != null) {
             for (String startupFeature : startupFeatures) {
-                if (!resolvedFeaturesNames.contains(startupFeature)) {
-                    throw new MojoFailureException("Feature " + startupFeature 
+ " is not resolved. Check that <dependencies/> provide the kar of features 
repository providing this feature (with compile or runtime scope)");
+                if (!resolveFeature(features.keySet(), startupFeature)) {
+                    throw new MojoFailureException("Startup feature " + 
startupFeature + " is not resolved. Check that <dependencies/> provide the kar 
of features repository providing this feature (with compile or runtime scope)");
                 }
             }
         }
         if (bootFeatures != null) {
             for (String bootFeature : bootFeatures) {
-                if (!resolvedFeaturesNames.contains(bootFeature)) {
-                    throw new MojoFailureException("Feature " + bootFeature + 
" is not resolved. Check that <dependencies/> provide the kar of features 
repository providing this feature (with compile or runtime scope)");
+                if (!resolveFeature(features.keySet(), bootFeature)) {
+                    throw new MojoFailureException("Boot feature " + 
bootFeature + " is not resolved. Check that <dependencies/> provide the kar of 
features repository providing this feature (with compile or runtime scope)");
                 }
             }
         }
         if (installedFeatures != null) {
             for (String installedFeature : installedFeatures) {
-                if (!resolvedFeaturesNames.contains(installedFeature)) {
-                    throw new MojoFailureException("Feature " + 
installedFeature + " is not resolved. Check that <dependencies/> provide the 
kar of features repository providing this feature (with compile or runtime 
scope)");
+                if (!resolveFeature(features.keySet(), installedFeature)) {
+                    throw new MojoFailureException("Boot feature " + 
installedFeature + " is not resolved. Check that <dependencies/> provide the 
kar of features repository providing this feature (with compile or runtime 
scope)");
                 }
             }
         }
@@ -222,9 +218,9 @@ public class InstallKarsMojo extends MojoSupport {
         getLog().info("Installing features");
         for (Feature feature : features.keySet()) {
             try {
-                if (features.get(feature) || (startupFeatures != null && 
startupFeatures.contains(feature.getName()))) {
+                if (features.get(feature) || (startupFeatures != null && 
resolveFeature(startupFeatures, feature))) {
                     // the feature is a startup feature, updating 
startup.properties file
-                    getLog().info("Feature " + feature.getName() + " is 
defined as a startup feature");
+                    getLog().info("Feature " + feature.getName() + "/" + 
feature.getVersion() + " is defined as a startup feature");
                     getLog().info("= Updating startup.properties file");
                     List<String> comment = Arrays.asList(new String[]{"", "# 
feature: " + feature.getName() + " version: " + feature.getVersion()});
                     for (BundleInfo bundleInfo : feature.getBundles()) {
@@ -246,9 +242,9 @@ public class InstallKarsMojo extends MojoSupport {
                     }
                     // add the feature in the system folder
                     resolveFeature(feature, features);
-                } else if (bootFeatures != null && 
bootFeatures.contains(feature.getName())) {
+                } 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() + " is 
defined as a boot feature");
+                    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();
@@ -268,15 +264,15 @@ public class InstallKarsMojo extends MojoSupport {
                     }
                     // add the feature in the system folder
                     resolveFeature(feature, features);
-                } else if (installedFeatures != null && 
installedFeatures.contains(feature.getName())) {
-                    getLog().info("Feature " + feature.getName() + " is 
defined as a installed feature");
+                } else if (installedFeatures != null && 
resolveFeature(installedFeatures, feature)) {
+                    getLog().info("Feature " + feature.getName() + "/" + 
feature.getVersion() + " is defined as a installed feature");
                     // add the feature in the system folder
                     resolveFeature(feature, features);
                 } else {
-                    getLog().debug("Feature " + feature.getName() + " is not 
installed");
+                    getLog().debug("Feature " + feature.getName() + "/" + 
feature.getVersion() + " is not installed");
                 }
             } catch (Exception e) {
-                throw new MojoFailureException("Can not install " + 
feature.getName() + " feature", e);
+                throw new MojoFailureException("Can not install " + 
feature.getName() + "/" + feature.getVersion() + " feature", e);
             }
         }
 
@@ -307,6 +303,53 @@ public class InstallKarsMojo extends MojoSupport {
         }
     }
 
+    private boolean resolveFeature(Set<Feature> features, String 
featureToCheck) {
+        String name = featureToCheck;
+        // the format can be name/version
+        String[] split = name.split("/");
+        if (split.length == 2) {
+            // the feature used name/version format
+            name = split[0];
+            String version = split[1];
+            boolean found = false;
+            for (Feature feature : features) {
+                if (feature.getName().equals(name) && 
feature.getVersion().equals(version)) {
+                    found = true;
+                    break;
+                }
+            }
+            return found;
+        } else {
+            // the feature is just name
+            boolean found = false;
+            for (Feature feature : features) {
+                if (feature.getName().equals(name)) {
+                    found = true;
+                    break;
+                }
+            }
+            return found;
+        }
+    }
+
+    private boolean resolveFeature(List<String> features, Feature feature) {
+        for (String f : features) {
+            String[] split = f.split("/");
+            if (split.length == 2) {
+                String name = split[0];
+                String version = split[1];
+                if (feature.getName().equals(name) && 
feature.getVersion().equals(version)) {
+                    return true;
+                }
+            } else {
+                if (feature.getName().equals(f)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
     private void resolveRepository(String repository, Set<String> 
repositories, Map<Feature, Boolean> features, boolean updateFeaturesCfgFile, 
boolean updateStartupProperties) throws Exception {
         // check if the repository has not been processed
         if (repositories.contains(repository)) {

Reply via email to