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