use of difflib.Chunk in project Gargoyle by callakrsos.
the class DiffPathText method diffPathTest.
@Test
public void diffPathTest() throws IOException, URISyntaxException, PatchFailedException {
URL test1 = ClassLoader.getSystemClassLoader().getResource("compare/Test1");
URL test2 = ClassLoader.getSystemClassLoader().getResource("compare/Test2");
List<String> test1List = Files.readAllLines(new File(test1.toURI()).toPath());
List<String> test2List = Files.readAllLines(new File(test2.toURI()).toPath());
Patch diff = DiffUtils.diff(test1List, test2List);
List<Delta> deltas = diff.getDeltas();
deltas.stream().forEach(d -> {
Chunk original = d.getOriginal();
List<?> lines = original.getLines();
lines.stream().forEach(System.out::println);
});
// List<?> patch = DiffUtils.patch(test1List, diff);
// patch.stream().forEach(System.out::println);
//
// List<?> unpatch = DiffUtils.unpatch(test2List, diff);
// unpatch.stream().forEach(System.out::println);
}
use of difflib.Chunk in project Gargoyle by callakrsos.
the class DiffPathText method patchTest.
@Test
public void patchTest() throws IOException, URISyntaxException, PatchFailedException {
URL test1 = ClassLoader.getSystemClassLoader().getResource("compare/Test1");
URL test2 = ClassLoader.getSystemClassLoader().getResource("compare/Test2");
// 원본데이터 리스트
List<String> test1List = Files.readAllLines(new File(test1.toURI()).toPath());
List<String> test2List = Files.readAllLines(new File(test2.toURI()).toPath());
List<String> tmpOrigin = new LinkedList<String>();
test1List.forEach(str -> {
tmpOrigin.add(str);
});
List<String> tmpRevice = new LinkedList<String>();
test2List.forEach(str -> {
tmpRevice.add(str);
});
Patch diff = DiffUtils.diff(test1List, test2List);
System.out.println(diff.getDeltas());
List<Delta> deltas = diff.getDeltas();
Collections.reverse(deltas);
System.out.println("before");
System.out.println(tmpOrigin);
// 공백 작업pos
deltas.forEach(d -> {
Chunk original = d.getOriginal();
Chunk revised = d.getRevised();
int position = original.getPosition();
switch(d.getType()) {
case INSERT:
{
List<String> lines = (List<String>) original.getLines();
List<String> lines2 = (List<String>) revised.getLines();
tmpOrigin.addAll(position, lines2);
tmpRevice.addAll(position, lines);
}
break;
}
});
System.out.println("origin");
System.out.println(tmpOrigin);
System.out.println("revice");
System.out.println(tmpRevice);
// tmpOrigin.forEach(System.out::println);
}
use of difflib.Chunk in project disconf by knightliao.
the class DiffUtils method getDiff.
/**
* 专门为disconf打造的对照工具
*
* @param old
* @param newData
* @param identify
*
* @return
*/
public static String getDiff(String old, String newData, String identify, String htmlClick) {
StringComparator stringComparator = new StringComparator(old, newData);
String contentString = StringEscapeUtils.escapeHtml4(identify) + "<br/><br/>" + htmlClick + "<br/> ";
try {
if (stringComparator.getChangesFromOriginal().size() == 0 && stringComparator.getDeletesFromOriginal().size() == 0 && stringComparator.getInsertsFromOriginal().size() == 0) {
return "<span style='color:#FF0000'>OK, NO MODIFICATOIN!</span>";
} else {
String oldValue = "<br/><br/><br/><span style='color:#FF0000'>Old value:</span><br/>" + StringEscapeUtils.escapeHtml4(old).replaceAll("\n", "<br/>");
String newValue = "<br/><br/><br/><span style='color:#FF0000'>New value:</span><br/>" + StringEscapeUtils.escapeHtml4(newData).replaceAll("\n", "<br/>");
String diff = "";
if (stringComparator.getChangesFromOriginal().size() != 0) {
diff = "<span style='color:#FF0000'>Change info: </span><br/>";
for (Chunk chunk : stringComparator.getChangesFromOriginal()) {
diff += StringEscapeUtils.escapeHtml4(chunk.toString()) + "<br/>";
}
}
if (stringComparator.getInsertsFromOriginal().size() != 0) {
diff += "<br/><span style='color:#FF0000'>Insert info: </span><br/>";
for (Chunk chunk : stringComparator.getInsertsFromOriginal()) {
diff += StringEscapeUtils.escapeHtml4(chunk.toString()) + "<br/>";
}
}
if (stringComparator.getDeletesFromOriginal().size() != 0) {
diff += "<br/><span style='color:#FF0000'>Delete info: </span><br/>";
for (Chunk chunk : stringComparator.getDeletesFromOriginal()) {
diff += StringEscapeUtils.escapeHtml4(chunk.toString()) + "<br/>";
}
}
return contentString + diff + oldValue + newValue;
}
} catch (IOException e) {
LOG.error("compare error", e);
return "comparator error" + e.toString();
}
}
use of difflib.Chunk in project disconf by knightliao.
the class FileComparator method getChunksByType.
private List<Chunk> getChunksByType(Delta.TYPE type) throws IOException {
final List<Chunk> listOfChanges = new ArrayList<Chunk>();
final List<Delta> deltas = getDeltas();
for (Delta delta : deltas) {
if (delta.getType() == type) {
listOfChanges.add(delta.getRevised());
}
}
return listOfChanges;
}
use of difflib.Chunk in project disconf by knightliao.
the class FileComparatorTestCase method shouldGetDeletesBetweenFiles.
@Test
public void shouldGetDeletesBetweenFiles() {
final FileComparator comparator = new FileComparator(original, revised);
try {
final List<Chunk> deletesFromOriginal = comparator.getDeletesFromOriginal();
assertEquals(1, deletesFromOriginal.size());
final Chunk firstDelete = deletesFromOriginal.get(0);
final int firstLineOfFirstDelete = firstDelete.getPosition() + 1;
assertEquals(1, firstLineOfFirstDelete);
} catch (IOException ioe) {
fail("Error running test shouldGetDeletesBetweenFiles " + ioe.toString());
}
}
Aggregations