use of org.apache.sling.api.scripting.SlingScriptHelper in project sling by apache.
the class RhinoJavaScriptEngine method getScriptName.
private String getScriptName(ScriptContext scriptContext) {
Bindings bindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
String scriptName = (String) bindings.get(ScriptEngine.FILENAME);
if (scriptName != null && !"".equals(scriptName)) {
return scriptName;
}
SlingScriptHelper sling = (SlingScriptHelper) bindings.get(SlingBindings.SLING);
if (sling != null) {
return sling.getScript().getScriptResource().getPath();
}
return NO_SCRIPT_NAME;
}
use of org.apache.sling.api.scripting.SlingScriptHelper in project sling by apache.
the class RenderUnitProvider method provide.
@Override
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 = ScriptUtils.resolveScript(scriptingResourceResolverProvider.getRequestScopedResourceResolver(), renderContext, identifier);
if (renderUnitResource == null) {
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()));
}
}
RenderUnit renderUnit;
try {
CachedScript cachedScript = scriptCache.getScript(renderUnitResource.getPath());
final SightlyCompiledScript compiledScript;
if (cachedScript != null) {
compiledScript = (SightlyCompiledScript) cachedScript.getCompiledScript();
} else {
SightlyScriptEngine sightlyScriptEngine = (SightlyScriptEngine) scriptEngineManager.getEngineByName(SightlyScriptEngineFactory.SHORT_NAME);
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());
compiledScript = (SightlyCompiledScript) sightlyScriptEngine.compile(reader);
scriptCache.putScript(new CachedScript() {
@Override
public String getScriptPath() {
return renderUnitResource.getPath();
}
@Override
public CompiledScript getCompiledScript() {
return compiledScript;
}
});
}
renderUnit = compiledScript.getRenderUnit();
return ProviderOutcome.success(renderUnit);
} catch (Exception e) {
return ProviderOutcome.failure(e);
}
}
return ProviderOutcome.failure();
}
use of org.apache.sling.api.scripting.SlingScriptHelper in project sling by apache.
the class SightlyScriptEngine method getScriptName.
private String getScriptName(ScriptContext scriptContext) {
if (scriptContext != null) {
Bindings bindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
String scriptName = (String) bindings.get(ScriptEngine.FILENAME);
if (scriptName != null && !"".equals(scriptName)) {
return scriptName;
}
SlingScriptHelper sling = BindingsUtils.getHelper(bindings);
if (sling != null) {
return sling.getScript().getScriptResource().getPath();
}
}
return NO_SCRIPT;
}
use of org.apache.sling.api.scripting.SlingScriptHelper in project sling by apache.
the class IncludeRuntimeExtension method includeScript.
private void includeScript(final Bindings bindings, String script, PrintWriter out) {
if (StringUtils.isEmpty(script)) {
throw new SightlyException("Path for data-sly-include is empty");
} else {
LOG.debug("Attempting to include script {}.", script);
SlingScriptHelper slingScriptHelper = BindingsUtils.getHelper(bindings);
ServletResolver servletResolver = slingScriptHelper.getService(ServletResolver.class);
if (servletResolver != null) {
SlingHttpServletRequest request = BindingsUtils.getRequest(bindings);
Servlet servlet = servletResolver.resolveServlet(request.getResource(), script);
if (servlet != null) {
try {
SlingHttpServletResponse response = BindingsUtils.getResponse(bindings);
PrintWriterResponseWrapper resWrapper = new PrintWriterResponseWrapper(out, response);
servlet.service(request, resWrapper);
} catch (Exception e) {
throw new SightlyException("Failed to include script " + script, e);
}
} else {
throw new SightlyException("Failed to locate script " + script);
}
} else {
throw new SightlyException("Sling ServletResolver service is unavailable, failed to include " + script);
}
}
}
use of org.apache.sling.api.scripting.SlingScriptHelper in project sling by apache.
the class InjectorSpecificAnnotationTest method testScriptVariableField.
@Test
public void testScriptVariableField() throws InvalidSyntaxException {
SlingBindings bindings = new SlingBindings();
SlingScriptHelper helper = mock(SlingScriptHelper.class);
bindings.setSling(helper);
when(request.getAttribute(SlingBindings.class.getName())).thenReturn(bindings);
InjectorSpecificAnnotationModel model = factory.getAdapter(request, InjectorSpecificAnnotationModel.class);
assertNotNull("Could not instanciate model", model);
assertEquals(helper, model.getHelper());
}
Aggregations