You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2014/09/15 21:42:19 UTC

git commit: [KARAF-3023] Fix association features/repositories in feature:list -o command

Repository: karaf
Updated Branches:
  refs/heads/karaf-3.0.x a32bf9a51 -> ea35dfc9e


[KARAF-3023] Fix association features/repositories in feature:list -o command


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

Branch: refs/heads/karaf-3.0.x
Commit: ea35dfc9e1df0b1be435c5b1a812f0d64c2fb5c3
Parents: a32bf9a
Author: Jean-Baptiste Onofré <jb...@apache.org>
Authored: Mon Sep 15 21:41:39 2014 +0200
Committer: Jean-Baptiste Onofré <jb...@apache.org>
Committed: Mon Sep 15 21:41:39 2014 +0200

----------------------------------------------------------------------
 .../features/command/ListFeaturesCommand.java   | 62 ++++++++++++--------
 1 file changed, 36 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/ea35dfc9/features/command/src/main/java/org/apache/karaf/features/command/ListFeaturesCommand.java
----------------------------------------------------------------------
diff --git a/features/command/src/main/java/org/apache/karaf/features/command/ListFeaturesCommand.java b/features/command/src/main/java/org/apache/karaf/features/command/ListFeaturesCommand.java
index 7e3a867..d1efaf2 100644
--- a/features/command/src/main/java/org/apache/karaf/features/command/ListFeaturesCommand.java
+++ b/features/command/src/main/java/org/apache/karaf/features/command/ListFeaturesCommand.java
@@ -16,10 +16,7 @@
  */
 package org.apache.karaf.features.command;
 
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
+import java.util.*;
 
 import org.apache.karaf.features.Feature;
 import org.apache.karaf.features.FeaturesService;
@@ -42,7 +39,7 @@ public class ListFeaturesCommand extends FeaturesCommandSupport {
 
     protected void doExecute(FeaturesService featuresService) throws Exception {
         boolean needsLegend = false;
-        
+
         ShellTable table = new ShellTable();
         table.column("Name");
         table.column("Version");
@@ -51,26 +48,29 @@ public class ListFeaturesCommand extends FeaturesCommandSupport {
         table.column("Description").maxSize(50);
         table.emptyTableText(onlyInstalled ? "No features installed" : "No features available");
 
-        List<Repository> repos = Arrays.asList(featuresService.listRepositories());
-        for (Repository r : repos) {
-            List<Feature> features = Arrays.asList(r.getFeatures());
-            if (ordered) {
-                Collections.sort(features, new FeatureComparator());
-            }
-            for (Feature f : features) {
-                if (onlyInstalled && !featuresService.isInstalled(f)) {
-                    // Filter out not installed features if we only want to see the installed ones
+        List<FeatureAndRepository> featuresAndRepositories = new ArrayList<FeatureAndRepository>();
+        for (Repository repository : Arrays.asList(featuresService.listRepositories())) {
+            for (Feature feature : Arrays.asList(repository.getFeatures())) {
+                if (onlyInstalled && !featuresService.isInstalled(feature)) {
                     continue;
                 }
-                table.addRow().addContent(
-                        f.getName(),
-                        f.getVersion(),
-                        featuresService.isInstalled(f) ? "x" : "",
-                        r.getName(),
-                        f.getDescription());
-                if (isInstalledViaDeployDir(r.getName())) {
-                    needsLegend = true;
-                }
+                featuresAndRepositories.add(new FeatureAndRepository(feature, repository));
+            }
+        }
+
+        if (ordered) {
+            Collections.sort(featuresAndRepositories, new FeatureAndRepositoryComparator());
+        }
+
+        for (FeatureAndRepository far : featuresAndRepositories) {
+            table.addRow().addContent(
+                    far.feature.getName(),
+                    far.feature.getVersion(),
+                    featuresService.isInstalled(far.feature) ? "x" : "",
+                    far.repository.getName(),
+                    far.feature.getDescription());
+            if (isInstalledViaDeployDir(far.repository.getName())) {
+                needsLegend = true;
             }
         }
 
@@ -86,9 +86,19 @@ public class ListFeaturesCommand extends FeaturesCommandSupport {
         return (st == null || st.length() <= 1) ? false : (st.charAt(st.length() - 1) == '*');
     }
 
-    class FeatureComparator implements Comparator<Feature> {
-        public int compare(Feature o1, Feature o2) {
-            return o1.getName().toLowerCase().compareTo( o2.getName().toLowerCase() );
+    class FeatureAndRepository {
+        public Feature feature;
+        public Repository repository;
+
+        FeatureAndRepository(Feature feature, Repository repository) {
+            this.feature = feature;
+            this.repository = repository;
+        }
+    }
+
+    class FeatureAndRepositoryComparator implements Comparator<FeatureAndRepository> {
+        public int compare(FeatureAndRepository o1, FeatureAndRepository o2) {
+            return o1.feature.getName().toLowerCase().compareTo( o2.feature.getName().toLowerCase() );
         }
     }