/*
* Copyright 2003-2011 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package jetbrains.mps.util;
import difflib.DiffUtils;
import difflib.Patch;
import java.util.Arrays;
import java.util.List;
/**
* @author Evgeny Gerashchenko
* @since 4/6/11
*/
public class DifflibFacade {
public static String[] getGenDiff(String[] old, String[] generated) {
final String[] NO_DIFF = {"No diff"};
if (old.length == 0 && generated.length == 0) {
return NO_DIFF;
}
Patch diff = DiffUtils.diff(Arrays.asList(old), Arrays.asList(generated));
if (diff.getDeltas().isEmpty()) {
return NO_DIFF;
}
List<String> udiff = DiffUtils.generateUnifiedDiff("old text", "generated text", Arrays.asList(old), diff, 3);
return udiff.toArray(new String[udiff.size()]);
}
public static String[] getSimpleDiff(String[] old, String[] new_) {
String[] genDiff = getGenDiff(old, new_);
if (genDiff.length <= 2) {
return new String[0];
} else {
return Arrays.copyOfRange(genDiff, 2, genDiff.length);
}
}
public static String[] getSimpleDiff(String old, String new_) {
return getSimpleDiff(old.split("\n|\r\n"), new_.split("\n|\r\n"));
}
}