@Override public int compare(DiffEntry left, DiffEntry right) { final NodeRef nodeRef1 = left.oldObject().or(left.newObject()).get(); final NodeRef nodeRef2 = right.oldObject().or(right.newObject()).get(); if (nodeRef1.getType().equals(nodeRef2.getType())) { return CanonicalNodeOrder.INSTANCE.compare(nodeRef1.getNode(), nodeRef2.getNode()); } // one is a tree, the other a feature. // the tree comes first if it's a feature's parent boolean leftIsRightsParent = NodeRef.isChild(nodeRef1.path()/* parent */, nodeRef2.path()/* child */); if (leftIsRightsParent) { return -1; } boolean rightIsLeftsParent = NodeRef.isDirectChild(nodeRef2.path()/* parent */, nodeRef1.path()/* child */); if (rightIsLeftsParent) { return 1; } // feature wins (got a new tree on one end while all features of the previous tree // haven't been consumed) return nodeRef1.getType() == TYPE.FEATURE ? -1 : 1; } };
assertEquals(nodeRef.path(), entry.oldPath()); assertEquals(null, entry.getNewObject()); assertFalse(entry.newObject().isPresent()); assertEquals(ObjectId.NULL, entry.newObjectId()); assertEquals(ObjectId.NULL, entry.newMetadataId()); assertEquals(null, entry.oldPath()); assertEquals(nodeRef, entry.getNewObject()); assertEquals(nodeRef, entry.newObject().get()); assertEquals(node.getObjectId(), entry.newObjectId()); assertEquals(node.getMetadataId().get(), entry.newMetadataId()); assertEquals(nodeRef.path(), entry.oldPath()); assertEquals(nodeRef2, entry.getNewObject()); assertEquals(nodeRef2, entry.newObject().get()); assertEquals(node2.getObjectId(), entry.newObjectId()); assertEquals(node2.getMetadataId().get(), entry.newMetadataId());