You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ol...@apache.org on 2016/04/26 05:43:04 UTC

svn commit: r1740939 - in /sling/trunk/contrib/scripting/freemarker: ./ src/main/java/org/apache/sling/scripting/freemarker/ src/main/java/org/apache/sling/scripting/freemarker/internal/ src/main/resources/META-INF/services/

Author: olli
Date: Tue Apr 26 03:43:04 2016
New Revision: 1740939

URL: http://svn.apache.org/viewvc?rev=1740939&view=rev
Log:
SLING-5687 Make ScriptEngine factory configurable

Added:
    sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/
    sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngine.java
      - copied, changed from r1740846, sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/FreemarkerScriptEngine.java
    sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngineFactory.java
      - copied, changed from r1740846, sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/FreemarkerScriptEngineFactory.java
    sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngineFactoryConfiguration.java
Removed:
    sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/FreemarkerScriptEngine.java
    sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/FreemarkerScriptEngineFactory.java
Modified:
    sling/trunk/contrib/scripting/freemarker/pom.xml
    sling/trunk/contrib/scripting/freemarker/src/main/resources/META-INF/services/javax.script.ScriptEngineFactory

Modified: sling/trunk/contrib/scripting/freemarker/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/freemarker/pom.xml?rev=1740939&r1=1740938&r2=1740939&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/freemarker/pom.xml (original)
+++ sling/trunk/contrib/scripting/freemarker/pom.xml Tue Apr 26 03:43:04 2016
@@ -32,8 +32,8 @@
   <version>2.0.0-SNAPSHOT</version>
   <packaging>bundle</packaging>
 
-  <name>Apache Sling Scripting Freemarker Support</name>
-  <description>Support for Freemarker scripting</description>
+  <name>Apache Sling Scripting FreeMarker</name>
+  <description>Support for FreeMarker scripting</description>
 
   <scm>
     <connection>scm:svn:http://svn.apache.org/repos/asf/sling/trunk/contrib/scripting/freemarker</connection>
@@ -78,6 +78,13 @@
             </Import-Package>
             <ScriptEngine-Name>${project.name}</ScriptEngine-Name>
             <ScriptEngine-Version>${project.version}</ScriptEngine-Version>
+            <_dsannotations>*</_dsannotations>
+            <_metatypeannotations>*</_metatypeannotations>
+            <_removeheaders>
+              Embed-Dependency,
+              Private-Package,
+              Include-Resource
+            </_removeheaders>
           </instructions>
         </configuration>
       </plugin>
@@ -100,11 +107,33 @@
   </reporting>
 
   <dependencies>
+    <!-- OSGi -->
     <dependency>
-      <groupId>org.apache.felix</groupId>
-      <artifactId>org.apache.felix.scr.annotations</artifactId>
+      <groupId>org.osgi</groupId>
+      <artifactId>osgi.core</artifactId>
+      <version>6.0.0</version>
+      <scope>provided</scope>
     </dependency>
     <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>osgi.annotation</artifactId>
+      <version>6.0.1</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.service.component.annotations</artifactId>
+      <version>1.3.0</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.service.metatype.annotations</artifactId>
+      <version>1.3.0</version>
+      <scope>provided</scope>
+    </dependency>
+    <!-- Apache Sling -->
+    <dependency>
       <groupId>org.apache.sling</groupId>
       <artifactId>org.apache.sling.api</artifactId>
       <version>2.0.8</version>

Copied: sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngine.java (from r1740846, sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/FreemarkerScriptEngine.java)
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngine.java?p2=sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngine.java&p1=sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/FreemarkerScriptEngine.java&r1=1740846&r2=1740939&rev=1740939&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/FreemarkerScriptEngine.java (original)
+++ sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngine.java Tue Apr 26 03:43:04 2016
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.scripting.freemarker;
+package org.apache.sling.scripting.freemarker.internal;
 
 import java.io.Reader;
 

Copied: sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngineFactory.java (from r1740846, sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/FreemarkerScriptEngineFactory.java)
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngineFactory.java?p2=sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngineFactory.java&p1=sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/FreemarkerScriptEngineFactory.java&r1=1740846&r2=1740939&rev=1740939&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/FreemarkerScriptEngineFactory.java (original)
+++ sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngineFactory.java Tue Apr 26 03:43:04 2016
@@ -16,30 +16,38 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.sling.scripting.freemarker;
+package org.apache.sling.scripting.freemarker.internal;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Properties;
 
 import javax.script.ScriptEngine;
+import javax.script.ScriptEngineFactory;
 
 import org.apache.sling.scripting.api.AbstractScriptEngineFactory;
