Author: cziegeler
Date: Fri Apr 28 08:16:18 2017
New Revision: 1793000
URL: http://svn.apache.org/viewvc?rev=1793000&view=rev
Log:
SLING-6737 Migrate to OSGi R6 annotations - Fix reference to factories being
multiple. Add service.vendor property
Modified:
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/BindingsValuesProvidersByContextImpl.java
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptingVariablesConsolePlugin.java
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/SlingBindingsVariablesListJsonServlet.java
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/SlingScriptAdapterFactory.java
Modified:
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/BindingsValuesProvidersByContextImpl.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/BindingsValuesProvidersByContextImpl.java?rev=1793000&r1=1792999&r2=1793000&view=diff
==============================================================================
---
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/BindingsValuesProvidersByContextImpl.java
(original)
+++
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/BindingsValuesProvidersByContextImpl.java
Fri Apr 28 08:16:18 2017
@@ -43,7 +43,9 @@ import org.osgi.service.component.annota
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.component.annotations.ReferenceCardinality;
import org.osgi.service.component.annotations.ReferencePolicy;
+import org.osgi.service.component.annotations.ReferencePolicyOption;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventAdmin;
import org.osgi.util.tracker.ServiceTracker;
@@ -53,11 +55,14 @@ import org.slf4j.LoggerFactory;
/** Our default {@link BindingsValuesProvidersByContext} implementation */
@Component(
- service = BindingsValuesProvidersByContext.class
+ service = BindingsValuesProvidersByContext.class,
+ property = {
+ Constants.SERVICE_VENDOR + "=The Apache Software Foundation"
+ }
)
public class BindingsValuesProvidersByContextImpl implements
BindingsValuesProvidersByContext, ServiceTrackerCustomizer {
- private final Map<String, ContextBvpCollector> customizers = new
HashMap<String, ContextBvpCollector>();
+ private final Map<String, ContextBvpCollector> customizers = new
HashMap<>();
public static final String [] DEFAULT_CONTEXT_ARRAY = new String [] {
DEFAULT_CONTEXT };
private static final String TOPIC_CREATED =
"org/apache/sling/scripting/core/BindingsValuesProvider/CREATED";
@@ -68,13 +73,15 @@ public class BindingsValuesProvidersByCo
private ServiceTracker mapsTracker;
private BundleContext bundleContext;
private final Logger logger = LoggerFactory.getLogger(getClass());
- private final List<ServiceReference> pendingRefs = new
ArrayList<ServiceReference>();
+ private final List<ServiceReference> pendingRefs = new ArrayList<>();
@Reference
private SlingScriptEngineManager scriptEngineManager;
@Reference(
- policy = ReferencePolicy.DYNAMIC
+ policy = ReferencePolicy.DYNAMIC,
+ policyOption = ReferencePolicyOption.GREEDY,
+ cardinality = ReferenceCardinality.OPTIONAL
)
private volatile EventAdmin eventAdmin;
@@ -129,7 +136,7 @@ public class BindingsValuesProvidersByCo
public Collection<BindingsValuesProvider> getBindingsValuesProviders(
ScriptEngineFactory scriptEngineFactory,
String context) {
- final List<BindingsValuesProvider> results = new
ArrayList<BindingsValuesProvider>();
+ final List<BindingsValuesProvider> results = new ArrayList<>();
if(context == null) {
context = DEFAULT_CONTEXT;
}
Modified:
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java?rev=1793000&r1=1792999&r2=1793000&view=diff
==============================================================================
---
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java
(original)
+++
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java
Fri Apr 28 08:16:18 2017
@@ -49,6 +49,7 @@ import org.apache.sling.scripting.api.Sc
import org.apache.sling.scripting.core.impl.helper.CachingMap;
import org.apache.sling.serviceusermapping.ServiceUserMapped;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.component.ComponentContext;
import org.osgi.service.component.annotations.Activate;
@@ -66,9 +67,12 @@ import org.slf4j.LoggerFactory;
reference = @Reference(
name = "ScriptEngineFactory",
service = ScriptEngineFactory.class,
- cardinality = ReferenceCardinality.OPTIONAL,
+ cardinality = ReferenceCardinality.MULTIPLE,
policy = ReferencePolicy.DYNAMIC
- )
+ ),
+ property = {
+ Constants.SERVICE_VENDOR + "=The Apache Software Foundation"
+ }
)
@Designate(
ocd = ScriptCacheImplConfiguration.class
@@ -253,7 +257,7 @@ public class ScriptCacheImpl implements
for (String extension : extensions) {
globPatterns.add("glob:**/*." + extension);
}
- Dictionary<String, Object> resourceChangeListenerProperties =
new Hashtable<String, Object>();
+ Dictionary<String, Object> resourceChangeListenerProperties =
new Hashtable<>();
resourceChangeListenerProperties.put(ResourceChangeListener.PATHS,
globPatterns.toArray(new String[globPatterns.size()]));
resourceChangeListenerProperties.put(ResourceChangeListener.CHANGES,
new String[]{ResourceChange.ChangeType.CHANGED.name(),
ResourceChange.ChangeType.REMOVED.name()});
Modified:
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptingVariablesConsolePlugin.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptingVariablesConsolePlugin.java?rev=1793000&r1=1792999&r2=1793000&view=diff
==============================================================================
---
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptingVariablesConsolePlugin.java
(original)
+++
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptingVariablesConsolePlugin.java
Fri Apr 28 08:16:18 2017
@@ -27,6 +27,7 @@ import javax.servlet.http.HttpServletRes
import org.apache.felix.webconsole.AbstractWebConsolePlugin;
import org.apache.felix.webconsole.WebConsoleConstants;
+import org.osgi.framework.Constants;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
@@ -35,6 +36,7 @@ import org.osgi.service.component.annota
*/
@Component(
property = {
+ Constants.SERVICE_VENDOR + "=The Apache Software Foundation",
WebConsoleConstants.PLUGIN_LABEL + "=" +
ScriptingVariablesConsolePlugin.LABEL,
WebConsoleConstants.PLUGIN_TITLE + "=" +
ScriptingVariablesConsolePlugin.TITLE,
"felix.webconsole.category=sling"
@@ -45,12 +47,12 @@ public class ScriptingVariablesConsolePl
protected static final String LABEL = "scriptingvariables";
protected static final String TITLE = "Scripting Variables";
/**
- *
+ *
*/
private static final long serialVersionUID = 261709110347150295L;
-
+
private static final String JS_RES_PATH =
"scriptingvariables/ui/scriptingvariables.js";
-
+
/**
* The script engine manager.
*/
@@ -61,11 +63,11 @@ public class ScriptingVariablesConsolePl
}
/**
- * Automatically called from
+ * Automatically called from
* <a
href="https://github.com/apache/felix/blob/4a60744d0f88f351551e4cb4673eb60b8fbd21d3/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java#L510">AbstractWebConsolePlugin#spoolResource</a>
- *
+ *
* @param path the requested path
- * @return either a URL from which to spool the resource requested through
the given path or {@code null}
+ * @return either a URL from which to spool the resource requested through
the given path or {@code null}
*/
public URL getResource(String path) {
if (path.endsWith(JS_RES_PATH)) {
@@ -92,7 +94,7 @@ public class ScriptingVariablesConsolePl
pw.append("<div id='content'>");
pw.append("<table class='content' cellpadding='0' cellspacing='0'
width='100%'>");
pw.append("<tr><th colspan='3' class='content container'>Sling
Scripting Variables</th></tr>");
- pw.append("<tr class='content'><td class='content' colspan='3'>Provide
a resource path url and script engine (via extension) and then click on
'Retrieve Variables' to expose all script bindings variables for context
'request' which are available for that resource and script engine.</td></tr>");
+ pw.append("<tr class='content'><td class='content' colspan='3'>Provide
a resource path url and script engine (via extension) and then click on
'Retrieve Variables' to expose all script bindings variables for context
'request' which are available for that resource and script engine.</td></tr>");
pw.append("<tr class='content'>");
pw.append("<td class='content'>Resource Url (without selectors and
extension)</td> ");
pw.append("<td class='content' colspan='2'><input type ='text'
name='form.path' placeholder='path' required='required' value='/' ");
Modified:
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/SlingBindingsVariablesListJsonServlet.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/SlingBindingsVariablesListJsonServlet.java?rev=1793000&r1=1792999&r2=1793000&view=diff
==============================================================================
---
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/SlingBindingsVariablesListJsonServlet.java
(original)
+++
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/SlingBindingsVariablesListJsonServlet.java
Fri Apr 28 08:16:18 2017
@@ -28,6 +28,7 @@ import javax.servlet.Servlet;
import javax.servlet.ServletException;
import org.apache.commons.lang.StringUtils;
+import org.apache.felix.utils.json.JSONWriter;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.NonExistingResource;
@@ -37,8 +38,8 @@ import org.apache.sling.api.scripting.Sl
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.apache.sling.scripting.api.BindingsValuesProvider;
import org.apache.sling.scripting.api.BindingsValuesProvidersByContext;
-import org.apache.felix.utils.json.JSONWriter;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
import org.osgi.service.component.ComponentContext;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
@@ -47,12 +48,13 @@ import org.osgi.service.component.annota
/**
* Return all scripting variables for all registered scripting languages for
the default context (=request).
* This can only be achieved when a real Sling request and Sling response is
available.
- * Also the context (i.e. the resource on which the request is acting) is
important,
+ * Also the context (i.e. the resource on which the request is acting) is
important,
* because the actual binding variables might differ depending on the context
*/
@Component(
service = Servlet.class,
property = {
+ Constants.SERVICE_VENDOR + "=The Apache Software Foundation",
"sling.servlet.resourceTypes=sling/servlet/default",
"sling.servlet.selectors=SLING_availablebindings",
"sling.servlet.methods=GET",
@@ -62,7 +64,7 @@ import org.osgi.service.component.annota
public class SlingBindingsVariablesListJsonServlet extends
SlingSafeMethodsServlet {
/**
- *
+ *
*/
private static final long serialVersionUID = -6744726829737263875L;
@@ -71,7 +73,7 @@ public class SlingBindingsVariablesListJ
*/
@Reference
private ScriptEngineManager scriptEngineManager;
-
+
/**
* The BindingsValuesProviderTracker
*/
@@ -134,33 +136,32 @@ public class SlingBindingsVariablesListJ
/**
* Gets the {@link Bindings} object for the given {@link
ScriptEngineFactory}.
* It only considers the default context "request".
- *
+ *
* @see <a href="https://issues.apache.org/jira/browse/SLING-3038">binding
contexts(SLING-3083)</a>
- *
+ *
* @param scriptEngineFactory the factory of the script engine, for which
to retrieve the bindings
* @param request the current request (necessary to create the bindings)
* @param response the current response (necessary to create the bindings)
* @return the bindings (list of key/value pairs) as defined by {@link
Bindings} for the given script engine.
* @throws IOException
- * @throws JSONException
*/
private Bindings getBindingsByEngine(ScriptEngineFactory
scriptEngineFactory, SlingHttpServletRequest request, SlingHttpServletResponse
response) throws IOException {
String context = SlingScriptAdapterFactory.BINDINGS_CONTEXT; // use
default context only
- final Collection<BindingsValuesProvider> bindingsValuesProviders =
+ final Collection<BindingsValuesProvider> bindingsValuesProviders =
bindingsValuesProviderTracker.getBindingsValuesProviders(scriptEngineFactory,
context);
-
+
Resource invalidScriptResource = new
NonExistingResource(request.getResourceResolver(), "some/invalid/scriptpath");
DefaultSlingScript defaultSlingScript = new
DefaultSlingScript(bundleContext, invalidScriptResource,
scriptEngineFactory.getScriptEngine(), bindingsValuesProviders, null, null);
-
+
// prepare the bindings (similar as in DefaultSlingScript#service)
final SlingBindings initalBindings = new SlingBindings();
- initalBindings.setRequest((SlingHttpServletRequest) request);
- initalBindings.setResponse((SlingHttpServletResponse) response);
+ initalBindings.setRequest(request);
+ initalBindings.setResponse(response);
final Bindings bindings =
defaultSlingScript.verifySlingBindings(initalBindings);
-
+
// only thing being added in {DefaultSlingScript#call(...)} is
resource resolver
bindings.put(SlingScriptConstants.ATTR_SCRIPT_RESOURCE_RESOLVER,
request.getResourceResolver());
-
+
return bindings;
}
}
Modified:
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/SlingScriptAdapterFactory.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/SlingScriptAdapterFactory.java?rev=1793000&r1=1792999&r2=1793000&view=diff
==============================================================================
---
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/SlingScriptAdapterFactory.java
(original)
+++
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/SlingScriptAdapterFactory.java
Fri Apr 28 08:16:18 2017
@@ -29,6 +29,7 @@ import org.apache.sling.scripting.api.Bi
import org.apache.sling.scripting.api.ScriptCache;
import org.apache.sling.scripting.core.impl.helper.SlingScriptEngineManager;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
import org.osgi.service.component.ComponentContext;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
@@ -43,8 +44,8 @@ import org.osgi.service.component.annota
MimeTypeProvider.class
},
property = {
- "service.vendor=The Apache Software Foundation",
- "service.description=Default SlingScriptResolver",
+ Constants.SERVICE_VENDOR + "=The Apache Software Foundation",
+ Constants.SERVICE_DESCRIPTION + "=Default SlingScriptResolver",
"adaptables=org.apache.sling.api.resource.Resource",
"adapters=org.apache.sling.api.scripting.SlingScript",
"adapters=javax.servlet.Servlet",
@@ -68,7 +69,7 @@ public class SlingScriptAdapterFactory i
*/
@Reference
private SlingScriptEngineManager scriptEngineManager;
-
+
/**
* The BindingsValuesProviderTracker
*/
@@ -80,6 +81,7 @@ public class SlingScriptAdapterFactory i
// ---------- AdapterFactory
-----------------------------------------------
+ @Override
@SuppressWarnings("unchecked")
public <AdapterType> AdapterType getAdapter(Object adaptable,
Class<AdapterType> type) {
@@ -89,7 +91,7 @@ public class SlingScriptAdapterFactory i
ScriptEngine engine = scriptEngineManager.getEngineByExtension(ext);
if (engine != null) {
- final Collection<BindingsValuesProvider> bindingsValuesProviders =
+ final Collection<BindingsValuesProvider> bindingsValuesProviders =
bindingsValuesProviderTracker.getBindingsValuesProviders(engine.getFactory(),
BINDINGS_CONTEXT);
// unchecked cast
return (AdapterType) new DefaultSlingScript(this.bundleContext,
@@ -113,6 +115,7 @@ public class SlingScriptAdapterFactory i
* name contains no dot, the entire name is considered the
* extension.
*/
+ @Override
public String getMimeType(String name) {
name = name.substring(name.lastIndexOf('.') + 1);
ScriptEngine se = scriptEngineManager.getEngineByExtension(name);
@@ -135,6 +138,7 @@ public class SlingScriptAdapterFactory i
*
* @param mimeType The MIME type to be mapped to an extension.
*/
+ @Override
public String getExtension(String mimeType) {
ScriptEngine se = scriptEngineManager.getEngineByMimeType(mimeType);
if (se != null) {