in src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java [1423:1503]
private String loadVanityPath(final Resource resource, final Map<String, List<MapEntry>> entryMap, final Map <String, List<String>> targetPaths, boolean addToCache) {
if (!isValidVanityPath(resource.getPath())) {
return null;
}
final ValueMap props = resource.getValueMap();
long vanityOrder = props.get(PROP_VANITY_ORDER, 0L);
// url is ignoring scheme and host.port and the path is
// what is stored in the sling:vanityPath property
boolean hasVanityPath = false;
final String[] pVanityPaths = props.get(PROP_VANITY_PATH, new String[0]);
if (log.isTraceEnabled()) {
log.trace("vanity paths on {}: {}", resource.getPath(), Arrays.asList(pVanityPaths));
}
for (final String pVanityPath : pVanityPaths) {
final String[] result = this.getVanityPathDefinition(resource.getPath(), pVanityPath);
if (result != null) {
hasVanityPath = true;
final String url = result[0] + result[1];
// redirect target is the node providing the
// sling:vanityPath
// property (or its parent if the node is called
// jcr:content)
final Resource redirectTarget;
if (JCR_CONTENT.equals(resource.getName())) {
redirectTarget = resource.getParent();
} else {
redirectTarget = resource;
}
final String redirect = redirectTarget.getPath();
final String redirectName = redirectTarget.getName();
// whether the target is attained by a external redirect or
// by an internal redirect is defined by the sling:redirect
// property
final int status = props.get(PROP_REDIRECT_EXTERNAL, false) ? props.get(
PROP_REDIRECT_EXTERNAL_REDIRECT_STATUS, factory.getDefaultVanityPathRedirectStatus())
: -1;
final String checkPath = result[1];
boolean addedEntry;
if (addToCache) {
if (redirectName.indexOf('.') > -1) {
// 1. entry with exact match
this.addEntry(entryMap, checkPath, getMapEntry(url + "$", status, false, vanityOrder, redirect));
final int idx = redirectName.lastIndexOf('.');
final String extension = redirectName.substring(idx + 1);
// 2. entry with extension
addedEntry = this.addEntry(entryMap, checkPath, getMapEntry(url + "\\." + extension, status, false, vanityOrder, redirect));
} else {
// 1. entry with exact match
this.addEntry(entryMap, checkPath, getMapEntry(url + "$", status, false, vanityOrder, redirect + ".html"));
// 2. entry with match supporting selectors and extension
addedEntry = this.addEntry(entryMap, checkPath, getMapEntry(url + "(\\..*)", status, false, vanityOrder, redirect + "$1"));
}
if (addedEntry) {
// 3. keep the path to return
this.updateTargetPaths(targetPaths, redirect, checkPath);
//increment only if the instance variable
if (entryMap == resolveMapsMap) {
vanityCounter.addAndGet(2);
}
// update bloom filter
BloomFilterUtils.add(vanityBloomFilter, checkPath);
}
} else {
// update bloom filter
BloomFilterUtils.add(vanityBloomFilter, checkPath);
}
}
}
return hasVanityPath ? pVanityPaths[0] : null;
}