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 2009/07/02 11:45:54 UTC

svn commit: r790523 - in /sling/trunk/bundles: api/src/main/java/org/apache/sling/api/SlingConstants.java scripting/core/pom.xml scripting/core/src/main/java/org/apache/sling/scripting/core/impl/SlingScriptAdapterFactory.java scripting/jsp/pom.xml

Author: cziegeler
Date: Thu Jul  2 09:45:54 2009
New Revision: 790523

URL: http://svn.apache.org/viewvc?rev=790523&view=rev
Log:
SLING-1030 : Send events when a new script engine factory is added or an old one is removed.

Modified:
    sling/trunk/bundles/api/src/main/java/org/apache/sling/api/SlingConstants.java
    sling/trunk/bundles/scripting/core/pom.xml
    sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/SlingScriptAdapterFactory.java
    sling/trunk/bundles/scripting/jsp/pom.xml

Modified: sling/trunk/bundles/api/src/main/java/org/apache/sling/api/SlingConstants.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/api/src/main/java/org/apache/sling/api/SlingConstants.java?rev=790523&r1=790522&r2=790523&view=diff
==============================================================================
--- sling/trunk/bundles/api/src/main/java/org/apache/sling/api/SlingConstants.java (original)
+++ sling/trunk/bundles/api/src/main/java/org/apache/sling/api/SlingConstants.java Thu Jul  2 09:45:54 2009
@@ -238,4 +238,68 @@
      * @since 2.0.6
      */
     public static final String PROPERTY_ADAPTER_CLASSES = "adapters";
+
+    /**
+     * The topic for the OSGi event which is sent when a script engine factory has been added.
+     * The event contains at least the {@link #PROPERTY_SCRIPT_ENGINE_FACTORY_NAME},
+     * {@link #PROPERTY_SCRIPT_ENGINE_FACTORY_VERSION},
+     * {@link #PROPERTY_SCRIPT_ENGINE_FACTORY_EXTENSIONS},
+     * {@link #PROPERTY_SCRIPT_ENGINE_FACTORY_LANGUAGE_NAME},
+     * {@link #PROPERTY_SCRIPT_ENGINE_FACTORY_LANGUAGE_VERSION},
+     * and {@link #PROPERTY_SCRIPT_ENGINE_FACTORY_MIME_TYPES} poperties.
+     * @since 2.0.6
+     */
+    public static final String TOPIC_SCRIPT_ENGINE_FACTORY_ADDED = "javax/script/ScriptEngineFactory/ADDED";
+
+    /**
+     * The topic for the OSGi event which is sent when a script engine factory has been removed.
+     * The event contains at least the {@link #PROPERTY_SCRIPT_ENGINE_FACTORY_NAME},
+     * {@link #PROPERTY_SCRIPT_ENGINE_FACTORY_VERSION},
+     * {@link #PROPERTY_SCRIPT_ENGINE_FACTORY_EXTENSIONS},
+     * {@link #PROPERTY_SCRIPT_ENGINE_FACTORY_LANGUAGE_NAME},
+     * {@link #PROPERTY_SCRIPT_ENGINE_FACTORY_LANGUAGE_VERSION},
+     * and {@link #PROPERTY_SCRIPT_ENGINE_FACTORY_MIME_TYPES} poperties.
+     * @since 2.0.6
+     */
+    public static final String TOPIC_SCRIPT_ENGINE_FACTORY_REMOVED = "javax/script/ScriptEngineFactory/REMOVED";
+
+    /**
+     * The event property listing the script engine factory name. The value is a string.
+     * @since 2.0.6
+     */
+    public static final String PROPERTY_SCRIPT_ENGINE_FACTORY_NAME = "engineName";
+
+    /**
+     * The event property listing the script engine factory name. The value is a string.
+     * @since 2.0.6
+     */
+    public static final String PROPERTY_SCRIPT_ENGINE_FACTORY_VERSION = "engineVersion";
+
+    /**
+     * The event property listing the script engine factory extensions. The value is
+     * a string array.
+     * @since 2.0.6
+     */
+    public static final String PROPERTY_SCRIPT_ENGINE_FACTORY_EXTENSIONS = "extensions";
+
+    /**
+     * The event property listing the script engine factory language. The value is
+     * a string.
+     * @since 2.0.6
+     */
+    public static final String PROPERTY_SCRIPT_ENGINE_FACTORY_LANGUAGE_NAME = "languageName";
+
+    /**
+     * The event property listing the script engine factory language version. The value is
+     * a string.
+     * @since 2.0.6
+     */
+    public static final String PROPERTY_SCRIPT_ENGINE_FACTORY_LANGUAGE_VERSION = "languageVersion";
+
+    /**
+     * The event property listing the script engine factory mime types. The value is
+     * a string array.
+     * @since 2.0.6
+     */
+    public static final String PROPERTY_SCRIPT_ENGINE_FACTORY_MIME_TYPES = "mimeTypes";
 }

