diff --git a/libraries-5/pom.xml b/libraries-5/pom.xml index 06b1b32ad51b..fde731809405 100644 --- a/libraries-5/pom.xml +++ b/libraries-5/pom.xml @@ -219,6 +219,11 @@ restfb ${com.restfb.version} + + io.github.java-diff-utils + java-diff-utils + ${java-diff-utils.version} + @@ -238,6 +243,7 @@ 1.327 2025.6.0 3.4 + 4.12 diff --git a/libraries-5/src/main/java/com/baeldung/javadiffutils/PatchUtil.java b/libraries-5/src/main/java/com/baeldung/javadiffutils/PatchUtil.java new file mode 100644 index 000000000000..e681d91662bb --- /dev/null +++ b/libraries-5/src/main/java/com/baeldung/javadiffutils/PatchUtil.java @@ -0,0 +1,13 @@ +package com.baeldung.javadiffutils; + +import com.github.difflib.DiffUtils; +import com.github.difflib.patch.PatchFailedException; + +import java.util.List; + +public class PatchUtil { + public static List apply(List original, List revised) throws PatchFailedException { + var patch = DiffUtils.diff(original, revised); + return DiffUtils.patch(original, patch); + } +} diff --git a/libraries-5/src/main/java/com/baeldung/javadiffutils/SideBySideViewUtil.java b/libraries-5/src/main/java/com/baeldung/javadiffutils/SideBySideViewUtil.java new file mode 100644 index 000000000000..86526ff20393 --- /dev/null +++ b/libraries-5/src/main/java/com/baeldung/javadiffutils/SideBySideViewUtil.java @@ -0,0 +1,21 @@ +package com.baeldung.javadiffutils; + +import com.github.difflib.DiffUtils; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class SideBySideViewUtil { + + private static final Logger logger = Logger.getLogger(SideBySideViewUtil.class.getName()); + + public static void display(List original, List revised) + { + var patch = DiffUtils.diff(original, revised); + patch.getDeltas().forEach(delta -> { + logger.log(Level.INFO,"Change: " + delta.getType()); + logger.log(Level.INFO,"Original: " + delta.getSource().getLines()); + logger.log(Level.INFO,"Revised: " + delta.getTarget().getLines()); + }); + } +} diff --git a/libraries-5/src/main/java/com/baeldung/javadiffutils/TextComparatorUtil.java b/libraries-5/src/main/java/com/baeldung/javadiffutils/TextComparatorUtil.java new file mode 100644 index 000000000000..427b01aa3d37 --- /dev/null +++ b/libraries-5/src/main/java/com/baeldung/javadiffutils/TextComparatorUtil.java @@ -0,0 +1,11 @@ +package com.baeldung.javadiffutils; + +import com.github.difflib.DiffUtils; +import com.github.difflib.patch.Patch; +import java.util.List; + +public class TextComparatorUtil { + public static Patch compare(List original, List revised) { + return DiffUtils.diff(original, revised); + } +} diff --git a/libraries-5/src/main/java/com/baeldung/javadiffutils/UnifiedDiffGeneratorUtil.java b/libraries-5/src/main/java/com/baeldung/javadiffutils/UnifiedDiffGeneratorUtil.java new file mode 100644 index 000000000000..2d0d9a6432bd --- /dev/null +++ b/libraries-5/src/main/java/com/baeldung/javadiffutils/UnifiedDiffGeneratorUtil.java @@ -0,0 +1,13 @@ +package com.baeldung.javadiffutils; + +import com.github.difflib.DiffUtils; +import com.github.difflib.UnifiedDiffUtils; + +import java.util.List; + +public class UnifiedDiffGeneratorUtil { + public static List generate(List original, List revised, String fileName) { + var patch = DiffUtils.diff(original, revised); + return UnifiedDiffUtils.generateUnifiedDiff(fileName, fileName + ".new", original, patch, 3); + } +} diff --git a/libraries-5/src/test/java/com/baeldung/javadiffutils/PatchUtilTest.java b/libraries-5/src/test/java/com/baeldung/javadiffutils/PatchUtilTest.java new file mode 100644 index 000000000000..d87240698c19 --- /dev/null +++ b/libraries-5/src/test/java/com/baeldung/javadiffutils/PatchUtilTest.java @@ -0,0 +1,18 @@ +package com.baeldung.javadiffutils; + +import com.github.difflib.patch.PatchFailedException; +import org.junit.Test; +import java.util.List; +import static org.junit.Assert.assertEquals; + +public class PatchUtilTest { + @Test + public void givenPatch_whenApplied_thenMatchesRevised() throws PatchFailedException { + var original = List.of("alpha", "beta", "gamma"); + var revised = List.of("alpha", "beta-updated", "gamma"); + + var result = PatchUtil.apply(original, revised); + + assertEquals(revised, result); + } +} diff --git a/libraries-5/src/test/java/com/baeldung/javadiffutils/SideBySideViewUtilTest.java b/libraries-5/src/test/java/com/baeldung/javadiffutils/SideBySideViewUtilTest.java new file mode 100644 index 000000000000..6508a18f6466 --- /dev/null +++ b/libraries-5/src/test/java/com/baeldung/javadiffutils/SideBySideViewUtilTest.java @@ -0,0 +1,17 @@ +package com.baeldung.javadiffutils; + +import org.junit.Test; + +import java.util.List; + +public class SideBySideViewUtilTest { + + @Test + public void givenDifferentLists_whenDisplayCalled_thenNoExceptionThrown() { + List original = List.of("line1", "line2", "line3"); + List revised = List.of("line1", "line2-modified", "line3", "line4"); + + SideBySideViewUtil.display(original, revised); + } + +} diff --git a/libraries-5/src/test/java/com/baeldung/javadiffutils/TextComparatorUtilTest.java b/libraries-5/src/test/java/com/baeldung/javadiffutils/TextComparatorUtilTest.java new file mode 100644 index 000000000000..ee7112f8b3c6 --- /dev/null +++ b/libraries-5/src/test/java/com/baeldung/javadiffutils/TextComparatorUtilTest.java @@ -0,0 +1,21 @@ +package com.baeldung.javadiffutils; + +import org.junit.Test; + +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class TextComparatorUtilTest { + @Test + public void givenDifferentLines_whenCompared_thenDetectsChanges() { + var original = List.of("A", "B", "C"); + var revised = List.of("A", "B", "D"); + + var patch = TextComparatorUtil.compare(original, revised); + + assertEquals(1, patch.getDeltas().size()); + assertEquals("C", patch.getDeltas().get(0).getSource().getLines().get(0)); + assertEquals("D", patch.getDeltas().get(0).getTarget().getLines().get(0)); + } +} diff --git a/libraries-5/src/test/java/com/baeldung/javadiffutils/UnifiedDiffGeneratorUtilTest.java b/libraries-5/src/test/java/com/baeldung/javadiffutils/UnifiedDiffGeneratorUtilTest.java new file mode 100644 index 000000000000..db5db7f2e10e --- /dev/null +++ b/libraries-5/src/test/java/com/baeldung/javadiffutils/UnifiedDiffGeneratorUtilTest.java @@ -0,0 +1,20 @@ +package com.baeldung.javadiffutils; + +import org.junit.Test; + +import java.util.List; + +import static org.junit.Assert.assertTrue; + +public class UnifiedDiffGeneratorUtilTest { + @Test + public void givenModifiedText_whenUnifiedDiffGenerated_thenContainsExpectedChanges() { + var original = List.of("x", "y", "z"); + var revised = List.of("x", "y-modified", "z"); + + var diff = UnifiedDiffGeneratorUtil.generate(original, revised, "test.txt"); + + assertTrue(diff.stream().anyMatch(line -> line.contains("-y"))); + assertTrue(diff.stream().anyMatch(line -> line.contains("+y-modified"))); + } +}