Author: radu
Date: Tue Jul 14 12:01:45 2015
New Revision: 1690906

URL: http://svn.apache.org/r1690906
Log:
SLING-4855 - Add support for Compilable Script Engines in the Sightly JS Use 
Provider

* run Compilable#eval for ScriptEngine implementations that support Compilable
* added JS scripts to the scripts monitored by the ScriptCache implementation 
provided by Sling
* updated the Sightly tests launchpad to use the bundle versions corresponding 
to SLING-913, SLING-915

Modified:
    sling/trunk/bundles/scripting/sightly/js-use-provider/pom.xml
    
sling/trunk/bundles/scripting/sightly/js-use-provider/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsEnvironment.java
    
sling/trunk/bundles/scripting/sightly/js-use-provider/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsUseProvider.java
    
sling/trunk/bundles/scripting/sightly/js-use-provider/src/main/java/org/apache/sling/scripting/sightly/js/impl/Utils.java
    
sling/trunk/bundles/scripting/sightly/testing/src/main/provisioning/model.txt

Modified: sling/trunk/bundles/scripting/sightly/js-use-provider/pom.xml
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/js-use-provider/pom.xml?rev=1690906&r1=1690905&r2=1690906&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/sightly/js-use-provider/pom.xml (original)
+++ sling/trunk/bundles/scripting/sightly/js-use-provider/pom.xml Tue Jul 14 
12:01:45 2015
@@ -96,8 +96,14 @@
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.scripting.core</artifactId>
+            <version>2.0.29-SNAPSHOT</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.scripting.api</artifactId>
-            <version>2.1.0</version>
+            <version>2.1.7-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <dependency>

Modified: 
sling/trunk/bundles/scripting/sightly/js-use-provider/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsEnvironment.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/js-use-provider/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsEnvironment.java?rev=1690906&r1=1690905&r2=1690906&view=diff
==============================================================================
--- 
sling/trunk/bundles/scripting/sightly/js-use-provider/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsEnvironment.java
 (original)
+++ 
sling/trunk/bundles/scripting/sightly/js-use-provider/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsEnvironment.java
 Tue Jul 14 12:01:45 2015
@@ -21,8 +21,8 @@ package org.apache.sling.scripting.sight
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Reader;
-
 import javax.script.Bindings;
+import javax.script.Compilable;
 import javax.script.ScriptContext;
 import javax.script.ScriptEngine;
 import javax.script.ScriptException;
@@ -36,6 +36,7 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.api.resource.ResourceUtil;
 import org.apache.sling.api.scripting.SlingBindings;
 import org.apache.sling.api.scripting.SlingScriptHelper;
+import org.apache.sling.scripting.core.ScriptNameAwareReader;
 import org.apache.sling.scripting.sightly.ResourceResolution;
 import org.apache.sling.scripting.sightly.SightlyException;
 import org.apache.sling.scripting.sightly.js.impl.async.AsyncContainer;
@@ -109,6 +110,7 @@ public class JsEnvironment {
         CommonJsModule module = new CommonJsModule();
         Bindings scriptBindings = buildBindings(scriptResource, 
globalBindings, arguments, module);
         scriptContext.setBindings(scriptBindings, ScriptContext.ENGINE_SCOPE);
+        scriptContext.setAttribute(ScriptEngine.FILENAME, 
scriptResource.getPath(), ScriptContext.ENGINE_SCOPE);
         runScript(scriptResource, scriptContext, callback, module);
     }
 
