private RequestDispatcherOptions handleDispatcherOptions()

in src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/ResourceRuntimeExtension.java [117:174]


    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;
    }