public ProviderOutcome provide()

in src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/ScriptUseProvider.java [97:143]


    public ProviderOutcome provide(String scriptName, RenderContext renderContext, Bindings arguments) {
        Bindings globalBindings = renderContext.getBindings();
        Bindings bindings = BindingsUtils.merge(globalBindings, arguments);
        String extension = scriptExtension(scriptName);
        if (extension == null || extension.equals(SightlyScriptEngineFactory.EXTENSION)) {
            return ProviderOutcome.failure();
        }
        URL script = bundledUnitManager.getScript(bindings, scriptName);
        if (script != null) {
            String scriptUrlAsString = script.toExternalForm();
            bindings.remove(BundledRenderUnit.VARIABLE);
            bindings.put(ScriptEngine.FILENAME, scriptUrlAsString);
            try {
                ScriptEngine scriptEngine = scriptEngineManager.getEngineByExtension(extension);
                if (scriptEngine != null) {
                    if (scriptEngine instanceof Compilable) {
                        CompiledScript compiledScript;
                        CachedScript cachedScript = scriptCache.getScript(scriptUrlAsString);
                        if (cachedScript == null) {
                            Compilable compilableScriptEngine = (Compilable) scriptEngine;
                            ScriptNameAwareReader reader =
                                    new ScriptNameAwareReader(new StringReader(IOUtils.toString(script, StandardCharsets.UTF_8)),
                                            scriptUrlAsString);
                            compiledScript = compilableScriptEngine.compile(reader);
                        } else {
                            compiledScript = cachedScript.getCompiledScript();
                        }
                        return ProviderOutcome.notNullOrFailure(compiledScript.eval(bindings));
                    } else {
                        ScriptNameAwareReader reader =
                                new ScriptNameAwareReader(new StringReader(IOUtils.toString(script, StandardCharsets.UTF_8)),
                                        scriptUrlAsString);
                        return ProviderOutcome
                                .notNullOrFailure(scriptEngine.eval(reader, bindings));
                    }
                }
            } catch (Exception e) {
                return ProviderOutcome.failure(e);
            }
        }
        Resource scriptResource = scriptDependencyResolver.resolveScript(renderContext, scriptName);
        if (scriptResource == null) {
            log.debug("Path does not match an existing resource: {}", scriptName);
            return ProviderOutcome.failure();
        }
        return evalScript(scriptResource, bindings);
    }