All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.fitbur.assertj.util.diff.Delta Maven / Gradle / Ivy

There is a newer version: 1.0.0
Show newest version
/**
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 *
 * Copyright 2012-2016 the original author or authors.
 */
package com.fitbur.assertj.util.diff;

import static com.fitbur.assertj.util.GroupFormatUtil.DEFAULT_END;
import static com.fitbur.assertj.util.GroupFormatUtil.DEFAULT_START;
import static com.fitbur.assertj.util.GroupFormatUtil.ELEMENT_SEPARATOR_WITH_NEWLINE;

import java.util.List;

import com.fitbur.assertj.presentation.StandardRepresentation;
import com.fitbur.assertj.util.IterableUtil;

/**
 * Initially copied from https://code.google.com/p/java-diff-utils/.
 * 

* Describes the delta between original and revised texts. * * @author Dmitry Naumenko * @param The type of the compared elements in the 'lines'. */ public abstract class Delta { /** The original chunk. */ private Chunk original; /** The revised chunk. */ private Chunk revised; /** * Specifies the type of the delta. * */ public enum TYPE { /** A change in the original. */ CHANGE, /** A delete from the original. */ DELETE, /** An insert into the original. */ INSERT } /** * Construct the delta for original and revised chunks * * @param original Chunk describing the original text. Must not be {@code null}. * @param revised Chunk describing the revised text. Must not be {@code null}. */ public Delta(Chunk original, Chunk revised) { if (original == null) { throw new IllegalArgumentException("original must not be null"); } if (revised == null) { throw new IllegalArgumentException("revised must not be null"); } this.original = original; this.revised = revised; } /** * Verifies that this delta can be used to patch the given text. * * @param target the text to patch. * @throws IllegalStateException if the patch cannot be applied. */ public abstract void verify(List target) throws IllegalStateException; /** * Applies this delta as the patch for a given target * * @param target the given target * @throws IllegalStateException */ public abstract void applyTo(List target) throws IllegalStateException; /** * Returns the type of delta * @return the type enum */ public abstract TYPE getType(); /** * @return The Chunk describing the original text. */ public Chunk getOriginal() { return original; } /** * @param original The Chunk describing the original text to set. */ public void setOriginal(Chunk original) { this.original = original; } /** * @return The Chunk describing the revised text. */ public Chunk getRevised() { return revised; } /** * @param revised The Chunk describing the revised text to set. */ public void setRevised(Chunk revised) { this.revised = revised; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((original == null) ? 0 : original.hashCode()); result = prime * result + ((revised == null) ? 0 : revised.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; @SuppressWarnings("rawtypes") Delta other = (Delta) obj; if (original == null) { if (other.original != null) return false; } else if (!original.equals(other.original)) return false; if (revised == null) { if (other.revised != null) return false; } else if (!revised.equals(other.revised)) return false; return true; } int lineNumber() { return getOriginal().getPosition() + 1; } String formatLines(List lines) { return IterableUtil.format(StandardRepresentation.STANDARD_REPRESENTATION, lines, DEFAULT_START, DEFAULT_END, ELEMENT_SEPARATOR_WITH_NEWLINE, " "); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy