Repository: commons-lang Updated Branches: refs/heads/master 49455b78b -> 5b223744b
Add method to DiffBuilder to allow appending from a DiffResult. Project: http://git-wip-us.apache.org/repos/asf/commons-lang/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-lang/commit/f8b1f6e7 Tree: http://git-wip-us.apache.org/repos/asf/commons-lang/tree/f8b1f6e7 Diff: http://git-wip-us.apache.org/repos/asf/commons-lang/diff/f8b1f6e7 Branch: refs/heads/master Commit: f8b1f6e7456a92b8aeb3e0aa8ef88936873dae00 Parents: 49455b7 Author: Nick Manley <nickmanle...@outlook.com> Authored: Sun Jan 24 01:27:30 2016 -0600 Committer: pascalschumacher <pascalschumac...@gmx.net> Committed: Sun May 22 10:30:39 2016 +0200 ---------------------------------------------------------------------- .../commons/lang3/builder/DiffBuilder.java | 53 ++++++++++++++++++++ .../commons/lang3/builder/DiffBuilderTest.java | 12 +++++ 2 files changed, 65 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-lang/blob/f8b1f6e7/src/main/java/org/apache/commons/lang3/builder/DiffBuilder.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/lang3/builder/DiffBuilder.java b/src/main/java/org/apache/commons/lang3/builder/DiffBuilder.java index a5d311c..00fe809 100644 --- a/src/main/java/org/apache/commons/lang3/builder/DiffBuilder.java +++ b/src/main/java/org/apache/commons/lang3/builder/DiffBuilder.java @@ -951,6 +951,59 @@ public class DiffBuilder implements Builder<DiffResult> { /** * <p> + * Append diffs from another {@code DiffResult}. + * </p> + * + * <p> + * This method is useful if you want to compare properties which are + * themselves Diffable and would like to know which specific part of + * it is different. + * </p> + * + * <pre> + * public class Person implements Diffable<Person> { + * String name; + * Address address; // implements Diffable<Address> + * + * ... + * + * public DiffResult diff(Person obj) { + * return new DiffBuilder(this, obj, ToStringStyle.SHORT_PREFIX_STYLE) + * .append("name", this.name, obj.name) + * .append("address", this.address.diff(obj.address)) + * .build(); + * } + * } + * </pre> + * + * @param fieldName + * the field name + * @param diffResult + * the {@code DiffResult} to append + * @return this + */ + public DiffBuilder append(final String fieldName, + final DiffResult diffResult) { + if (fieldName == null) { + throw new IllegalArgumentException("Field name cannot be null"); + } + if (diffResult == null) { + throw new IllegalArgumentException("Diff result cannot be null"); + } + if (objectsTriviallyEqual) { + return this; + } + + for (Diff<?> diff : diffResult.getDiffs()) { + append(fieldName + "." + diff.getFieldName(), + diff.getLeft(), diff.getRight()); + } + + return this; + } + + /** + * <p> * Builds a {@link DiffResult} based on the differences appended to this * builder. * </p> http://git-wip-us.apache.org/repos/asf/commons-lang/blob/f8b1f6e7/src/test/java/org/apache/commons/lang3/builder/DiffBuilderTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/lang3/builder/DiffBuilderTest.java b/src/test/java/org/apache/commons/lang3/builder/DiffBuilderTest.java index 3a8126b..aa53fd1 100644 --- a/src/test/java/org/apache/commons/lang3/builder/DiffBuilderTest.java +++ b/src/test/java/org/apache/commons/lang3/builder/DiffBuilderTest.java @@ -411,6 +411,18 @@ public class DiffBuilderTest { assertEquals(0, list.getNumberOfDiffs()); } + @Test + public void testDiffResult() { + final TypeTestClass class1 = new TypeTestClass(); + final TypeTestClass class2 = new TypeTestClass(); + class2.intField = 2; + + final DiffResult list = new DiffBuilder(class1, class2, SHORT_STYLE) + .append("prop1", class1.diff(class2)) + .build(); + assertEquals(1, list.getNumberOfDiffs()); + assertEquals("prop1.int", list.getDiffs().get(0).getFieldName()); + } @Test(expected=IllegalArgumentException.class) public void testNullLhs() {