Modified: sling/trunk/bundles/scripting/core/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/core/pom.xml?rev=790523&r1=790522&r2=790523&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/core/pom.xml (original)
+++ sling/trunk/bundles/scripting/core/pom.xml Thu Jul  2 09:45:54 2009
@@ -124,7 +124,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.api</artifactId>
-            <version>2.0.2-incubator</version>
+            <version>2.0.5-SNAPSHOT</version>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>

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=790523&r1=790522&r2=790523&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 Thu Jul  2 09:45:54 2009
@@ -22,6 +22,8 @@
 import java.io.InputStreamReader;
 import java.net.URL;
 import java.util.Collection;
+import java.util.Dictionary;
+import java.util.Hashtable;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.SortedSet;
@@ -31,6 +33,7 @@
 import javax.script.ScriptEngineFactory;
 import javax.script.ScriptEngineManager;
 
+import org.apache.sling.api.SlingConstants;
 import org.apache.sling.api.adapter.AdapterFactory;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.commons.mime.MimeTypeProvider;
@@ -40,13 +43,16 @@
 import org.osgi.framework.BundleEvent;
 import org.osgi.framework.BundleListener;
 import org.osgi.service.component.ComponentContext;
+import org.osgi.service.event.Event;
+import org.osgi.service.event.EventAdmin;
+import org.osgi.util.tracker.ServiceTracker;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
  * AdapterFactory that adapts Resources to the DefaultSlingScript servlet, which
  * executes the Resources as scripts.
- * 
+ *
  * @scr.component metatype="no" immediate="true"
  * @scr.property name="service.vendor" value="The Apache Software Foundation"
  * @scr.property name="service.description" value="Default SlingScriptResolver"
@@ -82,6 +88,10 @@
 
     private BundleContext bundleContext;
 
+    /** The service tracker for the event admin
+     */
+    private ServiceTracker eventAdminTracker;
+
     // ---------- AdapterFactory -----------------------------------------------
 
     @SuppressWarnings("unchecked")
@@ -215,7 +225,7 @@
      * name. If no ScriptEngineFactory is registered for the given extension or
      * the registered ScriptEngineFactory is not registered for a MIME type,
      * this method returns <code>null</code>.
-     * 
+     *
      * @param name The name whose extension is to be mapped to a MIME type. The
      *            extension is the string after the last dot in the name. If the
      *            name contains no dot, the entire name is considered the
@@ -240,7 +250,7 @@
      * ScriptEngineFactory is registered for the given MIME type or the
      * registered ScriptEngineFactory is not registered for an extensions, this
      * method returns <code>null</code>.