@@ -156,8 +158,15 @@ public class JsEnvironment {
             public void run() {
                 Reader reader = null;
                 try {
-                    reader = new 
InputStreamReader(scriptResource.adaptTo(InputStream.class));
-                    Object result = jsEngine.eval(reader, scriptContext);
+                    Object result;
+                    if (jsEngine instanceof Compilable) {
+                        reader = new ScriptNameAwareReader(new 
InputStreamReader(scriptResource.adaptTo(InputStream.class)),
+                                scriptResource.getPath());
+                        result = ((Compilable) 
jsEngine).compile(reader).eval(scriptContext);
+                    } else {
+                        reader = new 
InputStreamReader(scriptResource.adaptTo(InputStream.class));
+                        result = jsEngine.eval(reader, scriptContext);
+                    }
                     if (commonJsModule.isModified()) {
                         result = commonJsModule.getExports();
                     }

Modified: 
sling/trunk/bundles/scripting/sightly/js-use-provider/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsUseProvider.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/js-use-provider/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsUseProvider.java?rev=1690906&r1=1690905&r2=1690906&view=diff
==============================================================================
--- 
sling/trunk/bundles/scripting/sightly/js-use-provider/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsUseProvider.java
 (original)
+++ 
sling/trunk/bundles/scripting/sightly/js-use-provider/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsUseProvider.java
 Tue Jul 14 12:01:45 2015
@@ -18,6 +18,12 @@
  
******************************************************************************/
 package org.apache.sling.scripting.sightly.js.impl;
 
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Dictionary;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Set;
 import javax.script.Bindings;
 import javax.script.ScriptEngine;
 import javax.script.ScriptEngineManager;
@@ -26,15 +32,14 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Properties;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferencePolicy;
 import org.apache.felix.scr.annotations.Service;
-import org.apache.sling.api.SlingException;
-import org.apache.sling.api.resource.LoginException;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
-import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.api.scripting.SlingScriptHelper;
+import org.apache.sling.commons.osgi.PropertiesUtil;
+import org.apache.sling.scripting.api.ScriptCache;
 import org.apache.sling.scripting.sightly.SightlyException;
-import 
org.apache.sling.scripting.sightly.impl.engine.runtime.RenderContextImpl;
 import org.apache.sling.scripting.sightly.js.impl.async.AsyncContainer;
 import org.apache.sling.scripting.sightly.js.impl.async.AsyncExtractor;
 import 
org.apache.sling.scripting.sightly.js.impl.jsapi.SlyBindingsValuesProvider;
@@ -43,6 +48,9 @@ import org.apache.sling.scripting.sightl
 import org.apache.sling.scripting.sightly.use.ProviderOutcome;
 import org.apache.sling.scripting.sightly.use.UseProvider;
 import org.osgi.framework.Constants;
+import org.osgi.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -68,8 +76,10 @@ import org.slf4j.LoggerFactory;
 public class JsUseProvider implements UseProvider {
 
     private static final String JS_ENGINE_NAME = "javascript";
+    private static final String SCRIPT_CACHE_PID = 
"org.apache.sling.scripting.core.impl.ScriptCacheImpl";
+    private static final String SCRIPT_CACHE_ADDITIONAL_EXTENSIONS = 
"org.apache.sling.scripting.cache.additional_extensions";
 
-    private static final Logger log = 
LoggerFactory.getLogger(JsUseProvider.class);
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(JsUseProvider.class);
     private static final JsValueAdapter jsValueAdapter = new 
JsValueAdapter(new AsyncExtractor());
 
     @Reference
@@ -78,6 +88,9 @@ public class JsUseProvider implements Us
     @Reference
     private SlyBindingsValuesProvider slyBindingsValuesProvider = null;
 
+    @Reference
+    private ConfigurationAdmin configurationAdmin = null;
+
     @Override
     public ProviderOutcome provide(String identifier, RenderContext 
renderContext, Bindings arguments) {
         Bindings globalBindings = renderContext.getBindings();
@@ -105,4 +118,27 @@ public class JsUseProvider implements Us
             }
         }
     }
+
+    @SuppressWarnings({"unused", "unchecked"})
+    protected void activate(ComponentContext componentContext) {
+        try {
+            Configuration configuration = 
configurationAdmin.getConfiguration(SCRIPT_CACHE_PID);
+            Dictionary properties = configuration.getProperties();
+            if (properties == null) {
+                properties = new Hashtable(1);
+            }
+            String[] additionalExtensions = 
PropertiesUtil.toStringArray(properties.get(SCRIPT_CACHE_ADDITIONAL_EXTENSIONS));
+            Set<String> extensionsSet = new HashSet<String>(1);
+            if (additionalExtensions != null) {
+                extensionsSet = new 
HashSet<String>(Arrays.asList(additionalExtensions));
+            }
+            extensionsSet.add(Utils.JS_EXTENSION);
+            properties.put(SCRIPT_CACHE_ADDITIONAL_EXTENSIONS, 
extensionsSet.toArray(new String[extensionsSet.size()]));
+            configuration.setBundleLocation(null);
+            configuration.update(properties);
+        } catch (IOException e) {
+            LOGGER.error("Unable to retrieve " + SCRIPT_CACHE_PID + " 
configuration. The Script Cache will not invalidate JavaScript file" +
+                    " changes (e.g. files with the .js extension).");
+        }
+    }
 }

Modified: 
sling/trunk/bundles/scripting/sightly/js-use-provider/src/main/java/org/apache/sling/scripting/sightly/js/impl/Utils.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/js-use-provider/src/main/java/org/apache/sling/scripting/sightly/js/impl/Utils.java?rev=1690906&r1=1690905&r2=1690906&view=diff
==============================================================================
--- 
sling/trunk/bundles/scripting/sightly/js-use-provider/src/main/java/org/apache/sling/scripting/sightly/js/impl/Utils.java
 (original)
+++ 
sling/trunk/bundles/scripting/sightly/js-use-provider/src/main/java/org/apache/sling/scripting/sightly/js/impl/Utils.java
 Tue Jul 14 12:01:45 2015
@@ -30,7 +30,7 @@ import org.apache.sling.api.scripting.Sl
  * Utilities for script evaluation
  */
 public class Utils {
-    private static final String EXTENSION = "js";
+    public static final String JS_EXTENSION = "js";
 
     public static final Bindings EMPTY_BINDINGS = new 
SimpleBindings(Collections.<String, Object>emptyMap());
 
@@ -40,7 +40,7 @@ public class Utils {
 
     public static boolean isJsScript(String identifier) {
         String extension = StringUtils.substringAfterLast(identifier, ".");
-        return EXTENSION.equalsIgnoreCase(extension);
+        return JS_EXTENSION.equalsIgnoreCase(extension);
     }
 
 }

Modified: 
sling/trunk/bundles/scripting/sightly/testing/src/main/provisioning/model.txt
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/testing/src/main/provisioning/model.txt?rev=1690906&r1=1690905&r2=1690906&view=diff
==============================================================================
--- 
sling/trunk/bundles/scripting/sightly/testing/src/main/provisioning/model.txt 
(original)
+++ 
sling/trunk/bundles/scripting/sightly/testing/src/main/provisioning/model.txt 
Tue Jul 14 12:01:45 2015
@@ -21,7 +21,11 @@
 [artifacts]
   org.apache.sling/org.apache.sling.launchpad/8-SNAPSHOT/slingstart
   
org.apache.sling/org.apache.sling.scripting.sightly.testing-content/1.0.5-SNAPSHOT
-  org.apache.sling/org.apache.sling.scripting.javascript/2.0.17-SNAPSHOT
+  org.apache.sling/org.apache.sling.scripting.api/2.1.7-SNAPSHOT
+  org.apache.sling/org.apache.sling.scripting.core/2.0.29-SNAPSHOT
+  org.apache.sling/org.apache.sling.scripting.javascript/2.0.19-SNAPSHOT
+  
org.apache.sling/org.apache.sling.scripting.sightly.js.provider/1.0.5-SNAPSHOT
+  org.apache.sling/org.apache.sling.scripting.sightly.repl/1.0.1-SNAPSHOT
 
 # additional configuration for testing
 [configurations]


Reply via email to