You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2013/06/07 15:57:52 UTC
svn commit: r1490653 -
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java
Author: mduerig
Date: Fri Jun 7 13:57:52 2013
New Revision: 1490653
URL: http://svn.apache.org/r1490653
Log:
OAK-775 Implement backward compatible observation
add support for Event.getIdentifier():
- Fix id generation for nodes with a uuid
- Avoid NPE for events on the root node
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java?rev=1490653&r1=1490652&r2=1490653&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java Fri Jun 7 13:57:52 2013
@@ -240,7 +240,7 @@ class ChangeProcessor implements Runnabl
@Override
public boolean propertyAdded(PropertyState after) {
if (filterRef.get().include(Event.PROPERTY_ADDED, jcrPath(), afterParentNode)) {
- Event event = generatePropertyEvent(Event.PROPERTY_ADDED, path, after, parent.getAfterId(name));
+ Event event = generatePropertyEvent(Event.PROPERTY_ADDED, path, after, getAfterId());
events.add(Iterators.singletonIterator(event));
}
return !stopping;
@@ -249,7 +249,7 @@ class ChangeProcessor implements Runnabl
@Override
public boolean propertyChanged(PropertyState before, PropertyState after) {
if (filterRef.get().include(Event.PROPERTY_CHANGED, jcrPath(), afterParentNode)) {
- Event event = generatePropertyEvent(Event.PROPERTY_CHANGED, path, after, parent.getAfterId(name));
+ Event event = generatePropertyEvent(Event.PROPERTY_CHANGED, path, after, getAfterId());
events.add(Iterators.singletonIterator(event));
}
return !stopping;
@@ -258,7 +258,7 @@ class ChangeProcessor implements Runnabl
@Override
public boolean propertyDeleted(PropertyState before) {
if (filterRef.get().include(Event.PROPERTY_REMOVED, jcrPath(), afterParentNode)) {
- Event event = generatePropertyEvent(Event.PROPERTY_REMOVED, path, before, parent.getBeforeId(name));
+ Event event = generatePropertyEvent(Event.PROPERTY_REMOVED, path, before, getBeforeId());
events.add(Iterators.singletonIterator(event));
}
return !stopping;
@@ -268,7 +268,7 @@ class ChangeProcessor implements Runnabl
public boolean childNodeAdded(String name, NodeState after) {
if (filterRef.get().includeChildren(jcrPath())) {
Iterator<Event> events = generateNodeEvents(Event.NODE_ADDED, path, name,
- after, afterParentNode, getAfterId(name));
+ after, afterParentNode, getAfterId(after, name));
this.events.add(events);
if (++childNodeCount > PURGE_LIMIT) {
sendEvents();
@@ -281,7 +281,7 @@ class ChangeProcessor implements Runnabl
public boolean childNodeDeleted(String name, NodeState before) {
if (filterRef.get().includeChildren(jcrPath())) {
Iterator<Event> events = generateNodeEvents(Event.NODE_REMOVED, path, name,
- before, beforeParentNode, getBeforeId(name));
+ before, beforeParentNode, getBeforeId(before, name));
this.events.add(events);
}
return !stopping;
@@ -310,32 +310,53 @@ class ChangeProcessor implements Runnabl
id, null, changes.getDate(), userDataRef.get(), changes.isExternal());
}
- private String getBeforeId(String childName) {
+ private String getRootId() {
+ // FIXME return id of root node if available
+ return "/";
+ }
+
+ private String getBeforeId(NodeState childNode, String childName) {
if (parent == null) {
- return '/' + namePathMapper.getJcrName(childName);
+ return getRootId() + namePathMapper.getJcrName(childName);
}
- PropertyState uuid = beforeParentNode.getProperty(JcrConstants.JCR_UUID);
+ PropertyState uuid = childNode.getProperty(JcrConstants.JCR_UUID);
if (uuid == null) {
- return parent.getBeforeId(name) + '/' + namePathMapper.getJcrName(childName);
+ return parent.getBeforeId(beforeParentNode, name) + '/' + namePathMapper.getJcrName(childName);
}
return uuid.getValue(Type.STRING);
}
- private String getAfterId(String childName) {
+ private String getAfterId(NodeState childNode, String childName) {
if (parent == null) {
- return '/' + namePathMapper.getJcrName(childName);
+ return getRootId() + namePathMapper.getJcrName(childName);
}
- PropertyState uuid = afterParentNode.getProperty(JcrConstants.JCR_UUID);
+ PropertyState uuid = childNode.getProperty(JcrConstants.JCR_UUID);
if (uuid == null) {
- return parent.getAfterId(name) + '/' + namePathMapper.getJcrName(childName);
+ return parent.getAfterId(afterParentNode, name) + '/' + namePathMapper.getJcrName(childName);
}
return uuid.getValue(Type.STRING);
}
+ private String getBeforeId() {
+ if (parent == null) {
+ return getRootId();
+ } else {
+ return parent.getBeforeId(beforeParentNode, name);
+ }
+ }
+
+ private String getAfterId() {
+ if (parent == null) {
+ return getRootId();
+ } else {
+ return parent.getBeforeId(beforeParentNode, name);
+ }
+ }
+
private Event generatePropertyEvent(int eventType, String parentPath, PropertyState property, String id) {
String jcrPath = namePathMapper.getJcrPath(PathUtils.concat(parentPath, property.getName()));
return createEvent(eventType, jcrPath, id);