plugins: repositories: sort categories (N/A as last one)
authorAnna Kozlova <anna.kozlova@jetbrains.com>
Mon, 30 Jan 2012 17:25:13 +0000 (21:25 +0400)
committerAnna Kozlova <anna.kozlova@jetbrains.com>
Mon, 30 Jan 2012 18:20:44 +0000 (22:20 +0400)
platform/platform-impl/src/com/intellij/ide/plugins/AvailablePluginsManagerMain.java
platform/platform-impl/src/com/intellij/ide/plugins/AvailablePluginsTableModel.java

index d23a81795535d825e05f92c413f8c533718b5047..04da5ea0bba2279d5c3a6147d94d0423ff20ac38 100644 (file)
@@ -36,13 +36,14 @@ import java.awt.event.ActionListener;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.util.ArrayList;
-import java.util.LinkedHashSet;
+import java.util.TreeSet;
 
 /**
  * User: anna
  */
 public class AvailablePluginsManagerMain extends PluginManagerMain {
   public static final String MANAGE_REPOSITORIES = "Manage repositories...";
+  public static final String N_A = "N/A";
 
   private PluginManagerMain installed;
 
@@ -140,7 +141,7 @@ public class AvailablePluginsManagerMain extends PluginManagerMain {
       super.update(e);
       String category = ((AvailablePluginsTableModel)pluginsModel).getCategory();
       if (category == null) {
-        category = "N/A";
+        category = N_A;
       }
       e.getPresentation().setText("Category: " + category);
     }
@@ -148,17 +149,21 @@ public class AvailablePluginsManagerMain extends PluginManagerMain {
     @NotNull
     @Override
     protected DefaultActionGroup createPopupActionGroup(JComponent button) {
-      final LinkedHashSet<String> availableCategories = ((AvailablePluginsTableModel)pluginsModel).getAvailableCategories();
+      final TreeSet<String> availableCategories = ((AvailablePluginsTableModel)pluginsModel).getAvailableCategories();
       final DefaultActionGroup gr = new DefaultActionGroup();
       gr.add(createFilterByCategoryAction(AvailablePluginsTableModel.ALL));
+      final boolean noCategory = availableCategories.remove(N_A);
       for (final String availableCategory : availableCategories) {
         gr.add(createFilterByCategoryAction(availableCategory));
       }
+      if (noCategory) {
+        gr.add(createFilterByCategoryAction(N_A));
+      }
       return gr;
     }
 
     private AnAction createFilterByCategoryAction(final String availableCategory) {
-      return new AnAction(availableCategory != null ? availableCategory : "<N/A>") {
+      return new AnAction(availableCategory) {
         @Override
         public void actionPerformed(AnActionEvent e) {
           final String filter = myFilter.getFilter().toLowerCase();
index 4c08cfffcfeb00bf70f87f3949e76db82d210d0b..ac21018d7f3a47a70b06f4d48995ad362c190f13 100644 (file)
@@ -26,8 +26,8 @@ import com.intellij.util.ui.ColumnInfo;
 
 import javax.swing.*;
 import java.util.ArrayList;
-import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.TreeSet;
 
 /**
  * Created by IntelliJ IDEA.
@@ -40,7 +40,7 @@ public class AvailablePluginsTableModel extends PluginTableModel {
 
   public static final String ALL = "All";
   private String myCategory = ALL;
-  private LinkedHashSet<String> myAvailableCategories = new LinkedHashSet<String>();
+  private TreeSet<String> myAvailableCategories = new TreeSet<String>();
 
   protected static final String STATUS = "Status";
 
@@ -89,7 +89,7 @@ public class AvailablePluginsTableModel extends PluginTableModel {
     return true;
   }
 
-  public LinkedHashSet<String> getAvailableCategories() {
+  public TreeSet<String> getAvailableCategories() {
     return myAvailableCategories;
   }
 
@@ -119,7 +119,12 @@ public class AvailablePluginsTableModel extends PluginTableModel {
     for (IdeaPluginDescriptor descr : list) {
       updateStatus(descr);
       view.add(descr);
-      myAvailableCategories.add(descr.getCategory());
+      final String category = descr.getCategory();
+      if (category != null) {
+        myAvailableCategories.add(category);
+      } else {
+        myAvailableCategories.add(AvailablePluginsManagerMain.N_A);
+      }
     }
 
     fireTableDataChanged();