This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.commons.osgi-2.0.6 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-osgi.git
commit 2602d927d6a5e63e7a39cd7ca8d291c6a072a262 Author: Carsten Ziegeler <[email protected]> AuthorDate: Tue Mar 9 18:08:24 2010 +0000 SLING-1431 : Utility method to get the service ranking git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/osgi@921025 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/sling/commons/osgi/OsgiUtil.java | 86 ++++++++++++---------- 1 file changed, 48 insertions(+), 38 deletions(-) diff --git a/src/main/java/org/apache/sling/commons/osgi/OsgiUtil.java b/src/main/java/org/apache/sling/commons/osgi/OsgiUtil.java index 0216457..88779f1 100644 --- a/src/main/java/org/apache/sling/commons/osgi/OsgiUtil.java +++ b/src/main/java/org/apache/sling/commons/osgi/OsgiUtil.java @@ -300,50 +300,60 @@ public class OsgiUtil { * @since 2.0.6 */ public static Comparable<Object> getComparableForServiceRanking(final Map<String, Object> props) { + return new ComparableImplementation(props); + } - return new Comparable<Object>() { - - @SuppressWarnings("unchecked") - public int compareTo(Object reference) { - final Long otherId; - Object otherRankObj; - if ( reference instanceof ServiceReference ) { - final ServiceReference other = (ServiceReference) reference; - otherId = (Long) other.getProperty(Constants.SERVICE_ID); - otherRankObj = other.getProperty(Constants.SERVICE_RANKING); - } else { - final Map<String, Object> otherProps = (Map<String, Object>)reference; - otherId = (Long) otherProps.get(Constants.SERVICE_ID); - otherRankObj = otherProps.get(Constants.SERVICE_RANKING); - } - final Long id = (Long) props.get(Constants.SERVICE_ID); - if (id.equals(otherId)) { - return 0; // same service - } + private static final class ComparableImplementation implements Comparable<Object> { + + private final Map<String, Object> props; + + private ComparableImplementation(Map<String, Object> props) { + this.props = props; + } - Object rankObj = props.get(Constants.SERVICE_RANKING); + @SuppressWarnings("unchecked") + public int compareTo(Object reference) { + final Long otherId; + Object otherRankObj; + if ( reference instanceof ServiceReference ) { + final ServiceReference other = (ServiceReference) reference; + otherId = (Long) other.getProperty(Constants.SERVICE_ID); + otherRankObj = other.getProperty(Constants.SERVICE_RANKING); + } else if (reference instanceof Map){ + final Map<String, Object> otherProps = (Map<String, Object>)reference; + otherId = (Long) otherProps.get(Constants.SERVICE_ID); + otherRankObj = otherProps.get(Constants.SERVICE_RANKING); + } else { + final ComparableImplementation other = (ComparableImplementation)reference; + otherId = (Long) other.props.get(Constants.SERVICE_ID); + otherRankObj = other.props.get(Constants.SERVICE_RANKING); + } + final Long id = (Long) props.get(Constants.SERVICE_ID); + if (id.equals(otherId)) { + return 0; // same service + } - // If no rank, then spec says it defaults to zero. - rankObj = (rankObj == null) ? new Integer(0) : rankObj; - otherRankObj = (otherRankObj == null) ? new Integer(0) : otherRankObj; + Object rankObj = props.get(Constants.SERVICE_RANKING); - // If rank is not Integer, then spec says it defaults to zero. - Integer rank = (rankObj instanceof Integer) - ? (Integer) rankObj : new Integer(0); - Integer otherRank = (otherRankObj instanceof Integer) - ? (Integer) otherRankObj : new Integer(0); + // If no rank, then spec says it defaults to zero. + rankObj = (rankObj == null) ? new Integer(0) : rankObj; + otherRankObj = (otherRankObj == null) ? new Integer(0) : otherRankObj; - // Sort by rank in ascending order. - if (rank.compareTo(otherRank) < 0) { - return -1; // lower rank - } else if (rank.compareTo(otherRank) > 0) { - return 1; // higher rank - } + // If rank is not Integer, then spec says it defaults to zero. + Integer rank = (rankObj instanceof Integer) + ? (Integer) rankObj : new Integer(0); + Integer otherRank = (otherRankObj instanceof Integer) + ? (Integer) otherRankObj : new Integer(0); - // If ranks are equal, then sort by service id in descending order. - return (id.compareTo(otherId) < 0) ? 1 : -1; + // Sort by rank in ascending order. + if (rank.compareTo(otherRank) < 0) { + return -1; // lower rank + } else if (rank.compareTo(otherRank) > 0) { + return 1; // higher rank } - }; - } + // If ranks are equal, then sort by service id in descending order. + return (id.compareTo(otherId) < 0) ? 1 : -1; + } + } } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
