You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/10/18 23:26:25 UTC
[sling-org-apache-sling-scripting-groovy] 01/26: SLING-3888 - Move
groovy extension bundle to contrib/scripting
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-groovy.git
commit 09325fcd7a82730a57b4c62fe8a29d1157977cdf
Author: Robert Munteanu <ro...@apache.org>
AuthorDate: Tue Sep 2 14:18:42 2014 +0000
SLING-3888 - Move groovy extension bundle to contrib/scripting
Relocate the groovy extension bundle under contrib/scripting and also move it to the contrib reactor from the main reactor.
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1622011 13f79535-47bb-0310-9956-ffa450edef68
---
pom.xml | 96 ++++++++++++++++++++++
.../JsonBuilderBindingsValuesProvider.java | 46 +++++++++++
.../groovy/scripting/internal/GSPScriptEngine.java | 69 ++++++++++++++++
.../scripting/internal/GSPScriptEngineFactory.java | 68 +++++++++++++++
4 files changed, 279 insertions(+)
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..7cfa2a5
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>sling</artifactId>
+ <groupId>org.apache.sling</groupId>
+ <version>20</version>
+ <relativePath>../../../parent/pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.scripting.groovy</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>bundle</packaging>
+
+ <name>Apache Sling Scripting Groovy Support</name>
+ <description>
+ Support for scripting with Groovy
+ </description>
+
+ <scm>
+ <connection>scm:svn:http://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/groovy</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/groovy</developerConnection>
+ <url>http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/groovy</url>
+ </scm>
+
+ <build>
+ <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>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.groovy</groupId>
+ <artifactId>groovy-all</artifactId>
+ <version>1.8.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.scr.annotations</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.scripting.api</artifactId>
+ <version>2.0.2-incubator</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.commons.classloader</artifactId>
+ <version>1.0.0</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/src/main/java/org/apache/sling/scripting/groovy/json/internal/JsonBuilderBindingsValuesProvider.java b/src/main/java/org/apache/sling/scripting/groovy/json/internal/JsonBuilderBindingsValuesProvider.java
new file mode 100644
index 0000000..520f9ca
--- /dev/null
+++ b/src/main/java/org/apache/sling/scripting/groovy/json/internal/JsonBuilderBindingsValuesProvider.java
@@ -0,0 +1,46 @@
+/*
+ * 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.groovy.json.internal;
+
+import groovy.json.JsonBuilder;
+
+import java.util.HashMap;
+
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Properties;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Service;
+
+/**
+ * BindingsValuesProvider which binds an instance of JsonBuilder.
+ */
+@SuppressWarnings("serial")
+@Component(immediate=true, metatype=false)
+@Service
+@Properties({
+ @Property(name="service.description", value="JSONGroovyBuilder BindingsValuesProvider"),
+ @Property(name="service.vendor", value="The Apache Software Foundation"),
+ @Property(name="javax.script.name", value="groovy")
+})
+public class JsonBuilderBindingsValuesProvider extends HashMap<String, Object> {
+
+ public JsonBuilderBindingsValuesProvider() {
+ super();
+ put("jsonBuilder", new JsonBuilder());
+ }
+
+}
diff --git a/src/main/java/org/apache/sling/scripting/groovy/scripting/internal/GSPScriptEngine.java b/src/main/java/org/apache/sling/scripting/groovy/scripting/internal/GSPScriptEngine.java
new file mode 100644
index 0000000..f2fca41
--- /dev/null
+++ b/src/main/java/org/apache/sling/scripting/groovy/scripting/internal/GSPScriptEngine.java
@@ -0,0 +1,69 @@
+/*
+ * 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.groovy.scripting.internal;
+
+import groovy.lang.Writable;
+import groovy.text.GStringTemplateEngine;
+import groovy.text.Template;
+import groovy.text.TemplateEngine;
+
+import java.io.IOException;
+import java.io.Reader;
+
+import javax.script.Bindings;
+import javax.script.ScriptContext;
+import javax.script.ScriptEngineFactory;
+import javax.script.ScriptException;
+
+import org.apache.sling.scripting.api.AbstractSlingScriptEngine;
+
+/**
+ * The actual GSP Script Engine, which simply wraps Groovy's
+ */
+public class GSPScriptEngine extends AbstractSlingScriptEngine {
+
+ private TemplateEngine templateEngine;
+
+ public GSPScriptEngine(ScriptEngineFactory scriptEngineFactory, ClassLoader classLoader) {
+ super(scriptEngineFactory);
+ this.templateEngine = new GStringTemplateEngine(classLoader);
+ }
+
+ public Object eval(Reader reader, ScriptContext ctx) throws ScriptException {
+ Template template = null;
+ try {
+ template = templateEngine.createTemplate(reader);
+ } catch (IOException e) {
+ throw new ScriptException("Unable to compile GSP script: " + e.getMessage());
+ } catch (ClassNotFoundException e) {
+ throw new ScriptException("Unable to compile GSP script: " + e.getMessage());
+ }
+
+ Bindings bindings = ctx.getBindings(ScriptContext.ENGINE_SCOPE);
+
+ Writable result = template.make(bindings);
+
+ try {
+ result.writeTo(ctx.getWriter());
+ } catch (IOException e) {
+ throw new ScriptException("Unable to write result of script execution: " + e.getMessage());
+ }
+
+ return null;
+ }
+
+}
diff --git a/src/main/java/org/apache/sling/scripting/groovy/scripting/internal/GSPScriptEngineFactory.java b/src/main/java/org/apache/sling/scripting/groovy/scripting/internal/GSPScriptEngineFactory.java
new file mode 100644
index 0000000..b00fb97
--- /dev/null
+++ b/src/main/java/org/apache/sling/scripting/groovy/scripting/internal/GSPScriptEngineFactory.java
@@ -0,0 +1,68 @@
+/*
+ * 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.groovy.scripting.internal;
+
+import java.util.Collections;
+import java.util.List;
+
+import javax.script.ScriptEngine;
+
+import org.apache.felix.scr.annotations.Component;
+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.commons.classloader.DynamicClassLoaderManager;
+import org.apache.sling.scripting.api.AbstractScriptEngineFactory;
+
+/**
+ * Script engine for Groovy Scripting Pages.
+ */
+@Component
+@Service
+@Properties({
+ @Property(name="service.vendor", value="The Apache Software Foundation"),
+ @Property(name="service.description", value="GSP Script Engine"),
+ @Property(name="compatible.javax.script.name", value="groovy")
+})
+public class GSPScriptEngineFactory extends AbstractScriptEngineFactory {
+
+ public GSPScriptEngineFactory() {
+ setNames("gsp", "GSP");
+ }
+
+ @Reference
+ private DynamicClassLoaderManager dynamicClassLoaderManager;
+
+ public String getLanguageName() {
+ return "Groovy Scripting Pages";
+ }
+
+ @Override
+ public List<String> getExtensions() {
+ return Collections.singletonList("gsp");
+ }
+
+ public String getLanguageVersion() {
+ return "1.0";
+ }
+
+ public ScriptEngine getScriptEngine() {
+ return new GSPScriptEngine(this, dynamicClassLoaderManager.getDynamicClassLoader());
+ }
+
+}
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.