This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git
commit a5f2be110506de5ee7a473e8a4ee61fe2c6bec26 Author: Robert Munteanu <[email protected]> AuthorDate: Mon Aug 17 11:44:55 2020 +0200 SLING-9620 - ResourceMapperImpl.getAllMappings does not respect multi-valued sling:alias Read mult-valued aliases also when optimised alias resolution is enabled. --- .../impl/mapping/ResourceMapperImpl.java | 18 ++++++++---------- .../impl/mapping/ResourceMapperImplTest.java | 5 ----- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/ResourceMapperImpl.java b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/ResourceMapperImpl.java index 89f2859..1bd69b2 100644 --- a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/ResourceMapperImpl.java +++ b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/ResourceMapperImpl.java @@ -25,7 +25,9 @@ import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.function.UnaryOperator; +import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -226,18 +228,14 @@ public class ResourceMapperImpl implements ResourceMapper { final Map<String, String> aliases = mapEntries.getAliasMap(parentPath); - if ( aliases == null ) + if ( aliases == null || !aliases.containsValue(current.getName()) ) return Collections.emptyList(); - if ( aliases.containsValue(current.getName()) ) { - for ( Map.Entry<String,String> entry : aliases.entrySet() ) { - if (current.getName().equals(entry.getValue())) { - // TODO - support multi-valued entries - return Collections.singletonList(entry.getKey()); - } - } - } - return Collections.emptyList(); + return aliases.entrySet().stream() + .filter( e -> current.getName().contentEquals(e.getValue()) ) + .map( Entry::getKey ) + .collect(Collectors.toList()); + } else { logger.debug("map: Optimize Alias Resolution is Disabled"); String[] aliases = ResourceResolverControl.getProperty(current, ResourceResolverImpl.PROP_ALIAS, String[].class); diff --git a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/ResourceMapperImplTest.java b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/ResourceMapperImplTest.java index e267be5..77f6ca2 100644 --- a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/ResourceMapperImplTest.java +++ b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/ResourceMapperImplTest.java @@ -25,12 +25,10 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; -import static org.junit.Assume.assumeFalse; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.Arrays; -import java.util.Collection; import java.util.HashSet; import java.util.Set; @@ -47,7 +45,6 @@ import org.apache.sling.resourceresolver.impl.ResourceResolverFactoryActivator; import org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl; import org.apache.sling.spi.resource.provider.ResourceProvider; import org.apache.sling.testing.mock.osgi.junit.OsgiContext; -import org.jetbrains.annotations.NotNull; import org.junit.After; import org.junit.Before; import org.junit.Ignore; @@ -208,8 +205,6 @@ public class ResourceMapperImplTest { @Test public void mapResourceWithMultivaluedAlias() { - assumeFalse(optimiseAliasResolution); - ExpectedMappings.existingResource("/there-multiple") .singleMapping("/alias-value-3") .singleMappingWithRequest("/app/alias-value-3")
