This is an automated email from the ASF dual-hosted git repository. joerghoh pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-servlets-resolver.git
The following commit(s) were added to refs/heads/master by this push: new 5d6ecd8 SLING-12255 fix formatting (#44) 5d6ecd8 is described below commit 5d6ecd8508b74db6a7bbba5376935e4f5a391581 Author: Jörg Hoh <joerg...@users.noreply.github.com> AuthorDate: Tue Feb 20 14:01:55 2024 +0100 SLING-12255 fix formatting (#44) --- .../internal/helper/AbstractResourceCollector.java | 124 +++++++++--------- .../helper/AbstractResourceCollectorTest.java | 140 ++++++++++----------- 2 files changed, 132 insertions(+), 132 deletions(-) diff --git a/src/main/java/org/apache/sling/servlets/resolver/internal/helper/AbstractResourceCollector.java b/src/main/java/org/apache/sling/servlets/resolver/internal/helper/AbstractResourceCollector.java index 2179d37..11e4e18 100644 --- a/src/main/java/org/apache/sling/servlets/resolver/internal/helper/AbstractResourceCollector.java +++ b/src/main/java/org/apache/sling/servlets/resolver/internal/helper/AbstractResourceCollector.java @@ -45,10 +45,10 @@ import org.slf4j.LoggerFactory; * script to handle a request to the given resource. */ public abstract class AbstractResourceCollector { - + private static final Logger LOG = LoggerFactory.getLogger(AbstractResourceCollector.class); protected static final String CACHE_KEY_CHILDREN_LIST = AbstractResourceCollector.class.getName() + ".childrenList"; - + protected static final String CACHE_KEY_RESOURCES = AbstractResourceCollector.class.getName() + ".resources"; // the most generic resource type to use. This may be null in which @@ -65,7 +65,7 @@ public abstract class AbstractResourceCollector { protected final String resourceSuperType; protected final String[] executionPaths; - + protected boolean useResourceCaching; protected AbstractResourceCollector(final String baseResourceType, @@ -110,10 +110,10 @@ public abstract class AbstractResourceCollector { } return o1.compareTo(o2); }); - - + + List<Resource> locations = LocationCollector.getLocations(resourceType, resourceSuperType, - baseResourceType, resolver, this.useResourceCaching); + baseResourceType, resolver, this.useResourceCaching); locations.forEach(locationRes -> getWeightedResources(resources, locationRes)); List<Resource> result = new ArrayList<>(resources.size()); @@ -122,7 +122,7 @@ public abstract class AbstractResourceCollector { } protected abstract void getWeightedResources(final Set<WeightedResource> resources, - final Resource location); + final Resource location); /** * Creates a {@link WeightedResource} and adds it to the set of resources. @@ -143,7 +143,7 @@ public abstract class AbstractResourceCollector { final int numSelectors, final int methodPrefixWeight) { final WeightedResource lr = new WeightedResource(resources.size(), resource, - numSelectors, methodPrefixWeight); + numSelectors, methodPrefixWeight); resources.add(lr); } @@ -159,8 +159,8 @@ public abstract class AbstractResourceCollector { * synthetic resource representing the path location. */ protected final @NotNull Resource getResource(@NotNull final ResourceResolver resolver, - @NotNull String path, - boolean useCaching) { + @NotNull String path, + boolean useCaching) { Resource res = getResourceOrNull(resolver,path, useCaching); if (res == null) { @@ -180,9 +180,9 @@ public abstract class AbstractResourceCollector { } final AbstractResourceCollector o = (AbstractResourceCollector)obj; return stringEquals(resourceType, o.resourceType) - && stringEquals(resourceSuperType, o.resourceSuperType) - && stringEquals(extension, o.extension) - && stringEquals(baseResourceType, o.baseResourceType); + && stringEquals(resourceSuperType, o.resourceSuperType) + && stringEquals(extension, o.extension) + && stringEquals(baseResourceType, o.baseResourceType); } @Override @@ -210,7 +210,7 @@ public abstract class AbstractResourceCollector { } return null; } - + /** * Retrieves the list of children for a resource; if useCaching is set to true, it is * tried to read the result from a cache, and persist any non-cached result there as well. @@ -220,17 +220,17 @@ public abstract class AbstractResourceCollector { */ @SuppressWarnings("unchecked") static @NotNull List<Resource> getChildrenList(@NotNull Resource parent, boolean useCaching) { - + List<Resource> childList = new ArrayList<>(); if (useCaching) { - + // init the caching structure Map<String,List<Resource>> childrenListMap = new HashMap<>(); Map<String,Object> cache = parent.getResourceResolver().getPropertyMap(); if (!cache.containsKey(CACHE_KEY_CHILDREN_LIST)) { childrenListMap = new HashMap<>(); cache.put(CACHE_KEY_CHILDREN_LIST, childrenListMap); - + } else { Object entry = cache.get(CACHE_KEY_CHILDREN_LIST); if (entry instanceof HashMap) { @@ -241,7 +241,7 @@ public abstract class AbstractResourceCollector { CACHE_KEY_CHILDREN_LIST, entry.getClass().getName()); } } - + // cache lookup if (childrenListMap.containsKey(parent.getPath())) { // this is a cache hit @@ -259,23 +259,23 @@ public abstract class AbstractResourceCollector { LOG.trace("getChildrenList cache-miss for {} with {} child resources", parent.getPath(),childList.size()); return childList; } - + /* Clear all caching structures * @param resolver */ public static void clearCache(@NotNull ResourceResolver resolver) { - Object o1 = resolver.getPropertyMap().get(CACHE_KEY_CHILDREN_LIST); - if (o1 instanceof HashMap) { - Map<String,List<Resource>> childrenListMap = (HashMap) o1; - childrenListMap.clear(); - } - Object o2 = resolver.getPropertyMap().get(CACHE_KEY_RESOURCES); - if (o2 instanceof HashMap) { - Map<String,Resource> resourceMap = (HashMap<String,Resource>) o2; - resourceMap.clear(); - } + Object o1 = resolver.getPropertyMap().get(CACHE_KEY_CHILDREN_LIST); + if (o1 instanceof HashMap) { + Map<String,List<Resource>> childrenListMap = (HashMap) o1; + childrenListMap.clear(); + } + Object o2 = resolver.getPropertyMap().get(CACHE_KEY_RESOURCES); + if (o2 instanceof HashMap) { + Map<String,Resource> resourceMap = (HashMap<String,Resource>) o2; + resourceMap.clear(); + } } - + /** * Resolvers a resource or null if there is no resource resolved from the given path. * @param resolver the resourceResolver to use @@ -284,38 +284,38 @@ public abstract class AbstractResourceCollector { * @return a resource or null if no resource can be resolved */ public static @Nullable Resource getResourceOrNull(@NotNull ResourceResolver resolver, @NotNull String path, boolean useCaching) { - Object o = resolver.getPropertyMap().get(CACHE_KEY_RESOURCES); - if (useCaching) { - if (o instanceof Map) { - // cache structure already initialized - final Map<String,Resource> resourceMap = (Map<String,Resource>) o; - if (resourceMap.containsKey(path)) { - // cache hit - LOG.trace("getResourceOrNull cache-hit for path {}", path); - return resourceMap.get(path); - } else { - // cache miss - LOG.trace("getResourceOrNull cache-miss for path {}", path); - final Resource resource = resolver.getResource(path); - resourceMap.put(path, resource); - return resource; - } - } - if (o == null) { - // cache structure not initialized yet - LOG.trace("getResourceOrNull cache-miss on init for path {}", path); - final Map<String,Resource> resourceMap = new HashMap<>(); - resolver.getPropertyMap().put(CACHE_KEY_RESOURCES, resourceMap); - final Resource resource = resolver.getResource(path); - resourceMap.put(path, resource); - return resource; - } - // key already used by someone else - LOG.debug("Found key '{}' used with the unexpected type '{}', not caching the resource for path {}", - CACHE_KEY_RESOURCES, o.getClass().getName(), path); - } - return resolver.getResource(path); + Object o = resolver.getPropertyMap().get(CACHE_KEY_RESOURCES); + if (useCaching) { + if (o instanceof Map) { + // cache structure already initialized + final Map<String,Resource> resourceMap = (Map<String,Resource>) o; + if (resourceMap.containsKey(path)) { + // cache hit + LOG.trace("getResourceOrNull cache-hit for path {}", path); + return resourceMap.get(path); + } else { + // cache miss + LOG.trace("getResourceOrNull cache-miss for path {}", path); + final Resource resource = resolver.getResource(path); + resourceMap.put(path, resource); + return resource; + } + } + if (o == null) { + // cache structure not initialized yet + LOG.trace("getResourceOrNull cache-miss on init for path {}", path); + final Map<String,Resource> resourceMap = new HashMap<>(); + resolver.getPropertyMap().put(CACHE_KEY_RESOURCES, resourceMap); + final Resource resource = resolver.getResource(path); + resourceMap.put(path, resource); + return resource; + } + // key already used by someone else + LOG.debug("Found key '{}' used with the unexpected type '{}', not caching the resource for path {}", + CACHE_KEY_RESOURCES, o.getClass().getName(), path); + } + return resolver.getResource(path); } - + } diff --git a/src/test/java/org/apache/sling/servlets/resolver/internal/helper/AbstractResourceCollectorTest.java b/src/test/java/org/apache/sling/servlets/resolver/internal/helper/AbstractResourceCollectorTest.java index d4bf5ed..d2b9a29 100644 --- a/src/test/java/org/apache/sling/servlets/resolver/internal/helper/AbstractResourceCollectorTest.java +++ b/src/test/java/org/apache/sling/servlets/resolver/internal/helper/AbstractResourceCollectorTest.java @@ -35,11 +35,11 @@ import org.mockito.Mockito; public class AbstractResourceCollectorTest { - + @Rule public SlingContext context = new SlingContext(); - - + + @Before public void setup() { context.create().resource("/parent"); @@ -47,114 +47,114 @@ public class AbstractResourceCollectorTest { context.create().resource("/parent/child2"); context.create().resource("/parent/child3"); } - + @Test public void testGetChildrenWithCachingEnabled() { - + Resource spy = Mockito.spy(context.resourceResolver().getResource("/parent")); - + List<Resource> children = AbstractResourceCollector.getChildrenList(spy, true); assertEquals(3,children.size()); children = AbstractResourceCollector.getChildrenList(spy, true); Mockito.verify(spy,Mockito.times(1)).listChildren(); - + Map<String,List<Resource>> map = (Map<String, List<Resource>>) - context.resourceResolver().getPropertyMap().get(AbstractResourceCollector.CACHE_KEY_CHILDREN_LIST); + context.resourceResolver().getPropertyMap().get(AbstractResourceCollector.CACHE_KEY_CHILDREN_LIST); assertEquals(1, map.values().size()); AbstractResourceCollector.clearCache(context.resourceResolver()); assertEquals(0, map.values().size()); } - - + + @Test public void testGetChildrenWithCachingDisabled() { - + Resource spy = Mockito.spy(context.resourceResolver().getResource("/parent")); - + List<Resource> children = AbstractResourceCollector.getChildrenList(spy, false); assertEquals(3,children.size()); children = AbstractResourceCollector.getChildrenList(spy, false); Mockito.verify(spy,Mockito.times(2)).listChildren(); } - + @Test public void testGetChildrenWithCachingWithAlreadyUsedCacheKey() { - + Resource spy = Mockito.spy(context.resourceResolver().getResource("/parent")); String payload = "some payload"; context.resourceResolver().getPropertyMap().put(AbstractResourceCollector.CACHE_KEY_CHILDREN_LIST, payload); - + List<Resource> children = AbstractResourceCollector.getChildrenList(spy, true); assertEquals(3,children.size()); children = AbstractResourceCollector.getChildrenList(spy, true); Mockito.verify(spy,Mockito.times(2)).listChildren(); assertEquals(payload, context.resourceResolver().getPropertyMap().get(AbstractResourceCollector.CACHE_KEY_CHILDREN_LIST)); - + AbstractResourceCollector.clearCache(context.resourceResolver()); assertEquals(payload, context.resourceResolver().getPropertyMap().get(AbstractResourceCollector.CACHE_KEY_CHILDREN_LIST)); } - - + + @Test public void testGetResourceOrNullWithCachingEnabled() { - ResourceResolver spyResolver = Mockito.spy(context.resourceResolver()); - - // not yet initialized - Resource res1 = AbstractResourceCollector.getResourceOrNull(spyResolver,"/parent/child1",true); - assertNotNull(res1); - Mockito.verify(spyResolver,Mockito.times(1)).getResource("/parent/child1"); - // cache hit - Resource res2 = AbstractResourceCollector.getResourceOrNull(spyResolver,"/parent/child1",true); - assertNotNull(res2); - Mockito.verify(spyResolver,Mockito.times(1)).getResource("/parent/child1"); - assertEquals(res1,res2); - - // cache miss - Resource res3 = AbstractResourceCollector.getResourceOrNull(spyResolver,"/parent/child2",true); - assertNotNull(res2); - Mockito.verify(spyResolver,Mockito.times(1)).getResource("/parent/child2"); - - // cache miss - assertNull(AbstractResourceCollector.getResourceOrNull(spyResolver, "/parent/nonExistingChild", true)); - assertNull(AbstractResourceCollector.getResourceOrNull(spyResolver, "/parent/nonExistingChild", true)); - Mockito.verify(spyResolver,Mockito.times(1)).getResource("/parent/nonExistingChild"); - - // when the cache is cleared, it should read again via the ResourceResolver - AbstractResourceCollector.clearCache(spyResolver); - Mockito.reset(spyResolver); - Resource res4 = AbstractResourceCollector.getResourceOrNull(spyResolver,"/parent/child1",true); - assertNotNull(res4); - Mockito.verify(spyResolver,Mockito.times(1)).getResource("/parent/child1"); + ResourceResolver spyResolver = Mockito.spy(context.resourceResolver()); + + // not yet initialized + Resource res1 = AbstractResourceCollector.getResourceOrNull(spyResolver,"/parent/child1",true); + assertNotNull(res1); + Mockito.verify(spyResolver,Mockito.times(1)).getResource("/parent/child1"); + // cache hit + Resource res2 = AbstractResourceCollector.getResourceOrNull(spyResolver,"/parent/child1",true); + assertNotNull(res2); + Mockito.verify(spyResolver,Mockito.times(1)).getResource("/parent/child1"); + assertEquals(res1,res2); + + // cache miss + Resource res3 = AbstractResourceCollector.getResourceOrNull(spyResolver,"/parent/child2",true); + assertNotNull(res2); + Mockito.verify(spyResolver,Mockito.times(1)).getResource("/parent/child2"); + + // cache miss + assertNull(AbstractResourceCollector.getResourceOrNull(spyResolver, "/parent/nonExistingChild", true)); + assertNull(AbstractResourceCollector.getResourceOrNull(spyResolver, "/parent/nonExistingChild", true)); + Mockito.verify(spyResolver,Mockito.times(1)).getResource("/parent/nonExistingChild"); + + // when the cache is cleared, it should read again via the ResourceResolver + AbstractResourceCollector.clearCache(spyResolver); + Mockito.reset(spyResolver); + Resource res4 = AbstractResourceCollector.getResourceOrNull(spyResolver,"/parent/child1",true); + assertNotNull(res4); + Mockito.verify(spyResolver,Mockito.times(1)).getResource("/parent/child1"); } - + @Test public void testGetResourceOrNullWithAlreadyUsedCacheKey() { - ResourceResolver spyResolver = Mockito.spy(context.resourceResolver()); - - String payload = "some payload"; - spyResolver.getPropertyMap().put(AbstractResourceCollector.CACHE_KEY_RESOURCES, payload); - - // not yet initialized - Resource res1 = AbstractResourceCollector.getResourceOrNull(spyResolver,"/parent/child1",true); - Resource res2 = AbstractResourceCollector.getResourceOrNull(spyResolver,"/parent/child1",true); - Mockito.verify(spyResolver,Mockito.times(2)).getResource("/parent/child1"); - - assertEquals(payload, spyResolver.getPropertyMap().get(AbstractResourceCollector.CACHE_KEY_RESOURCES)); - AbstractResourceCollector.clearCache(spyResolver); + ResourceResolver spyResolver = Mockito.spy(context.resourceResolver()); + + String payload = "some payload"; + spyResolver.getPropertyMap().put(AbstractResourceCollector.CACHE_KEY_RESOURCES, payload); + + // not yet initialized + Resource res1 = AbstractResourceCollector.getResourceOrNull(spyResolver,"/parent/child1",true); + Resource res2 = AbstractResourceCollector.getResourceOrNull(spyResolver,"/parent/child1",true); + Mockito.verify(spyResolver,Mockito.times(2)).getResource("/parent/child1"); + + assertEquals(payload, spyResolver.getPropertyMap().get(AbstractResourceCollector.CACHE_KEY_RESOURCES)); + AbstractResourceCollector.clearCache(spyResolver); assertEquals(payload, spyResolver.getPropertyMap().get(AbstractResourceCollector.CACHE_KEY_RESOURCES)); } - + @Test public void testGetResourceOrNullCachingDisabled() { - ResourceResolver spyResolver = Mockito.spy(context.resourceResolver()); - - Resource res1 = AbstractResourceCollector.getResourceOrNull(spyResolver,"/parent/child1",false); - assertNotNull(res1); - Mockito.verify(spyResolver,Mockito.times(1)).getResource("/parent/child1"); - Resource res2 = AbstractResourceCollector.getResourceOrNull(spyResolver,"/parent/child1",false); - assertNotNull(res2); - Mockito.verify(spyResolver,Mockito.times(2)).getResource("/parent/child1"); + ResourceResolver spyResolver = Mockito.spy(context.resourceResolver()); + + Resource res1 = AbstractResourceCollector.getResourceOrNull(spyResolver,"/parent/child1",false); + assertNotNull(res1); + Mockito.verify(spyResolver,Mockito.times(1)).getResource("/parent/child1"); + Resource res2 = AbstractResourceCollector.getResourceOrNull(spyResolver,"/parent/child1",false); + assertNotNull(res2); + Mockito.verify(spyResolver,Mockito.times(2)).getResource("/parent/child1"); } - - + + }