in src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntry.java [161:233]
public static List<MapEntry> createMapEntry(String url, final Resource resource, final boolean trailingSlash) {
final ValueMap props = resource.adaptTo(ValueMap.class);
if (props != null) {
final String redirect = props.get(MapEntries.PROP_REDIRECT_EXTERNAL, String.class);
if (redirect != null) {
// ignoring external redirects for mapping
LoggerFactory.getLogger(MapEntry.class)
.info(
"createMapEntry: Configuration has external redirect to {}; not creating mapping for configuration in {}",
redirect,
resource.getPath());
return null;
}
// ignore potential regular expression url
if (isRegExp(url)) {
LoggerFactory.getLogger(MapEntry.class)
.info(
"createMapEntry: URL {} contains a regular expression; not creating mapping for configuration in {}",
url,
resource.getPath());
return null;
}
// check whether the url is a match hooked to then string end
String endHook = "";
if (url.endsWith("$")) {
endHook = "$";
url = url.substring(0, url.length() - 1);
}
// check whether the url is for ANY_SCHEME_HOST
if (url.startsWith(MapEntries.ANY_SCHEME_HOST)) {
url = url.substring(MapEntries.ANY_SCHEME_HOST.length());
}
final String[] internalRedirect = props.get(ResourceResolverImpl.PROP_REDIRECT_INTERNAL, String[].class);
if (internalRedirect != null) {
// check whether the url is considered external or internal
int status = -1;
final String pathUri = toURI(url);
if (pathUri != null) {
url = pathUri;
status = 302;
}
final List<MapEntry> prepEntries = new ArrayList<MapEntry>(internalRedirect.length);
for (final String redir : internalRedirect) {
if (!redir.contains("$")) {
MapEntry mapEntry = null;
try {
mapEntry = new MapEntry(redir.concat(endHook), status, trailingSlash, 0, url);
} catch (IllegalArgumentException iae) {
// ignore this entry
LoggerFactory.getLogger(MapEntry.class)
.debug("Ignoring mapping due to exception: " + iae.getMessage(), iae);
}
if (mapEntry != null) {
prepEntries.add(mapEntry);
}
}
}
if (prepEntries.size() > 0) {
return prepEntries;
}
}
}
return null;
}