in src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/ResourceRuntimeExtension.java [116:170]
private RequestDispatcherOptions handleDispatcherOptions(SlingHttpServletRequest request, Set<String> selectors, Map<String, Object> options,
RuntimeObjectModel runtimeObjectModel) {
RequestDispatcherOptions requestDispatcherOptions = new RequestDispatcherOptions();
if (selectors.isEmpty()) {
selectors.addAll(Arrays.asList(request.getRequestPathInfo().getSelectors()));
}
requestDispatcherOptions.setAddSelectors(getSelectorString(selectors));
requestDispatcherOptions.setReplaceSelectors("");
if (options.containsKey(OPTION_SELECTORS)) {
Object selectorsObject = getAndRemoveOption(options, OPTION_SELECTORS);
selectors.clear();
addSelectors(selectors, selectorsObject, runtimeObjectModel);
requestDispatcherOptions.setAddSelectors(getSelectorString(selectors));
requestDispatcherOptions.setReplaceSelectors("");
}
if (options.containsKey(OPTION_ADD_SELECTORS)) {
Object selectorsObject = getAndRemoveOption(options, OPTION_ADD_SELECTORS);
addSelectors(selectors, selectorsObject, runtimeObjectModel);
requestDispatcherOptions.setAddSelectors(getSelectorString(selectors));
requestDispatcherOptions.setReplaceSelectors("");
}
if (options.containsKey(OPTION_REMOVE_SELECTORS)) {
Object selectorsObject = getAndRemoveOption(options, OPTION_REMOVE_SELECTORS);
if (selectorsObject instanceof String) {
String selectorString = (String) selectorsObject;
String[] parts = selectorString.split("\\.");
for (String s : parts) {
selectors.remove(s);
}
} else if (selectorsObject instanceof Object[]) {
for (Object s : (Object[]) selectorsObject) {
String selector = runtimeObjectModel.toString(s);
if (StringUtils.isNotEmpty(selector)) {
selectors.remove(selector);
}
}
} else if (selectorsObject == null) {
selectors.clear();
}
String selectorString = getSelectorString(selectors);
if (StringUtils.isEmpty(selectorString)) {
requestDispatcherOptions.setReplaceSelectors("");
} else {
requestDispatcherOptions.setAddSelectors(getSelectorString(selectors));
requestDispatcherOptions.setReplaceSelectors("");
}
}
if (options.containsKey(OPTION_RESOURCE_TYPE)) {
String resourceType = runtimeObjectModel.toString(getAndRemoveOption(options, OPTION_RESOURCE_TYPE));
if (StringUtils.isNotEmpty(resourceType)) {
requestDispatcherOptions.setForceResourceType(resourceType);
}
}
return requestDispatcherOptions;
}