in src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java [441:505]
private boolean removeAlias(final String contentPath, final String path, final AtomicBoolean resolverRefreshed) {
// 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;
String resourcePath = null;
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 = path;
} else if ( subPath.lastIndexOf('/') == firstSlash) {
if ( subPath.startsWith(JCR_CONTENT_PREFIX) || !subPath.endsWith(JCR_CONTENT_SUFFIX) ) {
handle = false;
}
resourcePath = ResourceUtil.getParent(path);
} else {
handle = false;
}
}
else {
resourcePath = contentPath;
}
if ( !handle ) {
return false;
}
this.initializing.lock();
try {
final Map<String, String> aliasMapEntry = aliasMap.get(contentPath);
if (aliasMapEntry != null) {
this.refreshResolverIfNecessary(resolverRefreshed);
for (Iterator<Map.Entry<String, String>> iterator = aliasMapEntry.entrySet().iterator(); iterator.hasNext(); ) {
final Map.Entry<String, String> entry = iterator.next();
String prefix = contentPath.endsWith("/") ? contentPath : contentPath + "/";
if ((prefix + entry.getValue()).startsWith(resourcePath)){
iterator.remove();
}
}
if (aliasMapEntry.isEmpty()) {
this.aliasMap.remove(contentPath);
}
Resource containingResource = this.resolver != null ? this.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();
}
}