
pw.prok.kdiff.diff.visitors.MappedVisitor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of kDiff Show documentation
Show all versions of kDiff Show documentation
Library for generating and applying diff/patch files
The newest version!
package pw.prok.kdiff.diff.visitors;
import pw.prok.kdiff.Chunk;
import pw.prok.kdiff.Pair;
import pw.prok.kdiff.Patch;
import pw.prok.kdiff.PatchResult;
import pw.prok.kdiff.delta.Delta;
import pw.prok.kdiff.diff.DiffException;
import pw.prok.kdiff.diff.DiffRow;
import pw.prok.kdiff.diff.DiffVisitor;
import java.util.*;
public class MappedVisitor implements DiffVisitor {
private final Map, Patch>> map;
public MappedVisitor() {
this(new HashMap, Patch>>());
}
public MappedVisitor(Map, Patch>> map) {
this.map = map;
}
public Map, Patch>> getMap() {
return map;
}
@Override
public boolean visitComment(C comment) {
return true;
}
protected String originalFilename;
protected Date originalDate;
@Override
public boolean visitOriginal(String original, Date date) throws DiffException {
originalFilename = original;
originalDate = date;
return true;
}
protected String revisedFilename;
protected Date revisedDate;
@Override
public boolean visitRevised(String revised, Date date) throws DiffException {
revisedFilename = revised;
revisedDate = date;
return true;
}
@Override
public boolean visitChunkStart(int originalPosition, int originalCount, int revisedPosition, int revisedCount) {
return true;
}
final List oldLines = new ArrayList<>();
final List newLines = new ArrayList<>();
@Override
public boolean visitChunkEnd(int originalPosition, int originalCount, int revisedPosition, int revisedCount) {
final Chunk original = new Chunk<>(originalPosition - 1, new ArrayList<>(oldLines));
final Chunk revised = new Chunk<>(revisedPosition - 1, new ArrayList<>(newLines));
oldLines.clear();
newLines.clear();
final Pair key = Pair.immutable(originalFilename, revisedFilename);
Patch> patch = map.get(key);
if (patch == null) {
map.put(key, patch = new Patch<>());
patch.setOriginal(originalFilename);
patch.setOriginalDate(originalDate);
patch.setRevised(revisedFilename);
patch.setRevisedDate(revisedDate);
}
patch.addDelta(new Delta<>(original, revised));
return true;
}
@Override
public boolean visitLine(DiffRow.Tag tag, T line) {
switch (tag) {
case INSERT:
newLines.add(line);
return true;
case DELETE:
oldLines.add(line);
return true;
default:
oldLines.add(line);
newLines.add(line);
return true;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy