package com.baidu.disconf.web.utils;
import java.io.IOException;
import org.apache.commons.lang3.StringEscapeUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.baidu.disconf.web.common.comparator.StringComparator;
import difflib.Chunk;
/**
*
*/
public class DiffUtils {
protected static final Logger LOG = LoggerFactory.getLogger(DiffUtils.class);
/**
* 简单的对比工作
*
* @param old
* @param newData
*
* @return
*/
public static String getDiffSimple(String old, String newData) {
StringComparator stringComparator = new StringComparator(old, newData);
try {
return stringComparator.getChangesFromOriginal().toString();
} catch (IOException e) {
LOG.warn(e.toString());
return "";
}
}
/**
* 专门为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();
}
}
}