private boolean processAdd(@Nullable Tree parent, @NotNull String name , @NotNull MoveAwarePermissionValidator validator) throws CommitFailedException { if (parent == null) { return false; } Tree child = parent.getChild(name); String sourcePath = moveTracker.getSourcePath(child.getPath()); if (sourcePath != null) { Tree source = rootBefore.getTree(sourcePath); if (source.exists()) { // check permissions for adding the moved node at the target location. validator.checkPermissions(child, false, Permissions.ADD_NODE | Permissions.NODE_TYPE_MANAGEMENT); checkPermissions(source, Permissions.REMOVE_NODE); return diff(source, child, validator); } } return false; }
private boolean processAdd(@Nullable Tree parent, @NotNull String name , @NotNull MoveAwarePermissionValidator validator) throws CommitFailedException { if (parent == null) { return false; } Tree child = parent.getChild(name); String sourcePath = moveTracker.getSourcePath(child.getPath()); if (sourcePath != null) { Tree source = rootBefore.getTree(sourcePath); if (source.exists()) { // check permissions for adding the moved node at the target location. validator.checkPermissions(child, false, Permissions.ADD_NODE | Permissions.NODE_TYPE_MANAGEMENT); checkPermissions(source, Permissions.REMOVE_NODE); return diff(source, child, validator); } } return false; }
void assertResult() { // map destination -> original path for (String dest : src2dest.values()) { String expectedOrgSource = dest2orig.get(dest); assertEquals(expectedOrgSource, mt.getSourcePath(dest)); } // map original path -> destination for (String original : orig2dest.keySet()) { assertEquals(orig2dest.get(original), mt.getDestPath(original)); } } }
private boolean processAdd(@CheckForNull Tree parent, @Nonnull String name , @Nonnull MoveAwarePermissionValidator validator) throws CommitFailedException { if (parent == null) { return false; } ImmutableTree child = (ImmutableTree) parent.getChild(name); String sourcePath = moveTracker.getSourcePath(child.getPath()); if (sourcePath != null) { ImmutableTree source = (ImmutableTree) rootBefore.getTree(sourcePath); if (source.exists()) { // check permissions for adding the moved node at the target location. validator.checkPermissions(child, false, Permissions.ADD_NODE | Permissions.NODE_TYPE_MANAGEMENT); checkPermissions(source, Permissions.REMOVE_NODE); return diff(source, child, validator); } } return false; }
@Test public void testIndependantMoves() { Map<String, String> m = ImmutableMap.of( "/a/b/c", "/d/e/f", "/aa/bb/cc", "/aa/f/cc" ); MoveTracker mt = new MoveTracker(); for (String src : m.keySet()) { String dest = m.get(src); mt.addMove(src, dest); } for (String src : m.keySet()) { String dest = m.get(src); assertEquals(src, mt.getSourcePath(dest)); assertEquals(dest, mt.getDestPath(src)); } }
@Test public void testSingleMove() { Map<String, String> moves = ImmutableMap.of( "/a/b/c", "/d/e/f", "/aa/bb/cc", "/aa/f/cc" ); for (String src : moves.keySet()) { MoveTracker mt = new MoveTracker(); String dest = moves.get(src); mt.addMove(src, dest); assertEquals(src, mt.getSourcePath(dest)); assertEquals(dest, mt.getDestPath(src)); } }
/** * 7. >/a:/b >/c:/a does not commute * See http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeLog.java?view=markup * Line 231 */ @Test public void test7() { MoveTracker mt3 = new MoveTracker(); mt3.addMove("/a", "/b"); mt3.addMove("/c", "/a"); assertEquals("/a", mt3.getSourcePath("/b")); assertEquals("/c", mt3.getSourcePath("/a")); assertEquals("/b", mt3.getDestPath("/a")); assertEquals("/a", mt3.getDestPath("/c")); }
/** * 14. >/a:/b >/c:/b/d = >/c:/a/d >/a:/b * See http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeLog.java?view=markup * Line 240 */ @Test public void test14() { MoveTracker mt5 = new MoveTracker(); mt5.addMove("/a", "/b"); mt5.addMove("/c", "/b/d"); assertEquals("/a", mt5.getSourcePath("/b")); assertEquals("/c", mt5.getSourcePath("/b/d")); assertEquals("/b", mt5.getDestPath("/a")); assertEquals("/b/d", mt5.getDestPath("/c")); }
/** * 10. >/a:/b >/b/c:/d = >/a/c:/d >/a:/b * See http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeLog.java?view=markup * Line 234 */ @Test public void test10() { MoveTracker mt = new MoveTracker(); mt.addMove("/a", "/b"); mt.addMove("/b/c", "/d"); assertEquals("/a", mt.getSourcePath("/b")); assertEquals("/a/c", mt.getSourcePath("/d")); assertEquals("/b", mt.getDestPath("/a")); assertEquals("/d", mt.getDestPath("/a/c")); }
/** * 1. >/a:/b >/c:/d = >/c:/d >/a:b * See http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeLog.java?view=markup * Line 222 */ @Test public void test1() { MoveTracker mt = new MoveTracker(); mt.addMove("/a", "/b"); mt.addMove("/c", "/d"); assertEquals("/a", mt.getSourcePath("/b")); assertEquals("/c", mt.getSourcePath("/d")); assertEquals("/b", mt.getDestPath("/a")); assertEquals("/d", mt.getDestPath("/c")); }
/** * 4. >/a/b:/c >/a:/d = >/a:/d >/d/b:/c * See http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeLog.java?view=markup * Line 225 */ @Test public void test4() { MoveTracker mt1 = new MoveTracker(); mt1.addMove("/a/b", "/c"); mt1.addMove("/a", "/d"); assertEquals("/a/b", mt1.getSourcePath("/c")); assertEquals("/a", mt1.getSourcePath("/d")); assertEquals("/c", mt1.getDestPath("/a/b")); assertEquals("/d", mt1.getDestPath("/a")); }
/** * 4. >/a/b:/c >/a:/c/d does not commute (q < s) * See http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeLog.java?view=markup * Line 226 */ @Test public void test4a() { MoveTracker mt2 = new MoveTracker(); mt2.addMove("/a/b", "/c"); mt2.addMove("/a", "/c/d"); assertEquals("/a/b", mt2.getSourcePath("/c")); assertEquals("/a", mt2.getSourcePath("/c/d")); assertEquals("/c", mt2.getDestPath("/a/b")); assertEquals("/c/d", mt2.getDestPath("/a")); }
/** * 14. >/a/b:/b >/a:/b/d does not commute (p > r) * See http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeLog.java?view=markup * Line 241 */ @Test public void test14a() { MoveTracker mt6 = new MoveTracker(); mt6.addMove("/a/b", "/b"); mt6.addMove("/a", "/b/d"); assertEquals("/a/b", mt6.getSourcePath("/b")); assertEquals("/a", mt6.getSourcePath("/b/d")); assertEquals("/b", mt6.getDestPath("/a/b")); assertEquals("/b/d", mt6.getDestPath("/a")); }
/** * 12. >/a:/b/c >/b:/d = >/b:/d >/a:/d/c * See http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeLog.java?view=markup * Line 237 */ @Test @Ignore("Known Limitation of OAK-710") public void test12() { MoveTracker mt4 = new MoveTracker(); mt4.addMove("/a", "/b/c"); mt4.addMove("/b", "/d"); assertEquals("/a", mt4.getSourcePath("/d/c")); assertEquals("/b", mt4.getSourcePath("/d")); assertEquals("/d/c", mt4.getDestPath("/a")); assertEquals("/d", mt4.getDestPath("/b")); }
/** * 11. >/a:/b >/b:/c = >/a:/c * See http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-microkernel/src/main/java/org/apache/jackrabbit/state/ChangeLog.java?view=markup * Line 236 */ @Test public void test11() { MoveTracker mt = new MoveTracker(); mt.addMove("/a", "/b"); mt.addMove("/b", "/c"); assertEquals("/a", mt.getSourcePath("/c")); assertEquals("/c", mt.getDestPath("/a")); }