Factor out bundle comparator class to eliminate one anonymous inner class.


git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@981954 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/framework/src/main/java/org/apache/felix/framework/Felix.java b/framework/src/main/java/org/apache/felix/framework/Felix.java
index 47eed2a..6f79d64 100644
--- a/framework/src/main/java/org/apache/felix/framework/Felix.java
+++ b/framework/src/main/java/org/apache/felix/framework/Felix.java
@@ -1064,66 +1064,8 @@
             {
                 // Get a snapshot of all installed bundles.
                 bundles = getBundles();
-
-                // Sort bundle array by start level either ascending or
-                // descending depending on whether the start level is being
-                // lowered or raised to that the bundles can be efficiently
-                // processed in order. Within a start level sort by bundle ID.
-                Comparator comparator = null;
-                if (lowering)
-                {
-                    // Sort descending to stop highest start level first.
-                    comparator = new Comparator() {
-                        public int compare(Object o1, Object o2)
-                        {
-                            BundleImpl b1 = (BundleImpl) o1;
-                            BundleImpl b2 = (BundleImpl) o2;
-                            if (b1.getStartLevel(getInitialBundleStartLevel())
-                                < b2.getStartLevel(getInitialBundleStartLevel()))
-                            {
-                                return 1;
-                            }
-                            else if (b1.getStartLevel(getInitialBundleStartLevel())
-                                > b2.getStartLevel(getInitialBundleStartLevel()))
-                            {
-                                return -1;
-                            }
-                            else if (b1.getBundleId() < b2.getBundleId())
-                            {
-                                return 1;
-                            }
-                            return -1;
-                        }
-                    };
-                }
-                else
-                {
-                    // Sort ascending to start lowest start level first.
-                    comparator = new Comparator() {
-                        public int compare(Object o1, Object o2)
-                        {
-                            BundleImpl b1 = (BundleImpl) o1;
-                            BundleImpl b2 = (BundleImpl) o2;
-                            if (b1.getStartLevel(getInitialBundleStartLevel())
-                                > b2.getStartLevel(getInitialBundleStartLevel()))
-                            {
-                                return 1;
-                            }
-                            else if (b1.getStartLevel(getInitialBundleStartLevel())
-                                < b2.getStartLevel(getInitialBundleStartLevel()))
-                            {
-                                return -1;
-                            }
-                            else if (b1.getBundleId() > b2.getBundleId())
-                            {
-                                return 1;
-                            }
-                            return -1;
-                        }
-                    };
-                }
-
-                Arrays.sort(bundles, comparator);
+                // Sort the bundles according to sort level for processing.
+                Arrays.sort(bundles, new BundleComparator(lowering));
             }
 
             // Stop or start the bundles according to the start level.
@@ -4509,6 +4451,48 @@
         }
     }
 
+    // Compares bundles by start level either ascending or
+    // descending depending on whether the start level is being
+    // lowered or raised. Within a start level sort by bundle ID.
+    private class BundleComparator implements Comparator
+    {
+        private final boolean m_lowering;
+
+        BundleComparator(boolean lowering)
+        {
+            m_lowering = lowering;
+        }
+
+        public int compare(Object o1, Object o2)
+        {
+            int result = -1;
+
+            BundleImpl b1 = (BundleImpl) o1;
+            BundleImpl b2 = (BundleImpl) o2;
+            if (b1.getStartLevel(getInitialBundleStartLevel())
+                < b2.getStartLevel(getInitialBundleStartLevel()))
+            {
+                result = 1;
+            }
+            else if (b1.getStartLevel(getInitialBundleStartLevel())
+                > b2.getStartLevel(getInitialBundleStartLevel()))
+            {
+                result = -1;
+            }
+            else if (b1.getBundleId() < b2.getBundleId())
+            {
+                result = 1;
+            }
+
+            if (!m_lowering)
+            {
+                result = result * -1;
+            }
+
+            return result;
+        }
+    }
+
     //
     // Locking related methods.
     //
@@ -4811,4 +4795,4 @@
     {
         return m_urlHandlersActivator.getContentHandlerService(mimeType);
     }
-}
+}
\ No newline at end of file