From d6ca9ca36a428ba48e1e2f2a973ff1bb0f5e6c90 Mon Sep 17 00:00:00 2001 From: tsantalis Date: Sun, 14 Apr 2024 19:42:30 -0400 Subject: [PATCH] Generate file tree based on Map modifiedFilesName --- .../java/gui/webdiff/DirectoryDiffView.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/main/java/gui/webdiff/DirectoryDiffView.java b/src/main/java/gui/webdiff/DirectoryDiffView.java index 2ce4ca41ce..dc53205758 100644 --- a/src/main/java/gui/webdiff/DirectoryDiffView.java +++ b/src/main/java/gui/webdiff/DirectoryDiffView.java @@ -5,17 +5,66 @@ import org.rendersnake.Renderable; import java.io.IOException; +import java.util.Enumeration; import java.util.Map; import java.util.Set; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.TreeNode; + import static org.rendersnake.HtmlAttributesFactory.*; public class DirectoryDiffView implements Renderable { private final DirComparator comperator; + private final DefaultMutableTreeNode root = new DefaultMutableTreeNode("root"); public DirectoryDiffView(DirComparator comperator) { this.comperator = comperator; + for(Map.Entry pair : comperator.getModifiedFilesName().entrySet()) { + String fileName = pair.getValue(); + String[] tokens = fileName.split("/"); + int counter = 1; + for(String token : tokens) { + String pathToNode = concatWithSlash(tokens, counter); + DefaultMutableTreeNode parent = findNode(pathToNode); + if(!parent.getUserObject().equals(token)) { + DefaultMutableTreeNode newChild = new DefaultMutableTreeNode(token); + parent.add(newChild); + } + counter++; + } + } + } + private static String concatWithSlash(String[] tokens, int numberOfTokensToConcat) { + StringBuilder sb = new StringBuilder(); + int index = 0; + for(String token : tokens) { + if(index < numberOfTokensToConcat) { + sb.append(token); + } + if(index < numberOfTokensToConcat - 1) { + sb.append("/"); + } + index++; + } + return sb.toString(); + } + + private DefaultMutableTreeNode findNode(String pathToNode) { + String[] tokens = pathToNode.split("/"); + Enumeration enumeration = root.children(); + int index = 0; + DefaultMutableTreeNode lastNode = null; + while(enumeration.hasMoreElements() && index < tokens.length) { + DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode)enumeration.nextElement(); + if(treeNode.getUserObject().equals(tokens[index])) { + lastNode = treeNode; + index++; + enumeration = treeNode.children(); + } + } + return lastNode != null ? lastNode : root; } @Override