Author: stefanegli
Date: Wed Sep 21 14:46:59 2016
New Revision: 1761756

URL: http://svn.apache.org/viewvc?rev=1761756&view=rev
Log:
SLING-5995 : changing IdMapService from being an OSGi EventListener to a Sling 
ResourceChangeListener

Modified:
    sling/trunk/bundles/extensions/discovery/commons/pom.xml
    
sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/IdMapService.java
    
sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/package-info.java
    
sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/MockedResourceResolver.java
    sling/trunk/bundles/extensions/discovery/oak/pom.xml

Modified: sling/trunk/bundles/extensions/discovery/commons/pom.xml
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons/pom.xml?rev=1761756&r1=1761755&r2=1761756&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/commons/pom.xml (original)
+++ sling/trunk/bundles/extensions/discovery/commons/pom.xml Wed Sep 21 
14:46:59 2016
@@ -119,8 +119,8 @@
                <dependency>
                        <groupId>org.apache.sling</groupId>
                        <artifactId>org.apache.sling.api</artifactId>
-                       <version>2.4.0</version>
-            <scope>provided</scope>
+                       <version>2.10.0</version>
+                       <scope>provided</scope>
                </dependency>
                <dependency>
                        <groupId>org.apache.sling</groupId>
@@ -161,7 +161,9 @@
         </dependency>
         <dependency>
             <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
+            <artifactId>osgi.core</artifactId>
+            <version>6.0.0</version>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.osgi</groupId>

Modified: 
sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/IdMapService.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/IdMapService.java?rev=1761756&r1=1761755&r2=1761756&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/IdMapService.java
 (original)
+++ 
sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/IdMapService.java
 Wed Sep 21 14:46:59 2016
@@ -22,6 +22,7 @@ import java.util.Dictionary;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Hashtable;
+import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -31,7 +32,6 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Deactivate;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.Service;
-import org.apache.sling.api.SlingConstants;
 import org.apache.sling.api.resource.LoginException;
 import org.apache.sling.api.resource.ModifiableValueMap;
 import org.apache.sling.api.resource.PersistenceException;
@@ -39,6 +39,9 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.api.resource.observation.ResourceChangeListener;
+import org.apache.sling.api.resource.observation.ResourceChange;
+import org.apache.sling.api.resource.observation.ResourceChange.ChangeType;
 import org.apache.sling.commons.json.JSONException;
 import org.apache.sling.discovery.commons.providers.util.ResourceHelper;
 import org.apache.sling.settings.SlingSettingsService;
@@ -46,8 +49,6 @@ import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.event.Event;
-import org.osgi.service.event.EventConstants;
-import org.osgi.service.event.EventHandler;
 
 /**
  * The IdMapService is responsible for storing a slingId-clusterNodeId
@@ -56,7 +57,7 @@ import org.osgi.service.event.EventHandl
  */
 @Component(immediate = false)
 @Service(value = { IdMapService.class })
