mirror of https://github.com/zlatinb/muwire
speed up building of ResultTree
parent
378cf8a5d0
commit
0ca754d1da
|
@ -49,7 +49,7 @@ class BrowseModel {
|
|||
private final List<TreeNode> topLevelNodes = new ArrayList<>()
|
||||
|
||||
void mvcGroupInit(Map<String,String> args) {
|
||||
root = new DefaultMutableTreeNode()
|
||||
root = new ResultTreeModel.MutableResultNode()
|
||||
resultsTreeModel = new ResultTreeModel(root)
|
||||
}
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ class SearchTabModel {
|
|||
boolean treeVisible = true
|
||||
|
||||
void mvcGroupInit(Map<String, String> args) {
|
||||
root = new DefaultMutableTreeNode()
|
||||
root = new ResultTreeModel.MutableResultNode()
|
||||
treeModel = new ResultTreeModel(root)
|
||||
core = mvcGroup.parentGroup.model.core
|
||||
uiSettings = application.context.get("ui-settings")
|
||||
|
|
|
@ -4,6 +4,7 @@ import com.muwire.core.search.UIResultEvent
|
|||
|
||||
import javax.swing.tree.DefaultMutableTreeNode
|
||||
import javax.swing.tree.DefaultTreeModel
|
||||
import javax.swing.tree.MutableTreeNode
|
||||
import javax.swing.tree.TreeNode
|
||||
|
||||
class ResultTreeModel extends DefaultTreeModel {
|
||||
|
@ -13,10 +14,9 @@ class ResultTreeModel extends DefaultTreeModel {
|
|||
}
|
||||
|
||||
void addToTree(UIResultEvent event) {
|
||||
def node = root
|
||||
MutableResultNode node = root
|
||||
if (event.path == null || event.path.length == 0) {
|
||||
def child = new DefaultMutableTreeNode()
|
||||
child.setUserObject(event)
|
||||
def child = new MutableResultNode(event)
|
||||
node.add(child)
|
||||
return
|
||||
}
|
||||
|
@ -28,15 +28,10 @@ class ResultTreeModel extends DefaultTreeModel {
|
|||
String hiddenRoot = elements.remove(0)
|
||||
for (String element : elements) {
|
||||
def nodeData = new ResultTreeRenderer.ResultTreeNode(hiddenRoot, element)
|
||||
def elementNode = null
|
||||
for(int i = 0; i < node.childCount; i++) {
|
||||
if (Objects.equals(node.getChildAt(i).getUserObject(), nodeData)) {
|
||||
elementNode = node.getChildAt(i)
|
||||
break
|
||||
}
|
||||
}
|
||||
def elementNode = node.childrenMap.get(nodeData)
|
||||
|
||||
if (elementNode == null) {
|
||||
elementNode = new DefaultMutableTreeNode()
|
||||
elementNode = new MutableResultNode()
|
||||
elementNode.setUserObject(nodeData)
|
||||
node.add(elementNode)
|
||||
}
|
||||
|
@ -44,8 +39,35 @@ class ResultTreeModel extends DefaultTreeModel {
|
|||
node = elementNode
|
||||
}
|
||||
|
||||
def fileNode = new DefaultMutableTreeNode()
|
||||
fileNode.setUserObject(event)
|
||||
def fileNode = new MutableResultNode(event)
|
||||
node.add(fileNode)
|
||||
}
|
||||
|
||||
static class MutableResultNode extends DefaultMutableTreeNode {
|
||||
private final Map<Object, MutableResultNode> childrenMap
|
||||
MutableResultNode() {
|
||||
super()
|
||||
childrenMap = new HashMap<>()
|
||||
}
|
||||
|
||||
MutableResultNode(UIResultEvent event) {
|
||||
super()
|
||||
childrenMap = Collections.emptyMap()
|
||||
setUserObject(event)
|
||||
}
|
||||
|
||||
@Override
|
||||
void removeAllChildren() {
|
||||
if (!childrenMap.isEmpty())
|
||||
childrenMap.clear()
|
||||
super.removeAllChildren()
|
||||
}
|
||||
|
||||
@Override
|
||||
void add(MutableTreeNode newChild) {
|
||||
MutableResultNode mrn = (MutableResultNode) newChild
|
||||
childrenMap.put(mrn.getUserObject(), mrn)
|
||||
super.add(newChild)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import com.muwire.core.search.UIResultEvent
|
|||
import com.muwire.core.util.DataUtil
|
||||
import net.i2p.data.DataHelper
|
||||
|
||||
import javax.swing.tree.DefaultMutableTreeNode
|
||||
import java.util.function.Predicate
|
||||
|
||||
import static com.muwire.gui.Translator.trans
|
||||
|
@ -61,11 +62,13 @@ class ResultTreeRenderer extends DefaultTreeCellRenderer {
|
|||
|
||||
public static class ResultTreeNode {
|
||||
private final String hiddenRoot, element
|
||||
private final int hashCode
|
||||
private int files
|
||||
private long size
|
||||
ResultTreeNode(String hiddenRoot, String element) {
|
||||
this.hiddenRoot = hiddenRoot
|
||||
this.element = element
|
||||
this.hashCode = Objects.hash(hiddenRoot, element)
|
||||
}
|
||||
|
||||
private String getToolTip() {
|
||||
|
@ -82,6 +85,10 @@ class ResultTreeRenderer extends DefaultTreeCellRenderer {
|
|||
size += event.size
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
hashCode
|
||||
}
|
||||
|
||||
public boolean equals(Object o) {
|
||||
if (!(o instanceof ResultTreeNode))
|
||||
return false
|
||||
|
|
Loading…
Reference in New Issue