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 2016/11/15 18:08:18 UTC

svn commit: r1769867 - in /sling/trunk/contrib/scripting/java: ./ src/main/java/org/apache/sling/scripting/java/impl/ src/main/resources/

Author: cziegeler
Date: Tue Nov 15 18:08:18 2016
New Revision: 1769867

URL: http://svn.apache.org/viewvc?rev=1769867&view=rev
Log:
SLING-6289 : Improve java resource change listener to use globs

Removed:
    sling/trunk/contrib/scripting/java/src/main/resources/
Modified:
    sling/trunk/contrib/scripting/java/pom.xml
    sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/impl/CompilerOptions.java
    sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/impl/JavaScriptEngineFactory.java
    sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/impl/JavaServletConfig.java

Modified: sling/trunk/contrib/scripting/java/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/java/pom.xml?rev=1769867&r1=1769866&r2=1769867&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/java/pom.xml (original)
+++ sling/trunk/contrib/scripting/java/pom.xml Tue Nov 15 18:08:18 2016
@@ -45,10 +45,6 @@
     <plugins>
       <plugin>
         <groupId>org.apache.felix</groupId>
-        <artifactId>maven-scr-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
         <extensions>true</extensions>
         <configuration>

Modified: sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/impl/CompilerOptions.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/impl/CompilerOptions.java?rev=1769867&r1=1769866&r2=1769867&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/impl/CompilerOptions.java (original)
+++ sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/impl/CompilerOptions.java Tue Nov 15 18:08:18 2016
@@ -16,10 +16,7 @@
  */
 package org.apache.sling.scripting.java.impl;
 
-import java.util.Map;
-
 import org.apache.sling.commons.compiler.Options;
