Class DiffRowGenerator


  • public final class DiffRowGenerator
    extends java.lang.Object
    This class for generating DiffRows for side-by-sidy view. You can customize the way of generating. For example, show inline diffs on not, ignoring white spaces or/and blank lines and so on. All parameters for generating are optional. If you do not specify them, the class will use the default values. These values are: showInlineDiffs = false; ignoreWhiteSpaces = true; ignoreBlankLines = true; ... For instantiating the DiffRowGenerator you should use the its builder. Like in example DiffRowGenerator generator = new DiffRowGenerator.Builder().showInlineDiffs(true). ignoreWhiteSpaces(true).columnWidth(100).build();
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      static class  DiffRowGenerator.Builder
      This class used for building the DiffRowGenerator.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private static java.lang.String adjustWhitespace​(java.lang.String raw)  
      private DiffRow buildDiffRow​(DiffRow.Tag type, java.lang.String orgline, java.lang.String newline)  
      private DiffRow buildDiffRowWithoutNormalizing​(DiffRow.Tag type, java.lang.String orgline, java.lang.String newline)  
      static DiffRowGenerator.Builder create()  
      private java.util.List<AbstractDelta<java.lang.String>> decompressDeltas​(AbstractDelta<java.lang.String> delta)
      Decompresses ChangeDeltas with different source and target size to a ChangeDelta with same size and a following InsertDelta or DeleteDelta.
      java.util.List<DiffRow> generateDiffRows​(java.util.List<java.lang.String> original, Patch<java.lang.String> patch)
      Generates the DiffRows describing the difference between original and revised texts using the given patch.
      java.util.List<DiffRow> generateDiffRows​(java.util.List<java.lang.String> original, java.util.List<java.lang.String> revised)
      Get the DiffRows describing the difference between original and revised texts using the given patch.
      private java.util.List<DiffRow> generateInlineDiffs​(AbstractDelta<java.lang.String> delta)
      Add the inline diffs for given delta
      (package private) java.util.List<java.lang.String> normalizeLines​(java.util.List<java.lang.String> list)  
      private java.lang.String preprocessLine​(java.lang.String line)  
      protected static java.util.List<java.lang.String> splitStringPreserveDelimiter​(java.lang.String str, java.util.regex.Pattern SPLIT_PATTERN)  
      private int transformDeltaIntoDiffRow​(java.util.List<java.lang.String> original, int endPos, java.util.List<DiffRow> diffRows, AbstractDelta<java.lang.String> delta)
      Transforms one patch delta into a DiffRow object.
      (package private) static void wrapInTag​(java.util.List<java.lang.String> sequence, int startPosition, int endPosition, DiffRow.Tag tag, java.util.function.BiFunction<DiffRow.Tag,​java.lang.Boolean,​java.lang.String> tagGenerator, java.util.function.Function<java.lang.String,​java.lang.String> processDiffs, boolean replaceLinefeedWithSpace)
      Wrap the elements in the sequence with the given tag
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • DEFAULT_EQUALIZER

        public static final java.util.function.BiPredicate<java.lang.String,​java.lang.String> DEFAULT_EQUALIZER
      • IGNORE_WHITESPACE_EQUALIZER

        public static final java.util.function.BiPredicate<java.lang.String,​java.lang.String> IGNORE_WHITESPACE_EQUALIZER
      • LINE_NORMALIZER_FOR_HTML

        public static final java.util.function.Function<java.lang.String,​java.lang.String> LINE_NORMALIZER_FOR_HTML
      • SPLITTER_BY_CHARACTER

        public static final java.util.function.Function<java.lang.String,​java.util.List<java.lang.String>> SPLITTER_BY_CHARACTER
        Splitting lines by character to achieve char by char diff checking.
      • SPLIT_BY_WORD_PATTERN

        public static final java.util.regex.Pattern SPLIT_BY_WORD_PATTERN
      • SPLITTER_BY_WORD

        public static final java.util.function.Function<java.lang.String,​java.util.List<java.lang.String>> SPLITTER_BY_WORD
        Splitting lines by word to achieve word by word diff checking.
      • WHITESPACE_PATTERN

        public static final java.util.regex.Pattern WHITESPACE_PATTERN
      • columnWidth

        private final int columnWidth
      • equalizer

        private final java.util.function.BiPredicate<java.lang.String,​java.lang.String> equalizer
      • ignoreWhiteSpaces

        private final boolean ignoreWhiteSpaces
      • inlineDiffSplitter

        private final java.util.function.Function<java.lang.String,​java.util.List<java.lang.String>> inlineDiffSplitter
      • mergeOriginalRevised

        private final boolean mergeOriginalRevised
      • newTag

        private final java.util.function.BiFunction<DiffRow.Tag,​java.lang.Boolean,​java.lang.String> newTag
      • oldTag

        private final java.util.function.BiFunction<DiffRow.Tag,​java.lang.Boolean,​java.lang.String> oldTag
      • reportLinesUnchanged

        private final boolean reportLinesUnchanged
      • lineNormalizer

        private final java.util.function.Function<java.lang.String,​java.lang.String> lineNormalizer
      • processDiffs

        private final java.util.function.Function<java.lang.String,​java.lang.String> processDiffs
      • showInlineDiffs

        private final boolean showInlineDiffs
      • replaceOriginalLinefeedInChangesWithSpaces

        private final boolean replaceOriginalLinefeedInChangesWithSpaces
      • decompressDeltas

        private final boolean decompressDeltas
    • Method Detail

      • adjustWhitespace

        private static java.lang.String adjustWhitespace​(java.lang.String raw)
      • splitStringPreserveDelimiter

        protected static final java.util.List<java.lang.String> splitStringPreserveDelimiter​(java.lang.String str,
                                                                                             java.util.regex.Pattern SPLIT_PATTERN)
      • wrapInTag

        static void wrapInTag​(java.util.List<java.lang.String> sequence,
                              int startPosition,
                              int endPosition,
                              DiffRow.Tag tag,
                              java.util.function.BiFunction<DiffRow.Tag,​java.lang.Boolean,​java.lang.String> tagGenerator,
                              java.util.function.Function<java.lang.String,​java.lang.String> processDiffs,
                              boolean replaceLinefeedWithSpace)
        Wrap the elements in the sequence with the given tag
        Parameters:
        startPosition - the position from which tag should start. The counting start from a zero.
        endPosition - the position before which tag should should be closed.
        tagGenerator - the tag generator
      • generateDiffRows

        public java.util.List<DiffRow> generateDiffRows​(java.util.List<java.lang.String> original,
                                                        java.util.List<java.lang.String> revised)
        Get the DiffRows describing the difference between original and revised texts using the given patch. Useful for displaying side-by-side diff.
        Parameters:
        original - the original text
        revised - the revised text
        Returns:
        the DiffRows between original and revised texts
      • generateDiffRows

        public java.util.List<DiffRow> generateDiffRows​(java.util.List<java.lang.String> original,
                                                        Patch<java.lang.String> patch)
        Generates the DiffRows describing the difference between original and revised texts using the given patch. Useful for displaying side-by-side diff.
        Parameters:
        original - the original text
        patch - the given patch
        Returns:
        the DiffRows between original and revised texts
      • transformDeltaIntoDiffRow

        private int transformDeltaIntoDiffRow​(java.util.List<java.lang.String> original,
                                              int endPos,
                                              java.util.List<DiffRow> diffRows,
                                              AbstractDelta<java.lang.String> delta)
        Transforms one patch delta into a DiffRow object.
      • decompressDeltas

        private java.util.List<AbstractDelta<java.lang.String>> decompressDeltas​(AbstractDelta<java.lang.String> delta)
        Decompresses ChangeDeltas with different source and target size to a ChangeDelta with same size and a following InsertDelta or DeleteDelta. With this problems of building DiffRows getting smaller.
        Parameters:
        deltaList -
      • buildDiffRow

        private DiffRow buildDiffRow​(DiffRow.Tag type,
                                     java.lang.String orgline,
                                     java.lang.String newline)
      • buildDiffRowWithoutNormalizing

        private DiffRow buildDiffRowWithoutNormalizing​(DiffRow.Tag type,
                                                       java.lang.String orgline,
                                                       java.lang.String newline)
      • normalizeLines

        java.util.List<java.lang.String> normalizeLines​(java.util.List<java.lang.String> list)
      • generateInlineDiffs

        private java.util.List<DiffRow> generateInlineDiffs​(AbstractDelta<java.lang.String> delta)
        Add the inline diffs for given delta
        Parameters:
        delta - the given delta
      • preprocessLine

        private java.lang.String preprocessLine​(java.lang.String line)