FELIX-2508 Replaced TreeMap used for sorting by a Comparator implementation used together with Arrays.sort.

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@981484 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ComponentsServlet.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ComponentsServlet.java
index 38b728f..1481b25 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ComponentsServlet.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ComponentsServlet.java
@@ -20,9 +20,10 @@
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.StringWriter;
+import java.util.Arrays;
+import java.util.Comparator;
 import java.util.Dictionary;
 import java.util.Iterator;
-import java.util.TreeMap;
 import java.util.TreeSet;
 
 import javax.servlet.ServletException;
@@ -190,22 +191,18 @@
                 else
                 {
                     // order components by name
-                    TreeMap componentMap = new TreeMap();
-                    for ( int i = 0; i < components.length; i++ )
-                    {
-                        Component c = components[i];
-                        componentMap.put( c.getName(), c );
-                    }
+                    sortComponents( components );
 
                     final StringBuffer buffer = new StringBuffer();
-                    buffer.append(componentMap.size());
-                    buffer.append(" component");
-                    if ( componentMap.size() != 1 ) {
-                        buffer.append('s');
+                    buffer.append( components.length );
+                    buffer.append( " component" );
+                    if ( components.length != 1 )
+                    {
+                        buffer.append( 's' );
                     }
-                    buffer.append(" installed.");
-                    jw.key("status");
-                    jw.value(componentMap.size());
+                    buffer.append( " installed." );
+                    jw.key( "status" );
+                    jw.value( components.length );
 
                     // render components
                     jw.key( "data" );
@@ -216,9 +213,9 @@
                     }
                     else
                     {
-                        for ( Iterator ci = componentMap.values().iterator(); ci.hasNext(); )
+                        for ( int i = 0; i < components.length; i++ )
                         {
-                            component( jw, ( Component ) ci.next(), false );
+                            component( jw, components[i], false );
                         }
                     }
                     jw.endArray();
@@ -233,6 +230,26 @@
         }
     }
 
+
+    private void sortComponents( Component[] components )
+    {
+        Arrays.sort( components, new Comparator()
+        {
+            public int compare( Object o0, Object o1 )
+            {
+                final Component c0 = ( Component ) o0;
+                final Component c1 = ( Component ) o1;
+                final int nameCmp = c0.getName().compareTo( c1.getName() );
+                if ( nameCmp != 0 )
+                {
+                    return nameCmp;
+                }
+                return ( c0.getId() < c1.getId() ) ? -1 : ( ( c0.getId() > c1.getId() ) ? 1 : 0 );
+            }
+        } );
+    }
+
+
     private void component( JSONWriter jw, Component component, boolean details ) throws JSONException
     {
         String id = String.valueOf( component.getId() );