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();
         }


Reply via email to