Skip to content

Commit

Permalink
BugFix: GUI Links for DirectoryDiffView
Browse files Browse the repository at this point in the history
  • Loading branch information
pouryafard75 committed Apr 16, 2024
1 parent f789125 commit ca4ffdd
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 16 deletions.
57 changes: 53 additions & 4 deletions src/main/java/gui/webdiff/DirComparator.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,19 @@
public class DirComparator {
private final List<ASTDiff> diffs;
private final ProjectASTDiff projectASTDiff;
private final Map<Integer, ASTDiff> integerASTDiffMap;
private final Map<DefaultMutableTreeNode, Integer> treeNodeIntegerMap = new LinkedHashMap<>();
private Set<String> removedFilesName;
private Set<String> addedFilesName;
private Map<String,String> modifiedFilesName;
private final DefaultMutableTreeNode root = new DefaultMutableTreeNode("");
private final DefaultMutableTreeNode compressedTree = new DefaultMutableTreeNode("");


public Map<DefaultMutableTreeNode, Integer> getTreeNodeIntegerMap() {
return treeNodeIntegerMap;
}

public DefaultMutableTreeNode getCompressedTree() {
return compressedTree;
}
Expand All @@ -35,8 +42,8 @@ public Map<String,String> getModifiedFilesName() {
public Pair<String,String> getFileContentsPair(int id)
{
return new Pair<>(
projectASTDiff.getFileContentsBefore().get(diffs.get(id).getSrcPath()),
projectASTDiff.getFileContentsAfter().get(diffs.get(id).getDstPath())
projectASTDiff.getFileContentsBefore().get(integerASTDiffMap.get(id).getSrcPath()),
projectASTDiff.getFileContentsAfter().get(integerASTDiffMap.get(id).getDstPath())
);
}

Expand All @@ -63,7 +70,7 @@ public DirComparator(ProjectASTDiff projectASTDiff)
}
}
compressNode(compressedTree, root);

integerASTDiffMap = new TreePathExtractor().generateIds(compressedTree, diffs, treeNodeIntegerMap);
}

private static void compressNode(DefaultMutableTreeNode newNode, DefaultMutableTreeNode oldNode) {
Expand Down Expand Up @@ -146,6 +153,48 @@ private void compare() {
addedFilesName.removeAll(removedBackup);
}
public ASTDiff getASTDiff(int id) {
return diffs.get(id);
return integerASTDiffMap.get(id);
}
static class TreePathExtractor {

private int leafCounter = 0; // This will provide a unique ID for each leaf

public Map<Integer, ASTDiff> generateIds(DefaultMutableTreeNode root, List<ASTDiff> comperator, Map<DefaultMutableTreeNode, Integer> treeNodeIntegerMap) {
Map<Integer, ASTDiff> leafPaths = new HashMap<>();
if (root != null) {
traverseTree(root, "", leafPaths, comperator, treeNodeIntegerMap);
}
return leafPaths;
}

private void traverseTree(DefaultMutableTreeNode node, String currentPath, Map<Integer, ASTDiff> leafPaths, List<ASTDiff> diffs, Map<DefaultMutableTreeNode, Integer> treeNodeIntegerMap) {
// Check if node is a leaf
if (node.isLeaf()) {
String path = currentPath + node.getUserObject().toString();
ASTDiff corresponding = null;
for (ASTDiff diff : diffs) {
if (diff.getDstPath().equals(path)) {
corresponding = diff;
break;
}
}
if (corresponding != null) {
leafPaths.put(leafCounter, corresponding);
treeNodeIntegerMap.put(node, leafCounter);
leafCounter++;
}
else{

}
} else {
// Not a leaf, traverse its children
for (int i = 0; i < node.getChildCount(); i++) {
DefaultMutableTreeNode child = (DefaultMutableTreeNode) node.getChildAt(i);
// Append this node's name to the path and recurse
String path = currentPath + node.getUserObject().toString() + "/";
traverseTree(child, path, leafPaths, diffs, treeNodeIntegerMap);
}
}
}
}
}
22 changes: 10 additions & 12 deletions src/main/java/gui/webdiff/DirectoryDiffView.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public void renderOn(HtmlCanvas html) throws IOException {
.span(class_("badge badge-secondary").style("color:black")).content(comperator.getModifiedFilesName().size())
._h4()
._div()
.render_if(new ModifiedFiles(comperator.getModifiedFilesName(), comperator.getCompressedTree()), !comperator.getModifiedFilesName().isEmpty())
.render_if(new ModifiedFiles(comperator.getTreeNodeIntegerMap(), comperator.getCompressedTree()), !comperator.getModifiedFilesName().isEmpty())
._div()
._div()
._div()
Expand Down Expand Up @@ -75,19 +75,18 @@ public void renderOn(HtmlCanvas html) throws IOException {
}

private static class ModifiedFiles implements Renderable {
// private List<Pair<File, File>> files;

private Map<String,String> diffInfos;
private final Map<DefaultMutableTreeNode, Integer> treeNodeIntegerMap;
private final DefaultMutableTreeNode root;

private ModifiedFiles(Map<String,String> diffInfos, DefaultMutableTreeNode root) {
this.diffInfos = diffInfos;

private ModifiedFiles(Map<DefaultMutableTreeNode, Integer> treeNodeIntegerMap, DefaultMutableTreeNode root) {
this.treeNodeIntegerMap = treeNodeIntegerMap;
this.root = root;
}

private int renderNode(HtmlCanvas ul, DefaultMutableTreeNode node, int nodeId) throws IOException {
private void renderNode(HtmlCanvas ul, DefaultMutableTreeNode node) throws IOException {
if (node == null) {
return nodeId;
return;
}

// Start a list item for this node
Expand All @@ -98,6 +97,7 @@ private int renderNode(HtmlCanvas ul, DefaultMutableTreeNode node, int nodeId) t
// Content of the current node
if (node.getUserObject() != null) {
if (node.isLeaf()) {
int nodeId = treeNodeIntegerMap.get(node);
ul.tr()
.td().content((String) node.getUserObject()) //TODO:
.td()
Expand All @@ -109,7 +109,6 @@ private int renderNode(HtmlCanvas ul, DefaultMutableTreeNode node, int nodeId) t
._div()
._td()
._tr();
nodeId++;
}
else {
li.span().content(node.getUserObject().toString());
Expand All @@ -128,7 +127,7 @@ private int renderNode(HtmlCanvas ul, DefaultMutableTreeNode node, int nodeId) t
childUl.table(class_("table card-table table-striped table-condensed mb-0"))
.tbody();
// Recursively render the child node
nodeId = renderNode(childUl, childNode, nodeId);
renderNode(childUl, childNode);
if (childNode.isLeaf())
childUl._tbody()._table();
}
Expand All @@ -139,7 +138,6 @@ private int renderNode(HtmlCanvas ul, DefaultMutableTreeNode node, int nodeId) t
// End the list item
if (li != null)
li._li();
return nodeId;
}

@Override
Expand All @@ -149,7 +147,7 @@ public void renderOn(HtmlCanvas html) throws IOException {
HtmlCanvas ul = html.div(class_("tree-root")).ul();

// Recursively process each node
renderNode(ul, root,0);
renderNode(ul, root);

// Close the list and div
ul._ul()._div();
Expand Down

0 comments on commit ca4ffdd

Please sign in to comment.