Author: cziegeler
Date: Thu Jul 23 10:17:52 2009
New Revision: 797001
URL: http://svn.apache.org/viewvc?rev=797001&view=rev
Log:
SLING-1021 : Use own sling scope to store private attributes.
Modified:
sling/trunk/bundles/api/src/main/java/org/apache/sling/api/scripting/SlingScriptConstants.java
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java
sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java
sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/JavaScriptEngineFactory.java
Modified:
sling/trunk/bundles/api/src/main/java/org/apache/sling/api/scripting/SlingScriptConstants.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/api/src/main/java/org/apache/sling/api/scripting/SlingScriptConstants.java?rev=797001&r1=797000&r2=797001&view=diff
==============================================================================
---
sling/trunk/bundles/api/src/main/java/org/apache/sling/api/scripting/SlingScriptConstants.java
(original)
+++
sling/trunk/bundles/api/src/main/java/org/apache/sling/api/scripting/SlingScriptConstants.java
Thu Jul 23 10:17:52 2009
@@ -28,12 +28,18 @@
* The name of the script context attribute holding the {...@link
org.apache.sling.api.resource.ResourceResolver} which
* has been used to resolve the script. This resource resolver can be used
by the
* script engines to further locate scripts (for includes etc.).
- * The value is set in the global scope of the script context.
+ * The value is set in the {...@link SlingScriptConstants#SLING_SCOPE} of
the script context.
* @since 2.0.6
*/
public static final String ATTR_SCRIPT_RESOURCE_RESOLVER =
"org.apache.sling.api.scripting.ScriptResourceResolver";
/**
+ * The name of the script scope holding the {...@link
#ATTR_SCRIPT_RESOURCE_RESOLVER}.
+ * @since 2.0.6
+ */
+ public static final int SLING_SCOPE = -314;
+
+ /**
* The topic for the OSGi event which is sent when a script engine factory
has been added.
* The event contains at least the {...@link
#PROPERTY_SCRIPT_ENGINE_FACTORY_NAME},
* {...@link #PROPERTY_SCRIPT_ENGINE_FACTORY_VERSION},
Modified:
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java?rev=797001&r1=797000&r2=797001&view=diff
==============================================================================
---
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java
(original)
+++
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java
Thu Jul 23 10:17:52 2009
@@ -37,6 +37,7 @@
import java.util.Arrays;
import java.util.Dictionary;
import java.util.Enumeration;
+import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
@@ -134,7 +135,36 @@
try {
bindings = verifySlingBindings(scriptName, props);
- ScriptContext ctx = new SimpleScriptContext();
+ final ScriptContext ctx = new SimpleScriptContext() {
+
+ private final Map<String, Object> slingScope = new
HashMap<String, Object>();
+
+ @Override
+ public Object getAttribute(String name, int scope) {
+ if ( scope == SlingScriptConstants.SLING_SCOPE ) {
+ return slingScope.get(name);
+ }
+ return super.getAttribute(name, scope);
+ }
+
+ @Override
+ public Object removeAttribute(String name, int scope) {
+ if ( scope == SlingScriptConstants.SLING_SCOPE ) {
+ return slingScope.remove(name);
+ }
+ return super.removeAttribute(name, scope);
+ }
+
+ @Override
+ public void setAttribute(String name, Object value, int scope)
{
+ if ( scope == SlingScriptConstants.SLING_SCOPE ) {
+ slingScope.put(name, value);
+ return;
+ }
+ super.setAttribute(name, value, scope);
+ }
+
+ };
ctx.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
ctx.setReader((Reader) bindings.get(READER));
ctx.setWriter((Writer) bindings.get(OUT));
@@ -145,7 +175,7 @@
// set the script resource resolver as an attribute
ctx.setAttribute(SlingScriptConstants.ATTR_SCRIPT_RESOURCE_RESOLVER,
- this.scriptResource.getResourceResolver(),
ScriptContext.GLOBAL_SCOPE);
+ this.scriptResource.getResourceResolver(),
SlingScriptConstants.SLING_SCOPE);
reader = getScriptReader();
if ( method != null && !(this.scriptEngine instanceof Invocable)) {
Modified:
sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java?rev=797001&r1=797000&r2=797001&view=diff
==============================================================================
---
sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java
(original)
+++
sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java
Thu Jul 23 10:17:52 2009
@@ -129,7 +129,7 @@
final ScriptContext context) {
ResourceResolver resolver = (ResourceResolver)
context.getAttribute(SlingScriptConstants.ATTR_SCRIPT_RESOURCE_RESOLVER,
- ScriptContext.GLOBAL_SCOPE);
+ SlingScriptConstants.SLING_SCOPE);
if ( resolver == null ) {
resolver =
scriptHelper.getScript().getScriptResource().getResourceResolver();
}
Modified:
sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/JavaScriptEngineFactory.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/JavaScriptEngineFactory.java?rev=797001&r1=797000&r2=797001&view=diff
==============================================================================
---
sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/JavaScriptEngineFactory.java
(original)
+++
sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/JavaScriptEngineFactory.java
Thu Jul 23 10:17:52 2009
@@ -169,7 +169,7 @@
final SlingScriptHelper scriptHelper,
final ScriptContext context) {
ResourceResolver resolver = (ResourceResolver)
context.getAttribute(SlingScriptConstants.ATTR_SCRIPT_RESOURCE_RESOLVER,
- ScriptContext.GLOBAL_SCOPE);
+ SlingScriptConstants.SLING_SCOPE);
if ( resolver == null ) {
resolver =
scriptHelper.getScript().getScriptResource().getResourceResolver();
}