org.javers.core.diff.appenders.levenshtein.StepsToChanges Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of javers-core Show documentation
Show all versions of javers-core Show documentation
JaVers - object auditing and diff framework for Java
package org.javers.core.diff.appenders.levenshtein;
import org.javers.core.diff.EqualsFunction;
import org.javers.core.diff.changetype.container.ContainerElementChange;
import org.javers.core.diff.changetype.container.ElementValueChange;
import org.javers.core.diff.changetype.container.ValueAdded;
import org.javers.core.diff.changetype.container.ValueRemoved;
import java.util.ArrayList;
import java.util.List;
class StepsToChanges {
private final EqualsFunction equalsFunction;
public StepsToChanges(EqualsFunction equalsFunction) {
this.equalsFunction = equalsFunction;
}
List convert(final BacktrackSteps[][] backtrack, final List leftList, final List rightList) {
int i = leftList.size();
int j = rightList.size();
final List changes = new ArrayList<>();
while (i * j != 0) {
final BacktrackSteps choice = backtrack[i][j];
final Object leftValue = leftList.get(i - 1);
final Object rightValue = rightList.get(j - 1);
if (choice == BacktrackSteps.TAKE) {
if (!equalsFunction.nullSafeEquals(leftValue, rightValue)) {
changes.add(new ElementValueChange(i - 1, leftValue, rightValue));
}
i--;
j--;
} else if (choice == BacktrackSteps.SKIP_LEFT) {
changes.add(new ValueRemoved(i - 1, leftValue));
i--;
} else if (choice == BacktrackSteps.SKIP_RIGHT) {
changes.add(new ValueAdded(j - 1, rightValue));
j--;
}
}
while(i > 0) {
changes.add(new ValueRemoved(i - 1, leftList.get(i - 1)));
i--;
}
while(j > 0) {
changes.add(new ValueAdded(j - 1, rightList.get(j - 1)));
j--;
}
return changes;
}
}