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

org.javers.core.diff.appenders.levenshtein.StepsToChanges Maven / Gradle / Ivy

There is a newer version: 7.6.1
Show newest version
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;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy