This is an automated email from the ASF dual-hosted git repository. reschke pushed a commit to branch SLING-12658 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git
commit b2757eb79b90ee6a1c4f1e03f3fc2faabce3a4c9 Author: Julian Reschke <[email protected]> AuthorDate: Mon Feb 17 13:26:33 2025 +0100 SLING-12658: refactor vanity path handling - encapsulate code for better isolation and unit testing --- .../resourceresolver/impl/mapping/MapEntries.java | 106 ++++++++++----------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java index 2e868bc..b993ea0 100644 --- a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java +++ b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java @@ -644,6 +644,59 @@ public class MapEntries implements // ---------- ResourceChangeListener interface + /** + * Handles the change to any of the node properties relevant for vanity URL + * mappings. The {@link #MapEntries(MapConfigurationProvider, BundleContext, EventAdmin, StringInterpolationProvider, Optional)} + * constructor makes sure the event listener is registered to only get + * appropriate events. + */ + @Override + public void onChange(final List<ResourceChange> changes) { + + final boolean inStartup = !vanityPathsProcessed.get(); + + final AtomicBoolean resolverRefreshed = new AtomicBoolean(false); + + // send the change event only once + boolean sendEvent = false; + + // the config needs to be reloaded only once + final AtomicBoolean hasReloadedConfig = new AtomicBoolean(false); + + for (final ResourceChange rc : changes) { + + final ResourceChange.ChangeType type = rc.getType(); + final String path = rc.getPath(); + + log.debug("onChange, type={}, path={}", rc.getType(), path); + + // don't care for system area + if (path.startsWith(JCR_SYSTEM_PREFIX)) { + continue; + } + + // during startup: just enqueue the events + if (inStartup) { + if (type == ResourceChange.ChangeType.REMOVED || type == ResourceChange.ChangeType.ADDED + || type == ResourceChange.ChangeType.CHANGED) { + Map.Entry<String, ResourceChange.ChangeType> entry = new SimpleEntry<>(path, type); + log.trace("enqueue: {}", entry); + resourceChangeQueue.add(entry); + } + } else { + boolean changed = handleResourceChange(type, path, resolverRefreshed, hasReloadedConfig); + + if (changed) { + sendEvent = true; + } + } + } + + if (sendEvent) { + this.sendChangeEvent(); + } + } + private boolean handleResourceChange(ResourceChange.ChangeType type, String path, AtomicBoolean resolverRefreshed, AtomicBoolean hasReloadedConfig) { boolean changed = false; @@ -1366,59 +1419,6 @@ public class MapEntries implements return mapEntries == NO_MAP_ENTRIES ? null : mapEntries; } - /** - * Handles the change to any of the node properties relevant for vanity URL - * mappings. The {@link #MapEntries(MapConfigurationProvider, BundleContext, EventAdmin, StringInterpolationProvider, Optional)} - * constructor makes sure the event listener is registered to only get - * appropriate events. - */ - @Override - public void onChange(final List<ResourceChange> changes) { - - final boolean inStartup = !vanityPathsProcessed.get(); - - final AtomicBoolean resolverRefreshed = new AtomicBoolean(false); - - // send the change event only once - boolean sendEvent = false; - - // the config needs to be reloaded only once - final AtomicBoolean hasReloadedConfig = new AtomicBoolean(false); - - for (final ResourceChange rc : changes) { - - final ResourceChange.ChangeType type = rc.getType(); - final String path = rc.getPath(); - - log.debug("onChange, type={}, path={}", rc.getType(), path); - - // don't care for system area - if (path.startsWith(JCR_SYSTEM_PREFIX)) { - continue; - } - - // during startup: just enqueue the events - if (inStartup) { - if (type == ResourceChange.ChangeType.REMOVED || type == ResourceChange.ChangeType.ADDED - || type == ResourceChange.ChangeType.CHANGED) { - Map.Entry<String, ResourceChange.ChangeType> entry = new SimpleEntry<>(path, type); - log.trace("enqueue: {}", entry); - resourceChangeQueue.add(entry); - } - } else { - boolean changed = handleResourceChange(type, path, resolverRefreshed, hasReloadedConfig); - - if (changed) { - sendEvent = true; - } - } - } - - if (sendEvent) { - this.sendChangeEvent(); - } - } - private byte[] createVanityBloomFilter() throws IOException { return BloomFilterUtils.createFilter(VANITY_BLOOM_FILTER_MAX_ENTRIES, this.factory.getVanityBloomFilterMaxBytes()); }
