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:33 UTC
svn commit: r1490652 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java
oak-jcr/pom.xml
Author: mduerig
Date: Fri Jun 7 13:57:32 2013
New Revision: 1490652
URL: http://svn.apache.org/r1490652
Log:
OAK-775 Implement backward compatible observation
add support for Event.getIdentifier(): also provide id for children of added nodes
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java
jackrabbit/oak/trunk/oak-jcr/pom.xml
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=1490652&r1=1490651&r2=1490652&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:32 2013
@@ -267,7 +267,8 @@ class ChangeProcessor implements Runnabl
@Override
public boolean childNodeAdded(String name, NodeState after) {
if (filterRef.get().includeChildren(jcrPath())) {
- Iterator<Event> events = generateNodeEvents(Event.NODE_ADDED, path, name, after, getAfterId(name));
+ Iterator<Event> events = generateNodeEvents(Event.NODE_ADDED, path, name,
+ after, afterParentNode, getAfterId(name));
this.events.add(events);
if (++childNodeCount > PURGE_LIMIT) {
sendEvents();
@@ -279,7 +280,8 @@ class ChangeProcessor implements Runnabl
@Override
public boolean childNodeDeleted(String name, NodeState before) {
if (filterRef.get().includeChildren(jcrPath())) {
- Iterator<Event> events = generateNodeEvents(Event.NODE_REMOVED, path, name, before, getBeforeId(name));
+ Iterator<Event> events = generateNodeEvents(Event.NODE_REMOVED, path, name,
+ before, beforeParentNode, getBeforeId(name));
this.events.add(events);
}
return !stopping;
@@ -303,7 +305,7 @@ class ChangeProcessor implements Runnabl
}
private EventImpl createEvent(int eventType, String jcrPath, String id) {
- // TODO support identifier, info
+ // TODO support info
return new EventImpl(ChangeProcessor.this, eventType, jcrPath, changes.getUserId(),
id, null, changes.getDate(), userDataRef.get(), changes.isExternal());
}
@@ -340,14 +342,14 @@ class ChangeProcessor implements Runnabl
}
private Iterator<Event> generateNodeEvents(int eventType, String parentPath, String childName,
- NodeState node, String id) {
+ NodeState node, NodeState parentNode, final String id) {
EventFilter filter = filterRef.get();
final String path = PathUtils.concat(parentPath, childName);
String jcrParentPath = namePathMapper.getJcrPath(parentPath);
String jcrPath = namePathMapper.getJcrPath(path);
Iterator<Event> nodeEvent;
- if (filter.include(eventType, jcrParentPath, afterParentNode)) {
+ if (filter.include(eventType, jcrParentPath, parentNode)) {
Event event = createEvent(eventType, jcrPath, id);
nodeEvent = Iterators.singletonIterator(event);
} else {
@@ -359,7 +361,7 @@ class ChangeProcessor implements Runnabl
: Event.PROPERTY_REMOVED;
Iterator<Event> propertyEvents;
- if (filter.include(propertyEventType, jcrPath, afterParentNode)) {
+ if (filter.include(propertyEventType, jcrPath, parentNode)) {
propertyEvents = Iterators.transform(
Iterators.filter(
node.getProperties().iterator(),
@@ -372,7 +374,7 @@ class ChangeProcessor implements Runnabl
new Function<PropertyState, Event>() {
@Override
public Event apply(PropertyState property) {
- return generatePropertyEvent(propertyEventType, path, property, "TODO"); // FIXME
+ return generatePropertyEvent(propertyEventType, path, property, id);
}
});
} else {
@@ -380,26 +382,38 @@ class ChangeProcessor implements Runnabl
}
Iterator<Event> childNodeEvents = filter.includeChildren(jcrPath)
- ? Iterators.concat(generateChildEvents(eventType, path, node))
+ ? Iterators.concat(generateChildEvents(eventType, path, node, id))
: Iterators.<Event>emptyIterator();
return Iterators.concat(nodeEvent, propertyEvents, childNodeEvents);
}
- // FIXME this doesn't correctly track the associated parent node
- private Iterator<Iterator<Event>> generateChildEvents(final int eventType, final String parentPath, NodeState node) {
+ private Iterator<Iterator<Event>> generateChildEvents(final int eventType, final String parentPath,
+ final NodeState parentNode, final String parentId) {
return Iterators.transform(
- Iterators.filter(node.getChildNodeEntries().iterator(),
- new Predicate<ChildNodeEntry>() {
- @Override
- public boolean apply(ChildNodeEntry entry) {
- return !NodeStateUtils.isHidden(entry.getName());
- }
- }),
+ Iterators.filter(parentNode.getChildNodeEntries().iterator(),
+ new Predicate<ChildNodeEntry>() {
+ @Override
+ public boolean apply(ChildNodeEntry entry) {
+ return !NodeStateUtils.isHidden(entry.getName());
+ }
+ }),
new Function<ChildNodeEntry, Iterator<Event>>() {
@Override
public Iterator<Event> apply(ChildNodeEntry entry) {
- return generateNodeEvents(eventType, parentPath, entry.getName(), entry.getNodeState(), "TODO"); // FIXME
+ NodeState node = entry.getNodeState();
+ String name = entry.getName();
+ return generateNodeEvents(eventType, parentPath, name,
+ node, parentNode, getId(parentId, node, name));
+ }
+
+ private String getId(String parentId, NodeState node, String name) {
+ PropertyState uuid = node.getProperty(JcrConstants.JCR_UUID);
+ if (uuid == null) {
+ return parentId + '/' + namePathMapper.getJcrName(name);
+ } else {
+ return uuid.getValue(Type.STRING);
+ }
}
});
}
Modified: jackrabbit/oak/trunk/oak-jcr/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/pom.xml?rev=1490652&r1=1490651&r2=1490652&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-jcr/pom.xml Fri Jun 7 13:57:32 2013
@@ -226,7 +226,6 @@
org.apache.jackrabbit.test.api.observation.NodeMovedTest#testMoveTree
org.apache.jackrabbit.test.api.observation.NodeMovedTest#testMoveWithRemove
org.apache.jackrabbit.test.api.observation.GetIdentifierTest#testNodeMoved
- org.apache.jackrabbit.test.api.observation.GetIdentifierTest#testPropertyAdded
org.apache.jackrabbit.test.api.observation.LockingTest#testAddLockToNode
org.apache.jackrabbit.test.api.observation.LockingTest#testRemoveLockFromNode
<!-- Versioning -->