slingObject = new ScriptHelper(this.bundleContext, this);
}
} else if (!(slingObject instanceof SlingScriptHelper) ) {
throw fail(scriptName, SLING, "Wrong type");
}
final SlingScriptHelper sling = (SlingScriptHelper)slingObject;
bindings.put(SLING, sling);
if (request != null) {
//throw fail(scriptName, REQUEST, "Missing or wrong type");
SlingHttpServletResponse response = slingBindings.getResponse();
if (response == null) {
throw fail(scriptName, RESPONSE, "Missing or wrong type");
}
Object resourceObject = slingBindings.get(RESOURCE);
if (resourceObject != null && !(resourceObject instanceof Resource)) {
throw fail(scriptName, RESOURCE, "Wrong type");
}
Object writerObject = slingBindings.get(OUT);
if (writerObject != null && !(writerObject instanceof PrintWriter)) {
throw fail(scriptName, OUT, "Wrong type");
}
// if there is a provided sling script helper, check arguments
if (slingBindings.get(SLING) != null) {
if (sling.getRequest() != request) {
throw fail(scriptName, REQUEST,
"Not the same as request field of SlingScriptHelper");
}
if (sling.getResponse() != response) {
throw fail(scriptName, RESPONSE,
"Not the same as response field of SlingScriptHelper");
}
if (resourceObject != null
&& sling.getRequest().getResource() != resourceObject) {
throw fail(scriptName, RESOURCE,
"Not the same as resource of the SlingScriptHelper request");
}
if (writerObject != null
&& sling.getResponse().getWriter() != writerObject) {
throw fail(scriptName, OUT,
"Not the same as writer of the SlingScriptHelper response");
}
}
// set base variables when executing inside a request
bindings.put(REQUEST, sling.getRequest());
bindings.put(READER, sling.getRequest().getReader());
bindings.put(RESPONSE, sling.getResponse());
bindings.put(RESOURCE, sling.getRequest().getResource());
bindings.put(OUT, sling.getResponse().getWriter());
// set the current node if the resource is node based
Node node = sling.getRequest().getResource().adaptTo(Node.class);
if (node != null) {
bindings.put(NODE, node);
}
}