in src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/RenderUnitProvider.java [75:131]
public ProviderOutcome provide(String identifier, RenderContext renderContext, Bindings arguments) {
if (identifier.endsWith("." + SightlyScriptEngineFactory.EXTENSION)) {
Bindings globalBindings = renderContext.getBindings();
SlingScriptHelper sling = BindingsUtils.getHelper(globalBindings);
SlingHttpServletRequest request = BindingsUtils.getRequest(globalBindings);
final Resource renderUnitResource = scriptDependencyResolver.resolveScript(renderContext, identifier);
if (renderUnitResource == null) {
// attempt to find a bundled render unit that does not expose a servlet resource via the search paths
RenderUnit renderUnit = bundledUnitManager.getRenderUnit(globalBindings, identifier);
if (renderUnit != null) {
return ProviderOutcome.success(renderUnit);
}
Resource caller = ResourceResolution.getResourceForRequest(request.getResourceResolver(), request);
if (caller != null) {
String resourceSuperType = caller.getResourceSuperType();
StringBuilder errorMessage = new StringBuilder("Cannot find resource ");
errorMessage.append(identifier).append(" for base path ").append(caller.getPath());
if (StringUtils.isNotEmpty(resourceSuperType)) {
errorMessage.append(" with resource super type ").append(resourceSuperType);
}
errorMessage.append(".");
return ProviderOutcome.failure(new SightlyException(errorMessage.toString()));
} else {
return ProviderOutcome.failure(
new SightlyException("Cannot resolve template " + identifier + " for script "
+ sling.getScript().getScriptResource().getPath()));
}
}
try {
if ("true".equalsIgnoreCase((String)
renderUnitResource.getResourceMetadata().get("sling.servlet.resource"))) {
BundledRenderUnit bundledRenderUnit = renderUnitResource.adaptTo(BundledRenderUnit.class);
if (bundledRenderUnit != null && bundledRenderUnit.getUnit() instanceof RenderUnit) {
return ProviderOutcome.success(bundledRenderUnit.getUnit());
}
}
SightlyScriptEngine sightlyScriptEngine = (SightlyScriptEngine)
bundledUnitManager.getScriptEngineFactory().getScriptEngine();
String encoding = renderUnitResource.getResourceMetadata().getCharacterEncoding();
if (StringUtils.isEmpty(encoding)) {
encoding = "UTF-8";
}
InputStream inputStream = renderUnitResource.adaptTo(InputStream.class);
if (inputStream == null) {
return ProviderOutcome.failure();
}
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, encoding);
ScriptNameAwareReader reader =
new ScriptNameAwareReader(inputStreamReader, renderUnitResource.getPath());
SightlyCompiledScript compiledScript = (SightlyCompiledScript) sightlyScriptEngine.compile(reader);
return ProviderOutcome.success(compiledScript.getRenderUnit());
} catch (Exception e) {
return ProviderOutcome.failure(e);
}
}
return ProviderOutcome.failure();
}