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 2011/05/02 08:21:14 UTC
svn commit: r1098497 -
/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceListener.java
Author: cziegeler
Date: Mon May 2 06:21:13 2011
New Revision: 1098497
URL: http://svn.apache.org/viewvc?rev=1098497&view=rev
Log:
SLING-2063 : If a node is removed and added in one go, resource added event should be fired
Modified:
sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceListener.java
Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceListener.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceListener.java?rev=1098497&r1=1098496&r2=1098497&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceListener.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceListener.java Mon May 2 06:21:13 2011
@@ -129,24 +129,28 @@ public class JcrResourceListener impleme
while ( events.hasNext() ) {
final Event event = events.nextEvent();
try {
- Map<String, Event> map = null;
- String nodePath = event.getPath();
+ final String eventPath;
+ if ( this.mountPrefix != null ) {
+ eventPath = this.mountPrefix + event.getPath();
+ } else {
+ eventPath = event.getPath();
+ }
if ( event.getType() == Event.PROPERTY_ADDED
|| event.getType() == Event.PROPERTY_REMOVED
|| event.getType() == Event.PROPERTY_CHANGED ) {
- final int lastSlash = nodePath.lastIndexOf('/');
- nodePath = nodePath.substring(0, lastSlash);
- map = changedEvents;
+ final int lastSlash = eventPath.lastIndexOf('/');
+ changedEvents.put(eventPath.substring(0, lastSlash), event);
} else if ( event.getType() == Event.NODE_ADDED ) {
- map = addedEvents;
- } else if ( event.getType() == Event.NODE_REMOVED) {
- map = removedEvents;
- }
- if ( map != null ) {
- if ( this.mountPrefix != null ) {
- map.put(mountPrefix + nodePath, event);
+ // check if this is a remove/add operation
+ if ( removedEvents.containsKey(eventPath) ) {
+ changedEvents.put(eventPath, event);
} else {
- map.put(nodePath, event);
+ addedEvents.put(eventPath, event);
+ }
+ } else if ( event.getType() == Event.NODE_REMOVED) {
+ // check if this is a add/remove operation
+ if ( !addedEvents.containsKey(eventPath) ) {
+ removedEvents.put(eventPath, event);
}
}
} catch (RepositoryException e) {
@@ -155,7 +159,7 @@ public class JcrResourceListener impleme
}
}
- for (Entry<String, Event> e : removedEvents.entrySet()) {
+ for (final Entry<String, Event> e : removedEvents.entrySet()) {
// remove is the strongest operation, therefore remove all removed
// paths from changed and added
addedEvents.remove(e.getKey());
@@ -169,7 +173,7 @@ public class JcrResourceListener impleme
}
// add is stronger than changed
- for (Entry<String, Event> e : addedEvents.entrySet()) {
+ for (final Entry<String, Event> e : addedEvents.entrySet()) {
changedEvents.remove(e.getKey());
// Launch an OSGi event.
@@ -177,7 +181,7 @@ public class JcrResourceListener impleme
}
// Send the changed events.
- for (Entry<String, Event> e : changedEvents.entrySet()) {
+ for (final Entry<String, Event> e : changedEvents.entrySet()) {
// Launch an OSGi event.
sendOsgiEvent(e.getKey(), e.getValue(), SlingConstants.TOPIC_RESOURCE_CHANGED, localEA);
}