use of difflib.Chunk in project Gargoyle by callakrsos.
the class HtmlBaseDiffAppController method initialize.
@FXML
public void initialize() {
/* initControls */
ivReviced = new ImageView();
ivpReviced = new ImageViewPane(ivReviced);
ivpReviced.setPrefWidth(200);
ivpReviced.setPrefHeight(150);
ivOrigin = new ImageView();
ivpOrigin = new ImageViewPane(ivOrigin);
ivpOrigin.setPrefWidth(200);
ivpOrigin.setPrefHeight(150);
gpSnap.add(ivpReviced, 0, 0);
gpSnap.add(ivpOrigin, 1, 0);
// lvOrinal.setCellFactory(param -> new
// DefaultTextFieldListCell(ORIGINAL));
// lvRevice.setCellFactory(param -> new
// DefaultTextFieldListCell(REVICED));
fileCompareResultProperty.addListener((oba, oldresult, newresult) -> {
if (newresult == null)
return;
// List<ChunkWrapper> wrapperedOrigin =
// extractedWrapperedChunk(DeltaType.ORIGINAL, newresult);
// List<ChunkWrapper> wrapperedReviced =
// extractedWrapperedChunk(DeltaType.REVICED, newresult);
// lvOrinal.getItems().addAll(wrapperedOrigin);
// lvRevice.getItems().addAll(wrapperedReviced);
// tvChgHis.getItems().addAll(wrapperedOrigin.stream().filter(w
// -> w.getDelta() != null).collect(Collectors.toList()));
});
// lvRevice.setOnMouseClicked(event -> {
// if (event.getClickCount() == 2) {
// int movePosition = -1;
// ChunkWrapper selectedItem =
// lvRevice.getSelectionModel().getSelectedItem();
// Delta delta = selectedItem.getDelta();
// if (delta != null && delta.getOriginal() != null) {
// movePosition = selectedItem.getPosition();
// lvOrinal.scrollTo(movePosition - 1);
// lvOrinal.getSelectionModel().select(movePosition);
// }
//
// }
// });
// lvOrinal.setOnMouseClicked(event -> {
// if (event.getClickCount() == 2) {
// int movePosition = -1;
// ChunkWrapper selectedItem =
// lvOrinal.getSelectionModel().getSelectedItem();
// Delta delta = selectedItem.getDelta();
// if (delta != null && delta.getRevised() != null) {
// movePosition = delta.getRevised().getPosition();
// lvRevice.scrollTo(movePosition - 1);
// lvRevice.getSelectionModel().select(movePosition);
// }
// }
//
// });
// lvOrinal.addEventFilter(ScrollEvent.SCROLL, event -> {
// snappOriginShot();
// });
//
// lvRevice.addEventFilter(ScrollEvent.SCROLL, event -> {
// snappReviceShot();
// });
btnCompare.setOnMouseClicked(event -> {
String ori = txtOrigin.getText();
String rev = txtRevice.getText();
if (!(ori.isEmpty() && rev.isEmpty())) {
clear();
try {
this.compare.setOriginal(ori);
this.compare.setRevised(rev);
CompareResult chunkResult = this.compare.getChunkResult();
this.fileCompareResultProperty.set(chunkResult);
snappOriginShot();
snappReviceShot();
} catch (Exception e) {
e.printStackTrace();
}
}
});
colStatus.setCellValueFactory(new Callback<CellDataFeatures<ChunkWrapper, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<ChunkWrapper, String> param) {
TYPE type = param.getValue().getType();
StringProperty prop = new SimpleStringProperty();
if (type != null)
prop.set(type.name());
return prop;
}
});
colPosition.setCellValueFactory(param -> new SimpleIntegerProperty(new Integer(param.getValue().getPosition() + 1)));
colRevice.setCellValueFactory(param -> {
Delta delta = param.getValue().getDelta();
SimpleStringProperty prop = new SimpleStringProperty();
if (delta != null) {
Chunk c = delta.getRevised();
prop.setValue(c.getLines().toString());
}
return prop;
});
colOrigin.setCellValueFactory(param -> {
Delta delta = param.getValue().getDelta();
SimpleStringProperty prop = new SimpleStringProperty();
if (delta != null) {
Chunk c = delta.getOriginal();
prop.setValue(c.getLines().toString());
}
return prop;
});
}
use of difflib.Chunk in project Gargoyle by callakrsos.
the class RelocateFileComparator method getDeltas.
/**
* 비교결과 리턴
*
* @return
* @throws Exception
*/
private CompareResult getDeltas() throws Exception {
CompareResult result = new CompareResult();
List<String> originalFileLines = fileToLines(original);
List<String> revisedFileLines = fileToLines(revised);
int max = Math.max(originalFileLines.size(), revisedFileLines.size());
// array copy
ArrayList<String> tmpOriginalFileLines = new ArrayList<String>();
originalFileLines.forEach(str -> {
tmpOriginalFileLines.add(str);
});
while (tmpOriginalFileLines.size() <= max) {
tmpOriginalFileLines.add("");
}
ArrayList<String> tmpReviceFileLines = new ArrayList<String>();
revisedFileLines.forEach(str -> {
tmpReviceFileLines.add(str);
});
while (tmpReviceFileLines.size() <= max) {
tmpReviceFileLines.add("");
}
// occur .. exception..
// Collections.copy(originalFileLines, tmpOriginalFileLines);
result.setOriginalFileLines(tmpOriginalFileLines);
result.setRevisedFileLines(tmpReviceFileLines);
final Patch patch = DiffUtils.diff(originalFileLines, revisedFileLines);
List<Chunk> listOfOriginChanges = new ArrayList<Chunk>();
List<Chunk> listOfReviceChanges = new ArrayList<Chunk>();
List<Delta> deltas = patch.getDeltas();
Collections.reverse(deltas);
for (Delta delta : deltas) {
Chunk original = delta.getOriginal();
Chunk revised = delta.getRevised();
int position = original.getPosition();
@SuppressWarnings("unchecked") List<String> lines = (List<String>) original.getLines();
@SuppressWarnings("unchecked") List<String> lines2 = (List<String>) revised.getLines();
switch(delta.getType()) {
case DELETE:
break;
case INSERT:
{
// tmpOriginalFileLines.addAll(position, lines2);
tmpReviceFileLines.addAll(position, lines);
break;
}
case CHANGE:
{
LinkedList<String> src = new LinkedList<>();
List<String> tmp1 = null;
List<String> tmp2 = null;
int compare = Integer.compare(lines.size(), lines2.size());
if (compare >= 0) {
tmp1 = lines;
tmp2 = lines2;
} else {
tmp1 = lines2;
tmp2 = lines;
}
tmp1.forEach(str -> {
src.add(str);
});
try {
for (int i = 0; i < tmp2.size(); i++) {
src.set(i, tmp2.get(i));
}
for (int i = tmp2.size(); i < src.size(); i++) src.set(i, "");
} catch (IndexOutOfBoundsException e) {
e.printStackTrace();
}
if (compare == 1) {
tmpReviceFileLines.addAll(position, src);
tmpReviceFileLines.remove(position + src.size());
} else {
tmpOriginalFileLines.addAll(position, src);
tmpOriginalFileLines.remove(position + src.size());
}
}
break;
default:
break;
}
listOfOriginChanges.add(delta.getOriginal());
listOfReviceChanges.add(delta.getRevised());
}
result.setListOfOriginChanges(listOfOriginChanges);
result.setListOfReviceChanges(listOfReviceChanges);
return result;
}
use of difflib.Chunk in project Gargoyle by callakrsos.
the class TextBaseDiffAppController method extractedWrapperedChunk.
/**
* chunk객체를 UI로 표현하기 위해 wrapping처리함.
*
* @param deltaType
* @param deltas
* @param readLines
* @return
*/
private List<ChunkWrapper> extractedWrapperedChunk(final DeltaType deltaType, final List<Delta> deltas, final List<String> readLines) {
int size = readLines.size();
ArrayList<ChunkWrapper> collect = deltas.stream().map(delta -> {
Chunk chunk = null;
if (DeltaType.ORIGINAL == deltaType) {
chunk = delta.getOriginal();
} else {
chunk = delta.getRevised();
}
int position = chunk.getPosition();
@SuppressWarnings("unchecked") List<String> lines = (List<String>) chunk.getLines();
TYPE type = delta.getType();
ChunkWrapper chunkWrapper = new ChunkWrapper();
chunkWrapper.setType(type);
chunkWrapper.setLines(lines);
chunkWrapper.setChunk(chunk);
chunkWrapper.setPosition(position);
chunkWrapper.setDelta(delta);
return chunkWrapper;
}).collect(() -> {
ArrayList<ChunkWrapper> newChunk = new ArrayList<>(size);
for (int i = 0; i < readLines.size(); i++) {
ChunkWrapper chunkWrapper = new ChunkWrapper();
chunkWrapper.setStr(readLines.get(i));
chunkWrapper.setPosition(i);
newChunk.add(chunkWrapper);
}
return newChunk;
}, (collection, item) -> {
int position = item.getPosition();
List<String> lines = item.getLines();
TYPE type = item.getType();
int tmpPosition = position;
for (String str : lines) {
ChunkWrapper chunkWrapper = new ChunkWrapper();
chunkWrapper.setType(type);
chunkWrapper.setLines(lines);
chunkWrapper.setPosition(position);
chunkWrapper.setChunk(item.getChunk());
chunkWrapper.setStr(str);
chunkWrapper.setDelta(item.getDelta());
collection.set(tmpPosition++, chunkWrapper);
}
}, (collection1, collection2) -> collection1.addAll(collection2));
return collect;
}
use of difflib.Chunk in project Gargoyle by callakrsos.
the class TextBaseDiffAppController method initialize.
@FXML
public void initialize() {
/* initControls */
ivReviced = new ImageView();
ivpReviced = new ImageViewPane(ivReviced);
ivpReviced.setPrefWidth(200);
ivpReviced.setPrefHeight(150);
ivOrigin = new ImageView();
ivpOrigin = new ImageViewPane(ivOrigin);
ivpOrigin.setPrefWidth(200);
ivpOrigin.setPrefHeight(150);
gpSnap.add(ivpReviced, 0, 0);
gpSnap.add(ivpOrigin, 1, 0);
lvOrinal.setCellFactory(param -> new DefaultTextFieldListCell(ORIGINAL));
lvRevice.setCellFactory(param -> new DefaultTextFieldListCell(REVICED));
fileCompareResultProperty.addListener(compareResultListener);
lvRevice.setOnMouseClicked(event -> {
if (event.getClickCount() == 2) {
int movePosition = -1;
ChunkWrapper selectedItem = lvRevice.getSelectionModel().getSelectedItem();
Delta delta = selectedItem.getDelta();
if (delta != null && delta.getOriginal() != null) {
movePosition = selectedItem.getPosition();
lvOrinal.scrollTo(movePosition - 1);
lvOrinal.getSelectionModel().select(movePosition);
}
}
});
lvOrinal.setOnMouseClicked(event -> {
if (event.getClickCount() == 2) {
int movePosition = -1;
ChunkWrapper selectedItem = lvOrinal.getSelectionModel().getSelectedItem();
if (selectedItem != null) {
Delta delta = selectedItem.getDelta();
if (delta != null && delta.getRevised() != null) {
movePosition = delta.getRevised().getPosition();
lvRevice.scrollTo(movePosition - 1);
lvRevice.getSelectionModel().select(movePosition);
}
}
}
});
lvOrinal.addEventFilter(ScrollEvent.SCROLL, event -> {
snappOriginShot();
});
lvRevice.addEventFilter(ScrollEvent.SCROLL, event -> {
snappReviceShot();
});
btnCompare.setOnMouseClicked(event -> {
String ori = txtOrigin.getText();
String rev = txtRevice.getText();
if (!(ori.isEmpty() && rev.isEmpty())) {
clear();
try {
this.compare.setOriginal(ori);
this.compare.setRevised(rev);
CompareResult chunkResult = this.compare.getChunkResult();
this.fileCompareResultProperty.set(chunkResult);
snappOriginShot();
snappReviceShot();
} catch (Exception e) {
LOGGER.error(ValueUtil.toString(e));
}
}
});
colStatus.setCellValueFactory(new Callback<CellDataFeatures<ChunkWrapper, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<ChunkWrapper, String> param) {
TYPE type = param.getValue().getType();
StringProperty prop = new SimpleStringProperty();
if (type != null)
prop.set(type.name());
return prop;
}
});
colPosition.setCellValueFactory(param -> new SimpleIntegerProperty(new Integer(param.getValue().getPosition() + 1)));
colRevice.setCellValueFactory(param -> {
Delta delta = param.getValue().getDelta();
SimpleStringProperty prop = new SimpleStringProperty();
if (delta != null) {
Chunk c = delta.getRevised();
prop.setValue(c.getLines().toString());
}
return prop;
});
colOrigin.setCellValueFactory(param -> {
Delta delta = param.getValue().getDelta();
SimpleStringProperty prop = new SimpleStringProperty();
if (delta != null) {
Chunk c = delta.getOriginal();
prop.setValue(c.getLines().toString());
}
return prop;
});
}
use of difflib.Chunk in project Gargoyle by callakrsos.
the class TextSameLineDiffAppController method initialize.
@FXML
public void initialize() {
/* initControls */
ivReviced = new ImageView();
ivpReviced = new ImageViewPane(ivReviced);
ivpReviced.setPrefWidth(200);
ivpReviced.setPrefHeight(150);
ivOrigin = new ImageView();
ivpOrigin = new ImageViewPane(ivOrigin);
ivpOrigin.setPrefWidth(200);
ivpOrigin.setPrefHeight(150);
gpSnap.add(ivpReviced, 0, 0);
gpSnap.add(ivpOrigin, 1, 0);
lvOrinal.setCellFactory(param -> new DefaultTextFieldListCell(ORIGINAL));
lvRevice.setCellFactory(param -> new DefaultTextFieldListCell(REVICED));
fileCompareResultProperty.addListener((oba, oldresult, newresult) -> {
if (newresult == null)
return;
List<ChunkWrapper> wrapperedOrigin = extractedWrapperedChunk(DeltaType.ORIGINAL, newresult);
List<ChunkWrapper> wrapperedReviced = extractedWrapperedChunk(DeltaType.REVICED, newresult);
lvOrinal.getItems().addAll(wrapperedOrigin);
lvRevice.getItems().addAll(wrapperedReviced);
tvChgHis.getItems().addAll(wrapperedOrigin.stream().filter(w -> w.getDelta() != null).collect(Collectors.toList()));
});
lvRevice.setOnMouseClicked(event -> {
if (event.getClickCount() == 2) {
int movePosition = -1;
ChunkWrapper selectedItem = lvRevice.getSelectionModel().getSelectedItem();
Delta delta = selectedItem.getDelta();
if (delta != null && delta.getOriginal() != null) {
movePosition = selectedItem.getPosition();
lvOrinal.scrollTo(movePosition - 1);
lvOrinal.getSelectionModel().select(movePosition);
}
}
});
lvOrinal.setOnMouseClicked(event -> {
if (event.getClickCount() == 2) {
int movePosition = -1;
ChunkWrapper selectedItem = lvOrinal.getSelectionModel().getSelectedItem();
Delta delta = selectedItem.getDelta();
if (delta != null && delta.getRevised() != null) {
movePosition = delta.getRevised().getPosition();
lvRevice.scrollTo(movePosition - 1);
lvRevice.getSelectionModel().select(movePosition);
}
}
});
lvOrinal.addEventFilter(ScrollEvent.SCROLL, event -> {
snappOriginShot();
});
lvRevice.addEventFilter(ScrollEvent.SCROLL, event -> {
snappReviceShot();
});
btnCompare.setOnMouseClicked(event -> {
String ori = txtOrigin.getText();
String rev = txtRevice.getText();
if (!(ori.isEmpty() && rev.isEmpty())) {
clear();
try {
this.compare.setOriginal(ori);
this.compare.setRevised(rev);
CompareResult chunkResult = this.compare.getChunkResult();
this.fileCompareResultProperty.set(chunkResult);
snappOriginShot();
snappReviceShot();
} catch (Exception e) {
e.printStackTrace();
}
}
});
colStatus.setCellValueFactory(new Callback<CellDataFeatures<ChunkWrapper, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<ChunkWrapper, String> param) {
TYPE type = param.getValue().getType();
StringProperty prop = new SimpleStringProperty();
if (type != null)
prop.set(type.name());
return prop;
}
});
colPosition.setCellValueFactory(param -> new SimpleIntegerProperty(new Integer(param.getValue().getPosition() + 1)));
colRevice.setCellValueFactory(param -> {
Delta delta = param.getValue().getDelta();
SimpleStringProperty prop = new SimpleStringProperty();
if (delta != null) {
Chunk c = delta.getRevised();
prop.setValue(c.getLines().toString());
}
return prop;
});
colOrigin.setCellValueFactory(param -> {
Delta delta = param.getValue().getDelta();
SimpleStringProperty prop = new SimpleStringProperty();
if (delta != null) {
Chunk c = delta.getOriginal();
prop.setValue(c.getLines().toString());
}
return prop;
});
}
Aggregations