-import org.apache.sling.commons.osgi.PropertiesUtil;
 
 public class CompilerOptions extends Options {
 
@@ -31,31 +28,23 @@ public class CompilerOptions extends Opt
      * Create an compiler options object using data available from
      * the component configuration.
      */
-    public static CompilerOptions createOptions(final Map<String, Object> props) {
+    public static CompilerOptions createOptions(final JavaScriptEngineFactory.Config config) {
         final String currentVersion = System.getProperty("java.specification.version");
         final CompilerOptions opts = new CompilerOptions();
 
-        final Boolean classDebugInfo = PropertiesUtil.toBoolean(
-                props.get(JavaScriptEngineFactory.PROPERTY_CLASSDEBUGINFO), true);
-        opts.put(Options.KEY_GENERATE_DEBUG_INFO, classDebugInfo);
-
-        final String sourceVM = PropertiesUtil.toString(
-                props.get(JavaScriptEngineFactory.PROPERTY_COMPILER_SOURCE_V_M), null);
-        opts.put(Options.KEY_SOURCE_VERSION, sourceVM != null && sourceVM.trim().length() > 0 ? sourceVM.trim() : JavaScriptEngineFactory.VERSION_AUTO);
+        opts.put(Options.KEY_GENERATE_DEBUG_INFO, config.java_classdebuginfo());
+
+        opts.put(Options.KEY_SOURCE_VERSION, config.java_compilerSourceVM());
         if ( JavaScriptEngineFactory.VERSION_AUTO.equalsIgnoreCase((String)opts.get(Options.KEY_SOURCE_VERSION)) ) {
             opts.put(Options.KEY_SOURCE_VERSION, currentVersion);
         }
 
-        final String targetVM = PropertiesUtil.toString(
-                props.get(JavaScriptEngineFactory.PROPERTY_COMPILER_TARGET_V_M), null);
-        opts.put(Options.KEY_TARGET_VERSION, targetVM != null && targetVM.trim().length() > 0 ? targetVM.trim() : JavaScriptEngineFactory.VERSION_AUTO);
+        opts.put(Options.KEY_TARGET_VERSION, config.java_compilerTargetVM());
         if ( JavaScriptEngineFactory.VERSION_AUTO.equalsIgnoreCase((String)opts.get(Options.KEY_TARGET_VERSION)) ) {
             opts.put(Options.KEY_TARGET_VERSION, currentVersion);
         }
 
-        final String encoding = PropertiesUtil.toString(
-                props.get(JavaScriptEngineFactory.PROPERTY_ENCODING), null);
-        opts.encoding = encoding != null && encoding.length() > 0 ? encoding : "UTF-8";
+        opts.encoding = config.java_javaEncoding();
 
         opts.put(Options.KEY_IGNORE_WARNINGS, true);
 

Modified: sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/impl/JavaScriptEngineFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/impl/JavaScriptEngineFactory.java?rev=1769867&r1=1769866&r2=1769867&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/impl/JavaScriptEngineFactory.java (original)
+++ sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/impl/JavaScriptEngineFactory.java Tue Nov 15 18:08:18 2016
@@ -20,7 +20,6 @@ import static org.apache.sling.api.scrip
 
 import java.io.IOException;
 import java.io.Reader;
-import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
 
@@ -32,13 +31,6 @@ import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-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.Service;
 import org.apache.sling.api.SlingException;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingIOException;
@@ -55,6 +47,14 @@ import org.apache.sling.api.scripting.Sl
 import org.apache.sling.commons.compiler.JavaCompiler;
 import org.apache.sling.scripting.api.AbstractScriptEngineFactory;
 import org.apache.sling.scripting.api.AbstractSlingScriptEngine;
+import org.osgi.framework.Constants;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.metatype.annotations.AttributeDefinition;
+import org.osgi.service.metatype.annotations.Designate;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -62,31 +62,44 @@ import org.slf4j.LoggerFactory;
  * The Java engine
  *
  */
-@Component(metatype=true, label="%javahandler.name", description="%javahandler.description")
-@Service(value={javax.script.ScriptEngineFactory.class, ResourceChangeListener.class})
-@Properties({
-    @Property(name="service.vendor", value="The Apache Software Foundation"),
-    @Property(name="service.description", value="Java Servlet Script Handler"),
-    @Property(name=JavaScriptEngineFactory.PROPERTY_COMPILER_SOURCE_V_M, value=JavaScriptEngineFactory.VERSION_AUTO),
-    @Property(name=JavaScriptEngineFactory.PROPERTY_COMPILER_TARGET_V_M, value=JavaScriptEngineFactory.VERSION_AUTO),
-    @Property(name=JavaScriptEngineFactory.PROPERTY_CLASSDEBUGINFO, boolValue=true),
-    @Property(name=JavaScriptEngineFactory.PROPERTY_ENCODING, value="UTF-8"),
-    @Property(name = ResourceChangeListener.CHANGES, value = {"CHANGED", "REMOVED"}, propertyPrivate = true),
-    @Property(name = ResourceChangeListener.PATHS, value = {"."}, propertyPrivate = true)
-})
+@Component(service={javax.script.ScriptEngineFactory.class, ResourceChangeListener.class},
+           property={
+                   Constants.SERVICE_VENDOR + "=The Apache Software Foundation",
+                   Constants.SERVICE_DESCRIPTION + "=" + JavaScriptEngineFactory.DESCRIPTION,
+                   ResourceChangeListener.CHANGES + "=CHANGED",
+                   ResourceChangeListener.CHANGES + "=REMOVED",
+                   ResourceChangeListener.PATHS + "=glob:**/*.java"
+           })
+@Designate(ocd = JavaScriptEngineFactory.Config.class)
 public class JavaScriptEngineFactory
     extends AbstractScriptEngineFactory
     implements ResourceChangeListener, ExternalResourceChangeListener {
 
-    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+    public static final String DESCRIPTION = "Java Servlet Script Handler";
+
+    @ObjectClassDefinition(name = "Apache Sling Java Script Handler",
+           description = "The Java Script Handler supports development of Java Servlets to render response content. ")
+
+    public @interface Config {
 
-    public static final String PROPERTY_COMPILER_SOURCE_V_M = "java.compilerSourceVM";
+        @AttributeDefinition(name = "Generate Debug Info", description = "Should the class file be compiled with " +
+                   "debugging information? true or false, default true.")
+        boolean java_classdebuginfo() default true;
 
-    public static final String PROPERTY_COMPILER_TARGET_V_M = "java.compilerTargetVM";
+        @AttributeDefinition(name = "Source Encoding", description = "")
+        String java_javaEncoding() default "UTF-8";
 
-    public static final String PROPERTY_CLASSDEBUGINFO = "java.classdebuginfo";
+        @AttributeDefinition(name = "Source VM", description = "Java Specification to be used to read " +
+                 "the source files. If left empty or the value \"auto\" is specified, the " +
+                 "current vm version will be used.")
+        String java_compilerSourceVM() default JavaScriptEngineFactory.VERSION_AUTO;
 
-    public static final String PROPERTY_ENCODING = "java.javaEncoding";
+        @AttributeDefinition(name = "Target VM", description = "Target Java version for compilation. If left " +
+                   "empty or the value \"auto\" is specified, the current vm version will be used.")
+        String java_compilerTargetVM() default JavaScriptEngineFactory.VERSION_AUTO;
+    }
+
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
     public static final String VERSION_AUTO = "auto";
 
@@ -153,13 +166,13 @@ public class JavaScriptEngineFactory
      * @param config Configuration properties
      */
     @Activate
-    protected void activate(final Map<String, Object> config) {
-        final CompilerOptions opts = CompilerOptions.createOptions(new Hashtable<>(config));
+    protected void activate(final Config config, final Map<String, Object> props) {
+        final CompilerOptions opts = CompilerOptions.createOptions(config);
         this.ioProvider = new SlingIOProvider(this.javaCompiler, opts);
         this.javaServletContext = new JavaServletContext(ioProvider,
             slingServletContext);
 
-        this.servletConfig = new JavaServletConfig(javaServletContext, config);
+        this.servletConfig = new JavaServletConfig(javaServletContext, props);
 
         logger.info("Activating Apache Sling Script Engine for Java with options {}", opts);
     }

Modified: sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/impl/JavaServletConfig.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/impl/JavaServletConfig.java?rev=1769867&r1=1769866&r2=1769867&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/impl/JavaServletConfig.java (original)
+++ sling/trunk/contrib/scripting/java/src/main/java/org/apache/sling/scripting/java/impl/JavaServletConfig.java Tue Nov 15 18:08:18 2016
@@ -26,8 +26,6 @@ import java.util.Map;
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
 
-import org.osgi.framework.Constants;
-
 /**
  * The <code>JavaServletConfig</code>
  * is passed to the compiled servlets.
@@ -37,21 +35,11 @@ public class JavaServletConfig implement
     /** The servlet context. */
     private final ServletContext servletContext;
 
-    /** The name of the servlet. */
-    private final String servletName;
-
     private final Map<String, String> initParams;
 
-    public JavaServletConfig(ServletContext servletContext, Map<String, Object> config) {
+    public JavaServletConfig(ServletContext servletContext, final Map<String, Object> config) {
         this.servletContext = servletContext;
 
-        // set the servlet name
-        if (config.get(Constants.SERVICE_DESCRIPTION) == null) {
-            servletName = "Java Script Handler";
-        } else{
-            servletName = config.get(Constants.SERVICE_DESCRIPTION).toString();
-        }
-
         // copy the "java." properties
         initParams = new HashMap<String, String>();
         for (final Map.Entry<String, Object> entry : config.entrySet()) {
@@ -95,6 +83,6 @@ public class JavaServletConfig implement
      */
     @Override
     public String getServletName() {
-        return servletName;
+        return JavaScriptEngineFactory.DESCRIPTION;
     }
 }
\ No newline at end of file