You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by pa...@apache.org on 2020/04/30 15:08:38 UTC
[sling-org-apache-sling-scripting-api] 01/01: SLING-9406: Add
bundled script support to the servlets resolver
This is an automated email from the ASF dual-hosted git repository.
pauls pushed a commit to branch issues/SLING-9406
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-api.git
commit 15abb52c153bf33ba9942d36782796e2b65676ef
Author: Karl Pauls <ka...@gmail.com>
AuthorDate: Thu Apr 30 17:08:20 2020 +0200
SLING-9406: Add bundled script support to the servlets resolver
---
pom.xml | 20 ++++
.../scripting/api/bundled/BundledRenderUnit.java | 105 +++++++++++++++++++++
.../sling/scripting/api/bundled/package-info.java | 20 ++++
3 files changed, 145 insertions(+)
diff --git a/pom.xml b/pom.xml
index 1d125c8..26f8774 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,6 +40,9 @@
<developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-api.git</developerConnection>
<url>https://gitbox.apache.org/repos/asf?p=sling-org-apache-sling-scripting-api.git</url>
</scm>
+ <properties>
+ <sling.java.version>8</sling.java.version>
+ </properties>
<build>
<plugins>
@@ -58,6 +61,23 @@
<version>2.16.0</version>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.servlets.resolver</artifactId>
+ <version>2.6.5-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>osgi.core</artifactId>
+ <version>6.0.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jetbrains</groupId>
+ <artifactId>annotations</artifactId>
+ <version>16.0.3</version>
+ </dependency>
</dependencies>
</project>
diff --git a/src/main/java/org/apache/sling/scripting/api/bundled/BundledRenderUnit.java b/src/main/java/org/apache/sling/scripting/api/bundled/BundledRenderUnit.java
new file mode 100644
index 0000000..c7d6d11
--- /dev/null
+++ b/src/main/java/org/apache/sling/scripting/api/bundled/BundledRenderUnit.java
@@ -0,0 +1,105 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ 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.api.bundled;
+
+import java.util.Set;
+
+import org.apache.sling.servlets.resolver.bundle.tracker.TypeProvider;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.osgi.annotation.versioning.ProviderType;
+import org.osgi.framework.Bundle;
+
+/**
+ * <p>
+ * A {@code BundledRenderUnit} represents a pre-packaged script or precompiled script that will be executed in order to render a
+ * {@link org.apache.sling.api.SlingHttpServletRequest}.
+ * </p>
+ * <p>
+ * If the current {@link org.apache.sling.api.SlingHttpServletRequest} is served by a {@code BundledRenderUnit}, the
+ * {@code org.apache.sling.scripting.bundle.tracker} will set the {@code BundledRenderUnit} in the {@link javax.script.Bindings} map associated to the request,
+ * under the {@link #VARIABLE} key.
+ * </p>
+ */
+@ProviderType
+public interface BundledRenderUnit {
+
+ /**
+ * The variable available in the {@link javax.script.Bindings} associated to a {@link org.apache.sling.api.SlingHttpServletRequest}
+ * if that request is served by a {@code BundledRenderUnit}.
+ */
+ String VARIABLE = BundledRenderUnit.class.getName();
+
+ /**
+ * In case this {@code BundledRenderUnit} wraps a precompiled script, this method will return an instance of that object.
+ *
+ * @return a precompiled unit, if {@code this} unit wraps a precompiled script; {@code null} otherwise
+ */
+ @Nullable
+ default Object getUnit() {
+ return null;
+ }
+
+ /**
+ * Returns the name of {@code this BundledRenderUnit}. This can be the name of the wrapped script or precompiled script.
+ *
+ * @return the name {@code this BundledRenderUnit}
+ */
+ @NotNull String getName();
+
+ /**
+ * Returns the {@link Bundle} in which the script or precompiled script is packaged. This method can be useful for getting an
+ * instance of the bundle's classloader, when needed to load dependencies at run time. To do so the following code example can help:
+ *
+ * <pre>
+ * Bundle bundle = bundledRenderUnit.getBundle();
+ * Classloader bundleClassloader = bundle.adapt(BundleWiring.class).getClassLoader();
+ * </pre>
+ */
+ @NotNull Bundle getBundle();
+
+ /**
+ * Returns the {@code Set} of {@link TypeProvider}s which are related to this unit.
+ *
+ * @return the set of providers; if the unit doesn't have any inheritance chains, then the set will contain only one {@link
+ * TypeProvider}
+ */
+ @NotNull Set<TypeProvider> getTypeProviders();
+
+ /**
+ * Retrieves an OSGi runtime dependency of the wrapped script identified by the passed {@code className} parameter.
+ *
+ * @param className the fully qualified class name
+ * @param <T> the expected service type
+ * @return an instance of the {@link T} or {@code null}
+ */
+ @Nullable <T> T getService(@NotNull String className);
+
+ /**
+ * Retrieves multiple instances of an OSGi runtime dependency of the wrapped script identified by the passed {@code className}
+ * parameter, filtered according to the passed {@code filter}.
+ *
+ * @param className the fully qualified class name
+ * @param filter a filter expression or {@code null} if all the instances should be returned; for more details about the {@code
+ * filter}'s syntax check {@link org.osgi.framework.BundleContext#getServiceReferences(String, String)}
+ * @param <T> the expected service type
+ * @return an instance of the {@link T} or {@code null}
+ */
+ @Nullable <T> T[] getServices(@NotNull String className, @Nullable String filter);
+}
diff --git a/src/main/java/org/apache/sling/scripting/api/bundled/package-info.java b/src/main/java/org/apache/sling/scripting/api/bundled/package-info.java
new file mode 100644
index 0000000..1259aa7
--- /dev/null
+++ b/src/main/java/org/apache/sling/scripting/api/bundled/package-info.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * 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.
+ ******************************************************************************/
+@Version("0.1.0")
+package org.apache.sling.scripting.api.bundled;
+
+import org.osgi.annotation.versioning.Version;
\ No newline at end of file