-     * 
+     *
      * @param mimeType The MIME type to be mapped to an extension.
      */
     public String getExtension(String mimeType) {
@@ -258,6 +268,11 @@
     // ---------- SCR integration ----------------------------------------------
 
     protected void activate(ComponentContext context) {
+        // setup tracker first as this is used in the bind/unbind methods
+        this.eventAdminTracker = new ServiceTracker(context.getBundleContext(),
+                EventAdmin.class.getName(), null);
+        this.eventAdminTracker.open();
+
         this.bundleContext = context.getBundleContext();
         this.bundleContext.addBundleListener(this);
 
@@ -290,19 +305,54 @@
         engineSpiBundles.clear();
         engineSpiServices.clear();
         scriptEngineManager = null;
+        if ( this.eventAdminTracker != null ) {
+            this.eventAdminTracker.close();
+            this.eventAdminTracker = null;
+        }
         this.bundleContext = null;
     }
 
+    /**
+     * Get the event admin.
+     * @return The event admin or <code>null</code>
+     */
+    private EventAdmin getEventAdmin() {
+        return (EventAdmin) (this.eventAdminTracker != null ? this.eventAdminTracker.getService() : null);
+    }
+
+    @SuppressWarnings("unchecked")
+    private String[] toArray(List list) {
+        return (String[])list.toArray(new String[list.size()]);
+    }
+
+    private void postEvent(final String topic, final ScriptEngineFactory scriptEngineFactory) {
+        final EventAdmin localEA = this.getEventAdmin();
+        if ( localEA != null ) {
+            final Dictionary<String, Object> props = new Hashtable<String, Object>();
+            props.put(SlingConstants.PROPERTY_SCRIPT_ENGINE_FACTORY_NAME, scriptEngineFactory.getEngineName());
+            props.put(SlingConstants.PROPERTY_SCRIPT_ENGINE_FACTORY_VERSION, scriptEngineFactory.getEngineVersion());
+            props.put(SlingConstants.PROPERTY_SCRIPT_ENGINE_FACTORY_EXTENSIONS, toArray(scriptEngineFactory.getExtensions()));
+            props.put(SlingConstants.PROPERTY_SCRIPT_ENGINE_FACTORY_LANGUAGE_NAME, scriptEngineFactory.getLanguageName());
+            props.put(SlingConstants.PROPERTY_SCRIPT_ENGINE_FACTORY_LANGUAGE_VERSION, scriptEngineFactory.getLanguageVersion());
+            props.put(SlingConstants.PROPERTY_SCRIPT_ENGINE_FACTORY_MIME_TYPES, toArray(scriptEngineFactory.getMimeTypes()));
+            localEA.postEvent(new Event(topic, props));
+        }
+    }
+
     protected void bindScriptEngineFactory(
             ScriptEngineFactory scriptEngineFactory) {
         engineSpiServices.add(scriptEngineFactory);
         scriptEngineManager = null;
+        // send event
+        postEvent(SlingConstants.TOPIC_SCRIPT_ENGINE_FACTORY_ADDED, scriptEngineFactory);
     }
 
     protected void unbindScriptEngineFactory(
             ScriptEngineFactory scriptEngineFactory) {
         engineSpiServices.remove(scriptEngineFactory);
         scriptEngineManager = null;
+        // send event
+        postEvent(SlingConstants.TOPIC_SCRIPT_ENGINE_FACTORY_REMOVED, scriptEngineFactory);
     }
 
 }

Modified: sling/trunk/bundles/scripting/jsp/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp/pom.xml?rev=790523&r1=790522&r2=790523&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/jsp/pom.xml (original)
+++ sling/trunk/bundles/scripting/jsp/pom.xml Thu Jul  2 09:45:54 2009
@@ -28,7 +28,7 @@
     </parent>
 
     <artifactId>org.apache.sling.scripting.jsp</artifactId>
-    <version>2.0.7-SNAPSHOT</version>
+    <version>2.0.7-tlp-790463</version>
     <packaging>bundle</packaging>
 
     <name>Apache Sling Scripting JSP Support</name>