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 2015/10/30 08:24:46 UTC

svn commit: r1711411 - in /sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/observation: ResourceChangeListenerInfo.java ResourceChangeListenerWhiteboard.java

Author: cziegeler
Date: Fri Oct 30 07:24:46 2015
New Revision: 1711411

URL: http://svn.apache.org/viewvc?rev=1711411&view=rev
Log:
Clean up code and log warning if listener is not used

Modified:
    sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/observation/ResourceChangeListenerInfo.java
    sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/observation/ResourceChangeListenerWhiteboard.java

Modified: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/observation/ResourceChangeListenerInfo.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/observation/ResourceChangeListenerInfo.java?rev=1711411&r1=1711410&r2=1711411&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/observation/ResourceChangeListenerInfo.java (original)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/observation/ResourceChangeListenerInfo.java Fri Oct 30 07:24:46 2015
@@ -23,6 +23,7 @@ import static org.apache.sling.api.resou
 import static org.apache.sling.commons.osgi.PropertiesUtil.toStringArray;
 
 import java.util.Collections;
+import java.util.EnumSet;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Set;
@@ -33,8 +34,15 @@ import org.apache.sling.api.resource.obs
 import org.apache.sling.api.resource.observation.ResourceChangeListener;
 import org.osgi.framework.ServiceReference;
 
+/**
+ * Information about a resource change listener.
+ */
 public class ResourceChangeListenerInfo {
 
+    private static final Set<ChangeType> DEFAULT_CHANGE_TYPES = EnumSet.of(ChangeType.ADDED, ChangeType.REMOVED, ChangeType.CHANGED);
+
+    private static final Set<ChangeType> DEFAULT_CHANGE_PROVIDER_TYPES = EnumSet.of(ChangeType.PROVIDER_ADDED, ChangeType.PROVIDER_REMOVED);
+
     private final PathSet paths;
 
     private final Set<ChangeType> resourceChangeTypes;
@@ -88,41 +96,40 @@ public class ResourceChangeListenerInfo
             }
         }
         this.paths = PathSet.fromStringCollection(pathsSet);
-        final Set<ChangeType> typesSet = new HashSet<ChangeType>();
         if (ref.getProperty(CHANGES) != null ) {
-            for (String changeName : toStringArray(ref.getProperty(CHANGES))) {
+            final Set<ChangeType> rts = new HashSet<ChangeType>();
+            final Set<ChangeType> pts = new HashSet<ChangeType>();
+            for (final String changeName : toStringArray(ref.getProperty(CHANGES))) {
                 try {
-                    typesSet.add(ChangeType.valueOf(changeName));
+                    final ChangeType ct = ChangeType.valueOf(changeName);
+                    if ( ct.ordinal() < ChangeType.PROVIDER_ADDED.ordinal()) {
+                        rts.add(ct);
+                    } else {
+                        pts.add(ct);
+                    }
                 } catch ( final IllegalArgumentException iae) {
                     configValid = false;
                 }
             }
+            if ( rts.isEmpty() ) {
+                this.resourceChangeTypes = Collections.emptySet();
+            } else if ( rts.size() == 3 ) {
+                this.resourceChangeTypes = DEFAULT_CHANGE_TYPES;
+            } else {
+                this.resourceChangeTypes = Collections.unmodifiableSet(rts);
+            }
+            if ( pts.isEmpty() ) {
+                this.providerChangeTypes = Collections.emptySet();
+            } else if ( pts.size() == 2 ) {
+                this.providerChangeTypes = DEFAULT_CHANGE_PROVIDER_TYPES;
+            } else {
+                this.providerChangeTypes = Collections.unmodifiableSet(pts);
+            }
         } else {
             // default is added, changed, removed
-            typesSet.add(ChangeType.ADDED);
-            typesSet.add(ChangeType.CHANGED);
-            typesSet.add(ChangeType.REMOVED);
-        }
-        final Set<ChangeType> rts = new HashSet<ChangeType>();
-        if ( typesSet.contains(ChangeType.ADDED)) {
-            rts.add(ChangeType.ADDED);
-        }
-        if ( typesSet.contains(ChangeType.CHANGED)) {
-            rts.add(ChangeType.CHANGED);
-        }
-        if ( typesSet.contains(ChangeType.REMOVED)) {
-            rts.add(ChangeType.REMOVED);
-        }
-        this.resourceChangeTypes = Collections.unmodifiableSet(rts);
-
-        final Set<ChangeType> pts = new HashSet<ChangeType>();
-        if ( typesSet.contains(ChangeType.PROVIDER_ADDED)) {
-            pts.add(ChangeType.PROVIDER_ADDED);
-        }
-        if ( typesSet.contains(ChangeType.PROVIDER_REMOVED)) {
-            pts.add(ChangeType.PROVIDER_REMOVED);
+            this.resourceChangeTypes = DEFAULT_CHANGE_TYPES;
+            this.providerChangeTypes = Collections.emptySet();
         }
-        this.providerChangeTypes = Collections.unmodifiableSet(pts);
 
         this.valid = configValid;
     }

Modified: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/observation/ResourceChangeListenerWhiteboard.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/observation/ResourceChangeListenerWhiteboard.java?rev=1711411&r1=1711410&r2=1711411&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/observation/ResourceChangeListenerWhiteboard.java (original)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/observation/ResourceChangeListenerWhiteboard.java Fri Oct 30 07:24:46 2015
@@ -35,12 +35,16 @@ import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 import org.osgi.util.tracker.ServiceTracker;
 import org.osgi.util.tracker.ServiceTrackerCustomizer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Tracker component for the resource change listeners.
  */
 public class ResourceChangeListenerWhiteboard implements ResourceProviderTracker.ObservationReporterGenerator {
 
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
     private final Map<ServiceReference, ResourceChangeListenerInfo> listeners = new ConcurrentHashMap<ServiceReference, ResourceChangeListenerInfo>();
 
     private volatile ResourceProviderTracker resourceProviderTracker;
@@ -81,6 +85,8 @@ public class ResourceChangeListenerWhite
                         listeners.put(reference, info);
                         updateProviderTracker();
                     }
+                } else {
+                    logger.warn("Ignoring invalid resource change listenr {}", reference);
                 }
                 return reference;
             }