You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2008/02/27 08:39:35 UTC
svn commit: r631505 - in /incubator/sling/trunk:
api/src/main/java/org/apache/sling/api/scripting/SlingBindings.java
scripting/resolver/src/main/java/org/apache/sling/scripting/resolver/impl/DefaultSlingScript.java
Author: cziegeler
Date: Tue Feb 26 23:39:25 2008
New Revision: 631505
URL: http://svn.apache.org/viewvc?rev=631505&view=rev
Log:
SLING-264: Apply slightly modified patch from Alexander Saar to allow script execution outside of a request.
Modified:
incubator/sling/trunk/api/src/main/java/org/apache/sling/api/scripting/SlingBindings.java
incubator/sling/trunk/scripting/resolver/src/main/java/org/apache/sling/scripting/resolver/impl/DefaultSlingScript.java
Modified: incubator/sling/trunk/api/src/main/java/org/apache/sling/api/scripting/SlingBindings.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/api/src/main/java/org/apache/sling/api/scripting/SlingBindings.java?rev=631505&r1=631504&r2=631505&view=diff
==============================================================================
--- incubator/sling/trunk/api/src/main/java/org/apache/sling/api/scripting/SlingBindings.java (original)
+++ incubator/sling/trunk/api/src/main/java/org/apache/sling/api/scripting/SlingBindings.java Tue Feb 26 23:39:25 2008
@@ -19,6 +19,7 @@
package org.apache.sling.api.scripting;
import java.io.PrintWriter;
+import java.io.Reader;
import java.util.HashMap;
import org.apache.sling.api.SlingHttpServletRequest;
@@ -60,6 +61,14 @@
/**
* The name of the global scripting variable providing the
+ * {@link java.io.Reader} object (value is "reader").
+ * <p>
+ * This bound variable is required in the bindings given the script.
+ */
+ public static final String READER = "reader";
+
+ /**
+ * The name of the global scripting variable providing the
* {@link org.apache.sling.api.scripting.SlingScriptHelper} for the request
* (value is "sling").
* <p>
@@ -216,6 +225,30 @@
Object value = get(REQUEST);
if (value instanceof SlingHttpServletRequest) {
return (SlingHttpServletRequest) value;
+ }
+
+ return null;
+ }
+
+ /**
+ * Sets the {@link #READER} property to <code>reader</code> if not
+ * <code>null</code>.
+ */
+ public void setReader(Reader reader) {
+ if (reader != null) {
+ put(READER, reader);
+ }
+ }
+
+ /**
+ * Returns the {@link #READER} property if not <code>null</code> and a
+ * <code>Reader</code> instance. Otherwise <code>null</code> is
+ * returned.
+ */
+ public Reader getReader() {
+ Object value = get(READER);
+ if (value instanceof Reader) {
+ return (Reader) value;
}
return null;
Modified: incubator/sling/trunk/scripting/resolver/src/main/java/org/apache/sling/scripting/resolver/impl/DefaultSlingScript.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/resolver/src/main/java/org/apache/sling/scripting/resolver/impl/DefaultSlingScript.java?rev=631505&r1=631504&r2=631505&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/resolver/src/main/java/org/apache/sling/scripting/resolver/impl/DefaultSlingScript.java (original)
+++ incubator/sling/trunk/scripting/resolver/src/main/java/org/apache/sling/scripting/resolver/impl/DefaultSlingScript.java Tue Feb 26 23:39:25 2008
@@ -20,6 +20,7 @@
import static org.apache.sling.api.scripting.SlingBindings.LOG;
import static org.apache.sling.api.scripting.SlingBindings.OUT;
+import static org.apache.sling.api.scripting.SlingBindings.READER;
import static org.apache.sling.api.scripting.SlingBindings.REQUEST;
import static org.apache.sling.api.scripting.SlingBindings.RESOURCE;
import static org.apache.sling.api.scripting.SlingBindings.RESPONSE;
@@ -68,7 +69,7 @@
// name of the global variable containing the node to which the
// resource adapts (null if the resource does not adapt to a node
private static final String NODE = "currentNode";
-
+
private Resource scriptResource;
private ScriptEngine scriptEngine;
@@ -100,7 +101,7 @@
ScriptContext ctx = new SimpleScriptContext();
ctx.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
- ctx.setReader(((SlingHttpServletRequest) bindings.get(REQUEST)).getReader());
+ ctx.setReader((Reader) bindings.get(READER));
ctx.setWriter((Writer) bindings.get(OUT));
ctx.setErrorWriter(new LogWriter((Logger) bindings.get(LOG)));
@@ -153,6 +154,7 @@
SlingBindings props = new SlingBindings();
props.setRequest((SlingHttpServletRequest) req);
props.setResponse((SlingHttpServletResponse) res);
+ props.setReader(req.getReader());
props.setFlush(true);
res.setCharacterEncoding("UTF-8");
@@ -232,63 +234,74 @@
private Bindings verifySlingBindings(String scriptName,
SlingBindings slingBindings) throws IOException {
+ Bindings bindings = new SimpleBindings();
+
SlingHttpServletRequest request = slingBindings.getRequest();
- if (request == null) {
- throw fail(scriptName, REQUEST, "Missing or wrong type");
- }
+ 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");
- }
+ 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 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");
- }
+ Object writerObject = slingBindings.get(OUT);
+ if (writerObject != null && !(writerObject instanceof PrintWriter)) {
+ throw fail(scriptName, OUT, "Wrong type");
+ }
- SlingScriptHelper sling;
+ SlingScriptHelper sling;
- Object slingObject = slingBindings.get(SLING);
- if (slingObject == null) {
+ Object slingObject = slingBindings.get(SLING);
+ if (slingObject == null) {
- sling = new ScriptHelper(this, request, response);
+ sling = new ScriptHelper(this, request, response);
- } else if (slingObject instanceof SlingScriptHelper) {
+ } else if (slingObject instanceof SlingScriptHelper) {
- sling = (SlingScriptHelper) slingObject;
+ sling = (SlingScriptHelper) slingObject;
- if (sling.getRequest() != request) {
- throw fail(scriptName, REQUEST,
- "Not the same as request field of SlingScriptHelper");
- }
+ 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 (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 (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");
- }
+ if (writerObject != null
+ && sling.getResponse().getWriter() != writerObject) {
+ throw fail(scriptName, OUT,
+ "Not the same as writer of the SlingScriptHelper response");
+ }
+
+ } else {
- } else {
+ throw fail(scriptName, SLING, "Wrong type");
- throw fail(scriptName, SLING, "Wrong type");
+ }
+ // set base variables when executing inside a request
+ bindings.put(SLING, sling);
+ 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());
+ bindings.put(NODE, sling.getRequest().getResource().adaptTo(Node.class));
}
Object logObject = slingBindings.get(LOG);
@@ -297,16 +310,7 @@
} else if (!(logObject instanceof Logger)) {
throw fail(scriptName, LOG, "Wrong type");
}
-
- // set base variables
- Bindings bindings = new SimpleBindings();
- bindings.put(SLING, sling);
- bindings.put(REQUEST, sling.getRequest());
- bindings.put(RESPONSE, sling.getResponse());
- bindings.put(RESOURCE, sling.getRequest().getResource());
- bindings.put(OUT, sling.getResponse().getWriter());
bindings.put(LOG, logObject);
- bindings.put(NODE, sling.getRequest().getResource().adaptTo(Node.class));
// copy non-base variables
for (Map.Entry<String, Object> entry : slingBindings.entrySet()) {