use of javax.jcr.observation.Event in project sling by apache.
the class SuperimposingManagerImplTest method prepareNodeMoveEvent.
private EventIterator prepareNodeMoveEvent(Resource pResource, String pOldPath) throws RepositoryException {
String resourcePath = pResource.getPath();
Event nodeRemoveEvent = mock(Event.class);
when(nodeRemoveEvent.getType()).thenReturn(Event.NODE_REMOVED);
when(nodeRemoveEvent.getPath()).thenReturn(pOldPath);
Event nodeCreateEvent = mock(Event.class);
when(nodeCreateEvent.getType()).thenReturn(Event.NODE_ADDED);
when(nodeCreateEvent.getPath()).thenReturn(resourcePath);
EventIterator eventIterator = mock(EventIterator.class);
when(eventIterator.hasNext()).thenReturn(true, true, false);
when(eventIterator.nextEvent()).thenReturn(nodeRemoveEvent, nodeCreateEvent);
return eventIterator;
}
use of javax.jcr.observation.Event in project sling by apache.
the class SuperimposingManagerImplTest method prepareNodeCreateEvent.
private EventIterator prepareNodeCreateEvent(Resource pResource) throws RepositoryException {
String resourcePath = pResource.getPath();
Event nodeEvent = mock(Event.class);
when(nodeEvent.getType()).thenReturn(Event.NODE_ADDED);
when(nodeEvent.getPath()).thenReturn(resourcePath);
Event propertyEvent = mock(Event.class);
when(propertyEvent.getType()).thenReturn(Event.PROPERTY_ADDED);
when(propertyEvent.getPath()).thenReturn(resourcePath + "/" + SuperimposingResourceProvider.PROP_SUPERIMPOSE_SOURCE_PATH);
EventIterator eventIterator = mock(EventIterator.class);
when(eventIterator.hasNext()).thenReturn(true, true, false);
when(eventIterator.nextEvent()).thenReturn(nodeEvent, propertyEvent);
return eventIterator;
}
use of javax.jcr.observation.Event in project sling by apache.
the class SuperimposingManagerImplTest method prepareNodeRemoveEvent.
private EventIterator prepareNodeRemoveEvent(Resource pResource) throws RepositoryException {
String resourcePath = pResource.getPath();
Event nodeEvent = mock(Event.class);
when(nodeEvent.getType()).thenReturn(Event.NODE_REMOVED);
when(nodeEvent.getPath()).thenReturn(resourcePath);
EventIterator eventIterator = mock(EventIterator.class);
when(eventIterator.hasNext()).thenReturn(true, false);
when(eventIterator.nextEvent()).thenReturn(nodeEvent);
return eventIterator;
}
use of javax.jcr.observation.Event in project jackrabbit-oak by apache.
the class CompatibilityIssuesTest method noEventsForTouchedProperties.
/**
* OAK-948 - JR2 generates propertyChange event for touched properties while Oak does not
*/
@Test
public void noEventsForTouchedProperties() throws RepositoryException, InterruptedException {
final String testNodeName = "test_touched_node";
final String testNodePath = '/' + testNodeName;
// Create the test node
Session session = getAdminSession();
Node testNode = session.getRootNode().addNode(testNodeName);
testNode.setProperty("foo", "bar");
testNode.setProperty("foo2", "bar0");
session.save();
Session observingSession = createAdminSession();
ObservationManager observationManager = observingSession.getWorkspace().getObservationManager();
try {
final List<Event> events = new ArrayList<Event>();
final CountDownLatch latch = new CountDownLatch(1);
EventListener listener = new EventListener() {
@Override
public void onEvent(EventIterator eventIt) {
while (eventIt.hasNext()) {
events.add(eventIt.nextEvent());
}
if (!events.isEmpty()) {
latch.countDown();
}
}
};
observationManager.addEventListener(listener, PROPERTY_CHANGED, testNodePath, true, null, null, false);
// Now touch foo and modify foo2
session.getNode(testNodePath).setProperty("foo", "bar");
session.getNode(testNodePath).setProperty("foo2", "bar2");
session.save();
latch.await(60, TimeUnit.SECONDS);
// Only one event is recorded for foo2 modification
assertEquals(1, events.size());
} finally {
observingSession.logout();
}
}
use of javax.jcr.observation.Event in project jackrabbit-oak by apache.
the class JackrabbitNodeTest method _testRenameEventHandling.
// Ignore("OAK-3658")
public void _testRenameEventHandling() throws RepositoryException, InterruptedException {
Session s = getHelper().getSuperuserSession();
ObservationManager mgr = s.getWorkspace().getObservationManager();
final List<Event> events = newArrayList();
final CountDownLatch latch1 = new CountDownLatch(1);
final CountDownLatch latch2 = new CountDownLatch(1);
try {
mgr.addEventListener(new EventListener() {
CountDownLatch latch = latch1;
@Override
public void onEvent(EventIterator eventIterator) {
synchronized (events) {
while (eventIterator.hasNext()) {
events.add(eventIterator.nextEvent());
}
latch.countDown();
latch = latch2;
}
}
}, Event.PERSIST | Event.NODE_ADDED | Event.NODE_MOVED | Event.NODE_REMOVED, testRootNode.getPath(), true, null, null, false);
NodeIterator it = testRootNode.getNodes();
Node n = it.nextNode();
String name = n.getName();
JackrabbitNode node = (JackrabbitNode) n;
node.rename(name + 'X');
superuser.save();
StringBuilder diags = new StringBuilder();
if (!latch1.await(60, SECONDS)) {
diags.append("latch1 timed out ");
}
boolean foundMove = false;
synchronized (events) {
for (Event event : events) {
if (diags.length() != 0) {
diags.append(", ");
}
diags.append("type " + event.getType() + " " + event.getDate() + "ms " + event.getPath());
if (Event.NODE_MOVED == event.getType()) {
foundMove = true;
break;
}
}
if (events.isEmpty()) {
diags.append("none");
}
}
if (!foundMove) {
// force another event, wait some more
testRootNode.addNode(name + "XYZ");
superuser.save();
StringBuffer addDiags = new StringBuffer();
if (!latch2.await(60, SECONDS)) {
addDiags.append("latch2 timed out ");
}
synchronized (events) {
for (Event event : events) {
if (addDiags.length() != 0) {
addDiags.append(", ");
}
addDiags.append("type " + event.getType() + " " + event.getDate() + "ms " + event.getPath());
}
}
if (addDiags.length() > 0) {
diags.append("; next event after additional addNode/save operation: " + addDiags);
}
}
if (!foundMove) {
fail("Expected NODE_MOVED event upon renaming a node (received: " + diags + ")");
}
} finally {
s.logout();
}
}
Aggregations