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; }
@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()); }
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()); } }
@Override public void changed(ResourceNotification notify) { for (Event event : notify.events()) { if (event.getKind() == ResourceNotification.Kind.ENTRY_DELETE && event.getPath().equals(resource.name())) { // clean up deleted resources expanded.remove(resource.path()); } } } }
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());
@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()); }
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());