summaryrefslogtreecommitdiff
path: root/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/RepositoryTreeNode.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/RepositoryTreeNode.java')
-rw-r--r--plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/RepositoryTreeNode.java86
1 files changed, 30 insertions, 56 deletions
diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/RepositoryTreeNode.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/RepositoryTreeNode.java
index f21ca1735ff4..90f617ecad72 100644
--- a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/RepositoryTreeNode.java
+++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/RepositoryTreeNode.java
@@ -15,9 +15,12 @@
*/
package org.jetbrains.idea.svn.dialogs;
+import com.intellij.CommonBundle;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.util.NotNullFunction;
+import com.intellij.util.containers.ContainerUtil;
+import com.intellij.util.containers.FilteringIterator;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.idea.svn.SvnVcs;
@@ -27,7 +30,6 @@ import org.jetbrains.idea.svn.dialogs.browserCache.NodeLoadState;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.internal.util.SVNPathUtil;
-import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
import java.util.ArrayList;
import java.util.Collections;
@@ -37,16 +39,16 @@ import java.util.List;
public class RepositoryTreeNode implements TreeNode, Disposable {
private TreeNode myParentNode;
- private List<TreeNode> myChildren;
+ @NotNull private final List<TreeNode> myChildren;
private final RepositoryTreeModel myModel;
private final SVNURL myURL;
private final Object myUserObject;
- private final NodeLoadState myLoadState;
+ @NotNull private final NodeLoadState myLoadState;
private NodeLoadState myChildrenLoadState;
public RepositoryTreeNode(RepositoryTreeModel model, TreeNode parentNode,
- @NotNull SVNURL url, Object userObject, final NodeLoadState state) {
+ @NotNull SVNURL url, Object userObject, @NotNull NodeLoadState state) {
myParentNode = parentNode;
myURL = url;
@@ -54,6 +56,7 @@ public class RepositoryTreeNode implements TreeNode, Disposable {
myUserObject = userObject;
myLoadState = state;
+ myChildren = ContainerUtil.newArrayList();
myChildrenLoadState = NodeLoadState.EMPTY;
}
@@ -113,10 +116,10 @@ public class RepositoryTreeNode implements TreeNode, Disposable {
return SVNPathUtil.tail(myURL.getPath());
}
- public void reload(final Expander expander, final boolean removeCurrentChildren) {
+ public void reload(@NotNull Expander expander, boolean removeCurrentChildren) {
ApplicationManager.getApplication().assertIsDispatchThread();
- if (removeCurrentChildren || (myChildren == null)) {
+ if (removeCurrentChildren || NodeLoadState.EMPTY.equals(myChildrenLoadState)) {
initChildren();
}
@@ -124,15 +127,15 @@ public class RepositoryTreeNode implements TreeNode, Disposable {
}
private void initChildren() {
- myChildren = new ArrayList<TreeNode>();
- myChildren.add(new DefaultMutableTreeNode("Loading"));
+ myChildren.clear();
+ myChildren.add(new SimpleTextNode(CommonBundle.getLoadingTreeNodeText()));
myChildrenLoadState = NodeLoadState.LOADING;
}
private List getChildren() {
ApplicationManager.getApplication().assertIsDispatchThread();
-
- if (myChildren == null) {
+
+ if (NodeLoadState.EMPTY.equals(myChildrenLoadState)) {
initChildren();
myModel.getCacheLoader().load(this, myModel.getLazyLoadingExpander());
}
@@ -145,10 +148,7 @@ public class RepositoryTreeNode implements TreeNode, Disposable {
@Nullable
public DirectoryEntry getSVNDirEntry() {
- if (myUserObject instanceof DirectoryEntry) {
- return (DirectoryEntry) myUserObject;
- }
- return null;
+ return myUserObject instanceof DirectoryEntry ? (DirectoryEntry)myUserObject : null;
}
public void dispose() {
@@ -164,35 +164,19 @@ public class RepositoryTreeNode implements TreeNode, Disposable {
@NotNull
public List<TreeNode> getAllAlreadyLoadedChildren() {
- if (myChildren != null) {
- final List<TreeNode> result = new ArrayList<TreeNode>(myChildren.size());
- for (TreeNode child : myChildren) {
- result.add(child);
- }
- return result;
- }
- return Collections.emptyList();
+ return ContainerUtil.newArrayList(myChildren);
}
@NotNull
public List<RepositoryTreeNode> getAlreadyLoadedChildren() {
- if (myChildren != null) {
- final List<RepositoryTreeNode> result = new ArrayList<RepositoryTreeNode>(myChildren.size());
- for (TreeNode child : myChildren) {
- if (child instanceof RepositoryTreeNode) {
- result.add((RepositoryTreeNode) child);
- }
- }
- return result;
- }
- return Collections.emptyList();
+ return ContainerUtil.collect(myChildren.iterator(), FilteringIterator.instanceOf(RepositoryTreeNode.class));
}
public boolean isDisposed() {
return myModel.isDisposed();
}
- public void setChildren(final List<DirectoryEntry> children, final NodeLoadState state) {
+ public void setChildren(@NotNull List<DirectoryEntry> children, @NotNull NodeLoadState state) {
final List<TreeNode> nodes = new ArrayList<TreeNode>();
for (final DirectoryEntry entry : children) {
if (!myModel.isShowFiles() && !entry.isDirectory()) {
@@ -213,19 +197,17 @@ public class RepositoryTreeNode implements TreeNode, Disposable {
}
public void setAlienChildren(final List<TreeNode> children, final NodeLoadState oldState) {
- if (myChildren == null) {
- myChildren = new ArrayList<TreeNode>();
- } else {
- myChildren.clear();
- }
+ myChildren.clear();
for (TreeNode child : children) {
if (child instanceof RepositoryTreeNode) {
((RepositoryTreeNode) child).setParentNode(this);
myChildren.add(child);
myChildrenLoadState = oldState;
- } else if (child instanceof DefaultMutableTreeNode) {
- myChildren.add(new DefaultMutableTreeNode(((DefaultMutableTreeNode) child).getUserObject()));
+ }
+ else if (child instanceof SimpleTextNode) {
+ SimpleTextNode node = (SimpleTextNode)child;
+ myChildren.add(new SimpleTextNode(node.getText(), node.isError()));
myChildrenLoadState = oldState;
}
}
@@ -233,13 +215,9 @@ public class RepositoryTreeNode implements TreeNode, Disposable {
myModel.reload(this);
}
- public void setErrorNode(final String text, final NodeLoadState state) {
- if (myChildren == null) {
- myChildren = new ArrayList<TreeNode>();
- }
+ public void setErrorNode(@NotNull String text) {
myChildren.clear();
- myChildren.add(new DefaultMutableTreeNode(text));
-
+ myChildren.add(new SimpleTextNode(text, true));
myChildrenLoadState = NodeLoadState.ERROR;
myModel.reload(this);
}
@@ -257,24 +235,20 @@ public class RepositoryTreeNode implements TreeNode, Disposable {
return myModel.findByUrl(this);
}
- public RepositoryTreeModel getModel() {
- return myModel;
- }
-
public NodeLoadState getChildrenLoadState() {
return myChildrenLoadState;
}
- public void doOnSubtree(final NotNullFunction<RepositoryTreeNode, Object> function) {
- final SubTreeWalker walker = new SubTreeWalker(this, function);
- walker.execute();
+ public void doOnSubtree(@NotNull NotNullFunction<RepositoryTreeNode, Object> function) {
+ new SubTreeWalker(this, function).execute();
}
private static class SubTreeWalker {
- private final RepositoryTreeNode myNode;
- private final NotNullFunction<RepositoryTreeNode, Object> myFunction;
- private SubTreeWalker(final RepositoryTreeNode node, final NotNullFunction<RepositoryTreeNode, Object> function) {
+ @NotNull private final RepositoryTreeNode myNode;
+ @NotNull private final NotNullFunction<RepositoryTreeNode, Object> myFunction;
+
+ private SubTreeWalker(@NotNull RepositoryTreeNode node, @NotNull NotNullFunction<RepositoryTreeNode, Object> function) {
myNode = node;
myFunction = function;
}