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&lt;Person&gt; {
+     *   String name;
+     *   Address address; // implements Diffable&lt;Address&gt;
+     *   
+     *   ...
+     *   
+     *   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() {      

Reply via email to