@Test public void testRenameEvents() { Resource src = store.get("DirA"); Resource dest = store.get("DirB"); List<Event> events = SimpleResourceNotificationDispatcher.createRenameEvents(src, dest); assertEquals(6, events.size()); Set<String> set = new HashSet<String>(); set.add("DirB"); set.add("DirB/FileA1"); set.add("DirB/FileA2"); set.add("DirB/DirC"); set.add("DirB/DirC/FileC1"); set.add("DirB/DirC/FileC2"); for (Event event : events) { String path = event.getPath(); assertEquals( path.equals("DirB") || path.equals("DirB/FileA2") ? Kind.ENTRY_MODIFY : Kind.ENTRY_CREATE, event.getKind()); assertTrue(set.remove(path)); } assertTrue(set.isEmpty()); }
List<Event> events = new ArrayList<Event>(); events.add(new ResourceNotification.Event(resource.path(), kind)); events.add(new ResourceNotification.Event(child.path(), kind)); Resource parent = resource.parent(); while (parent != null && !Resources.exists(parent)) { events.add(new ResourceNotification.Event(parent.path(), kind)); parent = parent.parent();
event.getPath().startsWith(CONFIG_DIR_NAME) ? event.getPath() : CONFIG_DIR_NAME + "/" + event.getPath(); repoId = idFromPath(path); LOGGER.finer( "Processing event " + event.getKind() + " for repo " + repoId + thread); switch (event.getKind()) { case ENTRY_CREATE: LOGGER.finer( "Finished processing event " + event.getKind() + " for repo " + repoId
assertTrue(timeStamp > before); Event e = listener.getNotify().events().get(0); assertEquals(Kind.ENTRY_MODIFY, e.getKind()); assertEquals("DirC/FileD", e.getPath()); assertEquals(Paths.BASE, listener.getNotify().getPath()); e = listener.getNotify().events().get(0); assertEquals(Kind.ENTRY_DELETE, e.getKind()); assertEquals("FileA", e.getPath()); assertEquals(Paths.BASE, listener.getNotify().getPath()); e = listener.getNotify().events().get(0); assertEquals(Kind.ENTRY_CREATE, e.getKind()); assertEquals("FileA", e.getPath());
assertEquals(1, n.events().size()); Event e = n.events().get(0); assertEquals(Kind.ENTRY_MODIFY, e.getKind()); assertEquals("FileB", e.getPath()); assertEquals(Paths.BASE, n.getPath()); e = n.events().get(0); assertEquals(Kind.ENTRY_DELETE, e.getKind()); assertEquals("FileA", e.getPath()); assertEquals(Paths.BASE, n.getPath()); e = n.events().get(0); assertEquals(Kind.ENTRY_CREATE, e.getKind()); assertEquals("FileA", e.getPath());
@Override public boolean renameTo(Resource dest) { List<ResourceNotification.Event> eventsDelete = SimpleResourceNotificationDispatcher.createEvents( this, ResourceNotification.Kind.ENTRY_DELETE); List<ResourceNotification.Event> eventsRename = SimpleResourceNotificationDispatcher.createRenameEvents(this, dest); boolean result; if (dest instanceof JDBCResource) { result = entry.renameTo(((JDBCResource) dest).entry); } else { result = Resources.renameByCopy(this, dest); } if (result) { resourceNotificationDispatcher.changed( new ResourceNotification( path(), ResourceNotification.Kind.ENTRY_DELETE, System.currentTimeMillis(), eventsDelete)); resourceNotificationDispatcher.changed( new ResourceNotification( path(), eventsRename.get(0).getKind(), System.currentTimeMillis(), eventsRename)); } return result; }
@Test public void testRenameEvents() { Resource src = store.get("DirA"); Resource dest = store.get("DirB"); List<Event> events = SimpleResourceNotificationDispatcher.createRenameEvents(src, dest); assertEquals(6, events.size()); Set<String> set = new HashSet<String>(); set.add("DirB"); set.add("DirB/FileA1"); set.add("DirB/FileA2"); set.add("DirB/DirC"); set.add("DirB/DirC/FileC1"); set.add("DirB/DirC/FileC2"); for (Event event : events) { String path = event.getPath(); assertEquals( path.equals("DirB") || path.equals("DirB/FileA2") ? Kind.ENTRY_MODIFY : Kind.ENTRY_CREATE, event.getKind()); assertTrue(set.remove(path)); } assertTrue(set.isEmpty()); }
@Test public void testDeleteEvents() { Resource res = store.get("DirA"); List<Event> events = SimpleResourceNotificationDispatcher.createEvents(res, Kind.ENTRY_DELETE); assertEquals(6, events.size()); Set<String> set = new HashSet<String>(); set.add("DirA"); set.add("DirA/FileA1"); set.add("DirA/FileA2"); set.add("DirA/DirC"); set.add("DirA/DirC/FileC1"); set.add("DirA/DirC/FileC2"); for (Event event : events) { assertEquals(Kind.ENTRY_DELETE, event.getKind()); assertTrue(set.remove(event.getPath())); } assertTrue(set.isEmpty()); }
@Test public void testCreateEvents() { Resource res = store.get("DirD/DirE/DirF/FileQ"); List<Event> events = SimpleResourceNotificationDispatcher.createEvents(res, Kind.ENTRY_CREATE); assertEquals(4, events.size()); Set<String> set = new HashSet<String>(); set.add("DirD"); set.add("DirD/DirE"); set.add("DirD/DirE/DirF"); set.add("DirD/DirE/DirF/FileQ"); for (Event event : events) { assertEquals(Kind.ENTRY_CREATE, event.getKind()); assertTrue(set.remove(event.getPath())); } assertTrue(set.isEmpty()); } }
assertEquals(1, n.events().size()); Event e = n.events().get(0); assertEquals(Kind.ENTRY_MODIFY, e.getKind()); assertEquals("FileB", e.getPath()); assertEquals(Paths.BASE, n.getPath()); e = n.events().get(0); assertEquals(Kind.ENTRY_DELETE, e.getKind()); assertEquals("FileA", e.getPath()); assertEquals(Paths.BASE, n.getPath()); e = n.events().get(0); assertEquals(Kind.ENTRY_CREATE, e.getKind()); assertEquals("FileA", e.getPath());
if (!notification.getPath().equals(event.getPath())) { changedInternal( new ResourceNotification( event.getPath(), Kind.ENTRY_DELETE, notification.getTimestamp(), if (notification.getKind() == Kind.ENTRY_CREATE) { for (Event event : notification.events()) { if (!notification.getPath().equals(event.getPath())) { createdParents.add(event.getPath());
/** * Helper method to create all create/modify events caused by a rename/move operation. (delete * events must be created separately.) This method should be called just before the action takes * place in order to analyze the effects properly. * * <p>Rename/move causes children to be moved as well. * * @param src Resource being renamed * @param dest Target resource after renatmed * @return List of notification events covering all the modified Resources */ public static List<Event> createRenameEvents(Resource src, Resource dest) { List<Event> events = new ArrayList<Event>(); events.add( new ResourceNotification.Event( dest.path(), Resources.exists(dest) ? Kind.ENTRY_MODIFY : Kind.ENTRY_CREATE)); for (Resource child : Resources.listRecursively(src)) { Resource newChild = dest.get(child.path().substring(src.path().length() + 1)); events.add( new ResourceNotification.Event( newChild.path(), Resources.exists(newChild) ? Kind.ENTRY_MODIFY : Kind.ENTRY_CREATE)); } return events; } }
assertEquals("DirB", dirEvent.get().getPath()); assertEquals(2, dirEvent.get().events().size()); assertEquals(Kind.ENTRY_CREATE, dirEvent.get().events().get(0).getKind()); assertEquals("DirNew/FileNew", dirEvent.get().events().get(0).getPath()); assertEquals(Kind.ENTRY_CREATE, dirEvent.get().events().get(1).getKind()); assertEquals("DirNew", dirEvent.get().events().get(1).getPath());
@Test public void testDeleteEvents() { Resource res = store.get("DirA"); List<Event> events = SimpleResourceNotificationDispatcher.createEvents(res, Kind.ENTRY_DELETE); assertEquals(6, events.size()); Set<String> set = new HashSet<String>(); set.add("DirA"); set.add("DirA/FileA1"); set.add("DirA/FileA2"); set.add("DirA/DirC"); set.add("DirA/DirC/FileC1"); set.add("DirA/DirC/FileC2"); for (Event event : events) { assertEquals(Kind.ENTRY_DELETE, event.getKind()); assertTrue(set.remove(event.getPath())); } assertTrue(set.isEmpty()); }
@Test public void testCreateEvents() { Resource res = store.get("DirD/DirE/DirF/FileQ"); List<Event> events = SimpleResourceNotificationDispatcher.createEvents(res, Kind.ENTRY_CREATE); assertEquals(4, events.size()); Set<String> set = new HashSet<String>(); set.add("DirD"); set.add("DirD/DirE"); set.add("DirD/DirE/DirF"); set.add("DirD/DirE/DirF/FileQ"); for (Event event : events) { assertEquals(Kind.ENTRY_CREATE, event.getKind()); assertTrue(set.remove(event.getPath())); } assertTrue(set.isEmpty()); }
private List<Event> relative(List<Event> events, String path) { // FileSystemResourceStore sends events with relative paths, // so we must do as well List<Event> result = new ArrayList<Event>(); for (Event event : events) { result.add(new Event(event.getPath().replace(path + "/", ""), event.getKind())); } return result; }