This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.serviceusermapper-1.0.4 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-serviceusermapper.git
commit a8f6248654d7e39214efba4520b6b43560fed786 Author: Carsten Ziegeler <[email protected]> AuthorDate: Thu Jul 10 21:03:55 2014 +0000 SLING-3757 : cannot add more than 1 service user with the OSGI console git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/serviceusermapper@1609569 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/sling/serviceusermapping/impl/Mapping.java | 6 ++++++ .../serviceusermapping/impl/MappingConfigAmendment.java | 17 ++++++++++++----- .../serviceusermapping/impl/ServiceUserMapperImpl.java | 2 +- .../impl/ServiceUserMapperImplTest.java | 2 -- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/apache/sling/serviceusermapping/impl/Mapping.java b/src/main/java/org/apache/sling/serviceusermapping/impl/Mapping.java index b7effb7..07ca263 100644 --- a/src/main/java/org/apache/sling/serviceusermapping/impl/Mapping.java +++ b/src/main/java/org/apache/sling/serviceusermapping/impl/Mapping.java @@ -87,4 +87,10 @@ class Mapping { private boolean equals(String str1, String str2) { return ((str1 == null) ? str2 == null : str1.equals(str2)); } + + @Override + public String toString() { + return "Mapping [serviceName=" + serviceName + ", subServiceName=" + + subServiceName + ", userName=" + userName + "]"; + } } diff --git a/src/main/java/org/apache/sling/serviceusermapping/impl/MappingConfigAmendment.java b/src/main/java/org/apache/sling/serviceusermapping/impl/MappingConfigAmendment.java index 44265fe..1894133 100644 --- a/src/main/java/org/apache/sling/serviceusermapping/impl/MappingConfigAmendment.java +++ b/src/main/java/org/apache/sling/serviceusermapping/impl/MappingConfigAmendment.java @@ -29,7 +29,6 @@ import org.apache.felix.scr.annotations.Property; import org.apache.felix.scr.annotations.PropertyUnbounded; import org.apache.felix.scr.annotations.Service; import org.apache.sling.commons.osgi.PropertiesUtil; -import org.apache.sling.commons.osgi.ServiceUtil; import org.osgi.framework.Constants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -63,7 +62,7 @@ public class MappingConfigAmendment implements Comparable<MappingConfigAmendment private Mapping[] serviceUserMappings; - private Comparable<Object> comparable; + private int serviceRanking; @Activate @Modified @@ -71,7 +70,7 @@ public class MappingConfigAmendment implements Comparable<MappingConfigAmendment final String[] props = PropertiesUtil.toStringArray(config.get(PROP_SERVICE2USER_MAPPING), PROP_SERVICE2USER_MAPPING_DEFAULT); - ArrayList<Mapping> mappings = new ArrayList<Mapping>(props.length); + final ArrayList<Mapping> mappings = new ArrayList<Mapping>(props.length); for (final String prop : props) { if (prop != null && prop.trim().length() > 0 ) { try { @@ -84,7 +83,7 @@ public class MappingConfigAmendment implements Comparable<MappingConfigAmendment } this.serviceUserMappings = mappings.toArray(new Mapping[mappings.size()]); - this.comparable = ServiceUtil.getComparableForServiceRanking(config); + this.serviceRanking = PropertiesUtil.toInteger(config.get(Constants.SERVICE_RANKING), 0); } public Mapping[] getServiceUserMappings() { @@ -92,6 +91,14 @@ public class MappingConfigAmendment implements Comparable<MappingConfigAmendment } public int compareTo(final MappingConfigAmendment o) { - return -this.comparable.compareTo(o.comparable); + // Sort by rank in descending order. + if ( this.serviceRanking > o.serviceRanking ) { + return -1; // lower rank + } else if (this.serviceRanking < o.serviceRanking) { + return 1; // higher rank + } + + // If ranks are equal, then sort by hash code + return this.hashCode() < o.hashCode() ? -1 : 1; } } diff --git a/src/main/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImpl.java b/src/main/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImpl.java index ecd29ef..02e22f6 100644 --- a/src/main/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImpl.java +++ b/src/main/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImpl.java @@ -49,7 +49,7 @@ import org.slf4j.LoggerFactory; referenceInterface=MappingConfigAmendment.class, cardinality=ReferenceCardinality.OPTIONAL_MULTIPLE, policy=ReferencePolicy.DYNAMIC, - updated="update") + updated="updateAmendment") public class ServiceUserMapperImpl implements ServiceUserMapper { @Property( diff --git a/src/test/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImplTest.java b/src/test/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImplTest.java index 2b007be..2a98a45 100644 --- a/src/test/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImplTest.java +++ b/src/test/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImplTest.java @@ -164,7 +164,6 @@ public class ServiceUserMapperImplTest { final Map<String, Object> mca1Config = new HashMap<String, Object>() { { put("user.mapping", new String [] {BUNDLE_SYMBOLIC2 + "=" + ANOTHER}); - put(Constants.SERVICE_ID, 1L); put(Constants.SERVICE_RANKING, 100); } }; @@ -174,7 +173,6 @@ public class ServiceUserMapperImplTest { final Map<String, Object> mca2Config = new HashMap<String, Object>() { { put("user.mapping", new String [] {BUNDLE_SYMBOLIC2 + "=" + ANOTHER_SUB}); - put(Constants.SERVICE_ID, 2L); put(Constants.SERVICE_RANKING, 200); } }; -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
