45 public static class DiffServiceException
extends Exception {
54 DiffServiceException(String message) {
65 super(message, exception);
71 private static final String[]
DIFF_BREAK =
new String[]{
"",
"",
""};
73 private static final String
NEW_LINE = System.getProperty(
"line.separator");
87 if (prevResult.isDirectory() && curResult.isDirectory()) {
88 final Map<String, File> prevFiles = FileUtils.listFiles(prevResult,
null,
true).stream()
89 .collect(Collectors.toMap(f ->
getRelative(prevResult, f), f -> f, (f1, f2) -> f1));
91 final Map<String, File> curFiles = FileUtils.listFiles(curResult,
null,
true).stream()
92 .collect(Collectors.toMap(f ->
getRelative(curResult, f), f -> f, (f1, f2) -> f1));
94 Map<String, Pair<File, File>> prevCurMapping = Stream.of(prevFiles, curFiles)
95 .flatMap((map) -> map.keySet().stream())
96 .collect(Collectors.toMap(k -> k, k -> Pair.of(prevFiles.get(k), curFiles.get(k)), (v1, v2) -> v1));
98 String fullDiff = prevCurMapping.entrySet().stream()
99 .map((entry) ->
getFileDiffs(entry.getValue().getLeft(), entry.getValue().getRight(), entry.getKey()))
100 .filter((val) -> val !=
null)
105 }
else if (prevResult.isFile() && curResult.isFile()) {
106 return getFileDiffs(prevResult, curResult, prevResult.toString() +
" / " + curResult.toString());
109 throw new DiffServiceException(String.format(
"%s and %s must be of same type (directory/file).", prevResult.toString(), curResult.toString()));
123 boolean hasOrig = (orig !=
null && orig.exists());
124 boolean hasCur = (cur !=
null && cur.exists());
125 if (!hasOrig && !hasCur) {
127 }
else if (!hasOrig && hasCur) {
129 }
else if (hasOrig && !hasCur) {
134 }
catch (IOException ex) {
136 orig.toString(), cur.toString(),
NEW_LINE, ExceptionUtils.getStackTrace(ex)));
142 return String.format(
"%d,%d", chunk.getPosition() + 1, chunk.getLines().size());
166 private List<String>
getLinesDiff(Chunk<String> orig, Chunk<String> cur) {
167 Stream<String> origPrefixed = orig.getLines().stream()
170 Stream<String> curPrefixed = cur.getLines().stream()
173 return Stream.concat(origPrefixed, curPrefixed)
174 .collect(Collectors.toList());
179 List<String> linesDiff =
getLinesDiff(delta.getSource(), delta.getTarget());
181 return Stream.concat(Stream.of(lineNums), linesDiff.stream())
195 private String
diffLines(List<String> orig, List<String> cur, String header) {
197 Patch<String> patch = DiffUtils.diff(orig, cur);
199 String diff = patch.getDeltas().stream()
203 if (StringUtils.isBlank(diff)) {
207 return (header !=
null)
213 String divider =
"-----------------------------------------------------------";
214 return String.join(
NEW_LINE, divider, remark, divider);
218 return rootDirectory.toURI().relativize(file.toURI()).getPath();