-
+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.Modified;
+import org.osgi.service.metatype.annotations.Designate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Component(
+    service = ScriptEngineFactory.class,
+    immediate = true,
+    property = {
+        Constants.SERVICE_DESCRIPTION + "=Scripting engine for FreeMarker templates",
+        Constants.SERVICE_VENDOR + "=The Apache Software Foundation"
+    }
+)
+@Designate(
+    ocd = FreemarkerScriptEngineFactoryConfiguration.class
+)
 public class FreemarkerScriptEngineFactory extends AbstractScriptEngineFactory {
 
-    /** The extensions of FreeMarker scripts (value is "ftl"). */
-    public final static String FREEMARKER_SCRIPT_EXTENSION = "ftl";
-
-    /** The MIME type of FreeMarker script files (value is "text/x-freemarker"). */
-    public final static String FREEMARKER_MIME_TYPE = "text/x-freemarker";
-
-    /**
-     * The short name of the FreeMarker script engine factory (value is
-     * "freemarker").
-     */
-    public final static String SHORT_NAME = "freemarker";
-
     /** The name of the FreeMarker language (value is "FreeMarker"). */
     private static final String FREEMARKER_NAME = "FreeMarker";
 
@@ -69,10 +77,9 @@ public class FreemarkerScriptEngineFacto
      */
     private final String languageVersion;
 
+    private final Logger logger = LoggerFactory.getLogger(FreemarkerScriptEngineFactory.class);
+
     public FreemarkerScriptEngineFactory() {
-        setExtensions(FREEMARKER_SCRIPT_EXTENSION);
-        setMimeTypes(FREEMARKER_MIME_TYPE);
-        setNames(SHORT_NAME);
 
         // extract language version from version.properties file
         String langVersion = null;
@@ -103,6 +110,29 @@ public class FreemarkerScriptEngineFacto
                 : langVersion;
     }
 
+    @Activate
+    private void activate(final FreemarkerScriptEngineFactoryConfiguration configuration) {
+        logger.debug("activate");
+        configure(configuration);
+    }
+
+    @Modified
+    private void modified(final FreemarkerScriptEngineFactoryConfiguration configuration) {
+        logger.debug("modified");
+        configure(configuration);
+    }
+
+    @Deactivate
+    private void deactivate() {
+        logger.debug("deactivate");
+    }
+
+    private void configure(final FreemarkerScriptEngineFactoryConfiguration configuration) {
+        setExtensions(configuration.extensions());
+        setMimeTypes(configuration.mimeTypes());
+        setNames(configuration.names());
+    }
+
     public ScriptEngine getScriptEngine() {
         return new FreemarkerScriptEngine(this);
     }

Added: sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngineFactoryConfiguration.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngineFactoryConfiguration.java?rev=1740939&view=auto
==============================================================================
--- sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngineFactoryConfiguration.java (added)
+++ sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngineFactoryConfiguration.java Tue Apr 26 03:43:04 2016
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.scripting.freemarker.internal;
+
+import org.osgi.service.metatype.annotations.AttributeDefinition;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
+
+@ObjectClassDefinition(
+    name = "Apache Sling Scripting FreeMarker “ScriptEngine Factory”",
+    description = "scripting engine for FreeMarker templates"
+)
+@interface FreemarkerScriptEngineFactoryConfiguration {
+
+    @AttributeDefinition(
+        name = "service ranking",
+        description = "service property for identifying the service's ranking number"
+    )
+    int service_ranking() default 0;
+
+    @AttributeDefinition(
+        name = "extensions",
+        description = "extensions"
+    )
+    String[] extensions() default {
+        "ftl"
+    };
+
+    @AttributeDefinition(
+        name = "mime types",
+        description = "mime types"
+    )
+    String[] mimeTypes() default {
+        "text/x-freemarker"
+    };
+
+    @AttributeDefinition(
+        name = "names",
+        description = "names"
+    )
+    String[] names() default {
+        "freemarker"
+    };
+
+}

Modified: sling/trunk/contrib/scripting/freemarker/src/main/resources/META-INF/services/javax.script.ScriptEngineFactory
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/freemarker/src/main/resources/META-INF/services/javax.script.ScriptEngineFactory?rev=1740939&r1=1740938&r2=1740939&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/freemarker/src/main/resources/META-INF/services/javax.script.ScriptEngineFactory (original)
+++ sling/trunk/contrib/scripting/freemarker/src/main/resources/META-INF/services/javax.script.ScriptEngineFactory Tue Apr 26 03:43:04 2016
@@ -16,4 +16,4 @@
 #  specific language governing permissions and limitations
 #  under the License.
 #
-org.apache.sling.scripting.freemarker.FreemarkerScriptEngineFactory
\ No newline at end of file
+org.apache.sling.scripting.freemarker.internal.FreemarkerScriptEngineFactory
\ No newline at end of file