You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by re...@apache.org on 2025/04/02 12:57:12 UTC

(sling-org-apache-sling-resourceresolver) branch SLING-12735 created (now 2b189415)

This is an automated email from the ASF dual-hosted git repository.

reschke pushed a change to branch SLING-12735
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git


      at 2b189415 SLING-12735: AliasHandler refactoring - Sonar warnings

This branch includes the following new commits:

     new 2b189415 SLING-12735: AliasHandler refactoring - Sonar warnings

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(sling-org-apache-sling-resourceresolver) 01/01: SLING-12735: AliasHandler refactoring - Sonar warnings

Posted by re...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

reschke pushed a commit to branch SLING-12735
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git

commit 2b18941540470a0c9a4eacb7efc34606852e744e
Author: Julian Reschke <ju...@gmx.de>
AuthorDate: Wed Apr 2 13:56:33 2025 +0100

    SLING-12735: AliasHandler refactoring - Sonar warnings
---
 .../impl/mapping/AliasHandler.java                 | 98 +++++++++++++---------
 1 file changed, 57 insertions(+), 41 deletions(-)

diff --git a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/AliasHandler.java b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/AliasHandler.java
index d83c7135..170b6e51 100644
--- a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/AliasHandler.java
+++ b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/AliasHandler.java
@@ -170,63 +170,79 @@ class AliasHandler {
      */
     boolean removeAlias(
             ResourceResolver resolver, final String contentPath, final String path, final Runnable notifyOfChange) {
-        // if path is specified we first need to find out if it is
-        // a direct child of vanity path but not jcr:content, or a jcr:content child of a direct child
-        // otherwise we can discard the event
-        boolean handle = true;
+
+        final String resourcePath = computeResourcePath(contentPath, path);
+
+        if (resourcePath == null) {
+            // early exit
+            return false;
+        }
+
+        this.initializing.lock();
+
+        try {
+            final Map<String, Collection<String>> aliasMapEntry = aliasMapsMap.get(contentPath);
+            if (aliasMapEntry != null) {
+                notifyOfChange.run();
+                handleAliasRemoval(resolver, contentPath, resourcePath, aliasMapEntry);
+            }
+            return aliasMapEntry != null;
+        } finally {
+            this.initializing.unlock();
+        }
+    }
+
+    private void handleAliasRemoval(
+            @Nullable ResourceResolver resolver,
+            @NotNull String contentPath,
+            @NotNull String resourcePath,
+            @NotNull Map<String, Collection<String>> aliasMapEntry) {
+        String prefix = contentPath.endsWith("/") ? contentPath : contentPath + "/";
+        if (aliasMapEntry.entrySet().removeIf(e -> (prefix + e.getKey()).startsWith(resourcePath))
+                && (aliasMapEntry.isEmpty())) {
+            this.aliasMapsMap.remove(contentPath);
+        }
+
+        Resource containingResource = resolver != null ? resolver.getResource(resourcePath) : null;
+
+        if (containingResource != null) {
+            if (containingResource.getValueMap().containsKey(ResourceResolverImpl.PROP_ALIAS)) {
+                doAddAlias(containingResource);
+            }
+            final Resource child = containingResource.getChild(JCR_CONTENT);
+            if (child != null && child.getValueMap().containsKey(ResourceResolverImpl.PROP_ALIAS)) {
+                doAddAlias(child);
+            }
+        }
+    }
+
+    // if path is specified we first need to find out if it is
+    // a direct child of vanity path but not jcr:content, or a jcr:content child of a direct child
+    // otherwise we can discard the event
+    private static @Nullable String computeResourcePath(@NotNull String contentPath, @Nullable String path) {
         final String resourcePath;
         if (path != null && path.length() > contentPath.length()) {
             final String subPath = path.substring(contentPath.length() + 1);
             final int firstSlash = subPath.indexOf('/');
             if (firstSlash == -1) {
                 if (subPath.equals(JCR_CONTENT)) {
-                    handle = false;
+                    resourcePath = null;
+                } else {
+                    resourcePath = path;
                 }
-                resourcePath = path;
             } else if (subPath.lastIndexOf('/') == firstSlash) {
                 if (subPath.startsWith(JCR_CONTENT_PREFIX) || !subPath.endsWith(JCR_CONTENT_SUFFIX)) {
-                    handle = false;
+                    resourcePath = null;
+                } else {
+                    resourcePath = ResourceUtil.getParent(path);
                 }
-                resourcePath = ResourceUtil.getParent(path);
             } else {
-                handle = false;
                 resourcePath = null;
             }
         } else {
             resourcePath = contentPath;
         }
-        if (!handle) {
-            return false;
-        }
-
-        this.initializing.lock();
-        try {
-            final Map<String, Collection<String>> aliasMapEntry = aliasMapsMap.get(contentPath);
-            if (aliasMapEntry != null) {
-                notifyOfChange.run();
-
-                String prefix = contentPath.endsWith("/") ? contentPath : contentPath + "/";
-                if (aliasMapEntry.entrySet().removeIf(e -> (prefix + e.getKey()).startsWith(resourcePath))
-                        && (aliasMapEntry.isEmpty())) {
-                    this.aliasMapsMap.remove(contentPath);
-                }
-
-                Resource containingResource = resolver != null ? resolver.getResource(resourcePath) : null;
-
-                if (containingResource != null) {
-                    if (containingResource.getValueMap().containsKey(ResourceResolverImpl.PROP_ALIAS)) {
-                        doAddAlias(containingResource);
-                    }
-                    final Resource child = containingResource.getChild(JCR_CONTENT);
-                    if (child != null && child.getValueMap().containsKey(ResourceResolverImpl.PROP_ALIAS)) {
-                        doAddAlias(child);
-                    }
-                }
-            }
-            return aliasMapEntry != null;
-        } finally {
-            this.initializing.unlock();
-        }
+        return resourcePath;
     }
 
     /**