-public class IdMapService extends AbstractServiceWithBackgroundCheck 
implements EventHandler {
+public class IdMapService extends AbstractServiceWithBackgroundCheck 
implements ResourceChangeListener {
 
     @Reference
     private ResourceResolverFactory resourceResolverFactory;
@@ -80,7 +81,7 @@ public class IdMapService extends Abstra
 
     private BundleContext bundleContext;
 
-    private ServiceRegistration eventHandlerRegistration;
+    private volatile ServiceRegistration<ResourceChangeListener> 
eventHandlerRegistration;
     
     /** test-only constructor **/
     public static IdMapService testConstructor(
@@ -131,18 +132,16 @@ public class IdMapService extends Abstra
         }
         Dictionary<String,Object> properties = new Hashtable<String,Object>();
         properties.put(Constants.SERVICE_DESCRIPTION, "IdMap Change 
Listener.");
+        properties.put(Constants.SERVICE_VENDOR, "The Apache Software 
Foundation");
         String[] topics = new String[] {
-                SlingConstants.TOPIC_RESOURCE_ADDED,
-                SlingConstants.TOPIC_RESOURCE_CHANGED,
-                SlingConstants.TOPIC_RESOURCE_REMOVED };
-        properties.put(EventConstants.EVENT_TOPIC, topics);
-        String path = getIdMapPath();
-        if (path.endsWith("/")) {
-            path = path.substring(0, path.length()-1);
-        }
-        properties.put(EventConstants.EVENT_FILTER, "(&(path="+path+"))");
-        eventHandlerRegistration = bundleContext.registerService(
-                EventHandler.class.getName(), this, properties);
+                ChangeType.ADDED.toString(),
+                ChangeType.CHANGED.toString(),
+                ChangeType.REMOVED.toString()
+                };
+        properties.put(ResourceChangeListener.CHANGES, topics);
+        properties.put(ResourceChangeListener.PATHS, getIdMapPath());
+
+        this.eventHandlerRegistration = 
bundleContext.registerService(ResourceChangeListener.class, this, properties);
     }
 
     /** Get or create a ResourceResolver **/
@@ -318,18 +317,11 @@ public class IdMapService extends Abstra
     }
 
     @Override
-    public void handleEvent(Event event) {
-        final String resourcePath = (String) event.getProperty("path");
-        if (resourcePath == null) {
-            // not of my business
-            return;
-        }
-        
-        if (!resourcePath.startsWith(getIdMapPath())) {
-            // not of my business
-            return;
-        }
-        logger.debug("handleEvent: got event for path: {}, event: {}", 
resourcePath, event);
+    public void onChange(List<ResourceChange> changes) {
+        // the listener is registered on the .../idmap subpath, so any
+        // change it receives should be relevant. hence no further
+        // filtering necessary here.
+        logger.debug("onChange: got notified of changes, clearing cache.");
         clearCache();
     }
 

Modified: 
sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/package-info.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/package-info.java?rev=1761756&r1=1761755&r2=1761756&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/package-info.java
 (original)
+++ 
sling/trunk/bundles/extensions/discovery/commons/src/main/java/org/apache/sling/discovery/commons/providers/spi/base/package-info.java
 Wed Sep 21 14:46:59 2016
@@ -20,9 +20,9 @@
 /**
  * Provides default SPI-implementations used by 
discovery.commons.providers.impl
  *
- * @version 1.0.0
+ * @version 2.0.0
  */
-@Version("1.0.0")
+@Version("2.0.0")
 package org.apache.sling.discovery.commons.providers.spi.base;
 
 import aQute.bnd.annotation.Version;

Modified: 
sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/MockedResourceResolver.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/MockedResourceResolver.java?rev=1761756&r1=1761755&r2=1761756&view=diff
==============================================================================
--- 
sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/MockedResourceResolver.java
 (original)
+++ 
sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/MockedResourceResolver.java
 Wed Sep 21 14:46:59 2016
@@ -326,4 +326,24 @@ public class MockedResourceResolver impl
 
     }
 
+    @Override
+    public Resource getParent(Resource child) {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    @Override
+    public boolean hasChildren(Resource resource) {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    @Override
+    public Resource copy(String srcAbsPath, String destAbsPath) throws 
PersistenceException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    @Override
+    public Resource move(String srcAbsPath, String destAbsPath) throws 
PersistenceException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
 }

Modified: sling/trunk/bundles/extensions/discovery/oak/pom.xml
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/oak/pom.xml?rev=1761756&r1=1761755&r2=1761756&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/oak/pom.xml (original)
+++ sling/trunk/bundles/extensions/discovery/oak/pom.xml Wed Sep 21 14:46:59 
2016
@@ -151,7 +151,7 @@
                <dependency>
                        <groupId>org.apache.sling</groupId>
                        
<artifactId>org.apache.sling.discovery.commons</artifactId>
-                       <version>1.0.10</version>
+                       <version>1.0.13-SNAPSHOT</version>
             <scope>provided</scope>
                </dependency>
         <!-- besides including discovery.commons' normal jar above, 
@@ -160,7 +160,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.discovery.commons</artifactId>
-            <version>1.0.10</version>
+            <version>1.0.13-SNAPSHOT</version>
             <scope>test</scope>
             <type>test-jar</type>
         </dependency>
@@ -183,7 +183,7 @@
                <dependency>
                        <groupId>org.apache.sling</groupId>
                        <artifactId>org.apache.sling.api</artifactId>
-                       <version>2.4.0</version>
+                       <version>2.10.0</version>
             <scope>provided</scope>
                </dependency>
         <dependency>


Reply via email to