diff options
Diffstat (limited to 'plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/browserCache')
3 files changed, 52 insertions, 54 deletions
diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/browserCache/CacheLoader.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/browserCache/CacheLoader.java index d80efb97a123..f8553d5c66c3 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/browserCache/CacheLoader.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/browserCache/CacheLoader.java @@ -16,6 +16,7 @@ package org.jetbrains.idea.svn.dialogs.browserCache; import com.intellij.openapi.components.ServiceManager; +import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.svn.browse.DirectoryEntry; import org.jetbrains.idea.svn.dialogs.RepositoryTreeNode; @@ -23,7 +24,8 @@ import javax.swing.*; import java.util.List; public class CacheLoader extends Loader { - private final Loader myRepositoryLoader; + + @NotNull private final Loader myRepositoryLoader; public static Loader getInstance() { return ServiceManager.getService(Loader.class); @@ -34,7 +36,7 @@ public class CacheLoader extends Loader { myRepositoryLoader = new RepositoryLoader(myCache); } - public void load(final RepositoryTreeNode node, final Expander expander) { + public void load(@NotNull final RepositoryTreeNode node, @NotNull final Expander expander) { SwingUtilities.invokeLater(new Runnable(){ public void run() { final String nodeUrl = node.getURL().toString(); @@ -53,15 +55,8 @@ public class CacheLoader extends Loader { }); } - public void forceRefresh(final String repositoryRootUrl) { - myCache.clear(repositoryRootUrl); - } - + @NotNull protected NodeLoadState getNodeLoadState() { return NodeLoadState.CACHED; } - - public Loader getRepositoryLoader() { - return myRepositoryLoader; - } } diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/browserCache/Loader.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/browserCache/Loader.java index ab2b6ddb67f3..62d7ec10024a 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/browserCache/Loader.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/browserCache/Loader.java @@ -15,51 +15,52 @@ */ package org.jetbrains.idea.svn.dialogs.browserCache; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.svn.browse.DirectoryEntry; import org.jetbrains.idea.svn.dialogs.RepositoryTreeNode; import java.util.List; public abstract class Loader { - protected final SvnRepositoryCache myCache; - protected Loader(final SvnRepositoryCache cache) { + @NotNull protected final SvnRepositoryCache myCache; + + protected Loader(@NotNull SvnRepositoryCache cache) { myCache = cache; } - public abstract void load(final RepositoryTreeNode node, final Expander afterRefreshExpander); - public abstract void forceRefresh(final String repositoryRootUrl); + public abstract void load(@NotNull RepositoryTreeNode node, @NotNull Expander afterRefreshExpander); + + @NotNull protected abstract NodeLoadState getNodeLoadState(); - protected void refreshNodeError(final RepositoryTreeNode node, final String text) { - if (node.isDisposed()) { - return; - } - final RepositoryTreeNode existingNode = node.getNodeWithSamePathUnderModelRoot(); - if (existingNode == null) { - return; - } - if (existingNode.isDisposed()) { - return; - } + protected void refreshNodeError(@NotNull RepositoryTreeNode node, @NotNull String text) { + RepositoryTreeNode existingNode = findExistingNode(node); - existingNode.setErrorNode(text, getNodeLoadState()); + if (existingNode != null) { + existingNode.setErrorNode(text); + } } - protected void refreshNode(final RepositoryTreeNode node, final List<DirectoryEntry> data, final Expander expander) { - if (node.isDisposed()) { - return; - } - final RepositoryTreeNode existingNode = node.getNodeWithSamePathUnderModelRoot(); - if (existingNode == null) { - return; + protected void refreshNode(@NotNull RepositoryTreeNode node, @NotNull List<DirectoryEntry> data, @NotNull Expander expander) { + RepositoryTreeNode existingNode = findExistingNode(node); + + if (existingNode != null) { + expander.onBeforeRefresh(existingNode); + existingNode.setChildren(data, getNodeLoadState()); + expander.onAfterRefresh(existingNode); } + } - if (existingNode.isDisposed()) { - return; + @Nullable + private static RepositoryTreeNode findExistingNode(@NotNull RepositoryTreeNode node) { + RepositoryTreeNode result = null; + + if (!node.isDisposed()) { + result = node.getNodeWithSamePathUnderModelRoot(); } - expander.onBeforeRefresh(existingNode); - existingNode.setChildren(data, getNodeLoadState()); - expander.onAfterRefresh(existingNode); + + return result == null || result.isDisposed() ? null : result; } } diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/browserCache/RepositoryLoader.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/browserCache/RepositoryLoader.java index 319699cfc1b8..6786d8648300 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/browserCache/RepositoryLoader.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/browserCache/RepositoryLoader.java @@ -21,6 +21,7 @@ import com.intellij.openapi.progress.EmptyProgressIndicator; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.util.Pair; import com.intellij.openapi.vcs.VcsException; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.svn.SvnVcs; import org.jetbrains.idea.svn.api.Depth; @@ -28,26 +29,29 @@ import org.jetbrains.idea.svn.auth.SvnAuthenticationProvider; import org.jetbrains.idea.svn.browse.DirectoryEntry; import org.jetbrains.idea.svn.browse.DirectoryEntryConsumer; import org.jetbrains.idea.svn.dialogs.RepositoryTreeNode; -import org.tmatesoft.svn.core.*; +import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.wc.SVNRevision; import org.tmatesoft.svn.core.wc2.SvnTarget; import javax.swing.*; -import java.util.*; +import java.util.Collection; +import java.util.List; +import java.util.Queue; +import java.util.TreeSet; class RepositoryLoader extends Loader { // may be several requests if: several same-level nodes are expanded simultaneosly; or browser can be opening into some expanded state - private final Queue<Pair<RepositoryTreeNode, Expander>> myLoadQueue; + @NotNull private final Queue<Pair<RepositoryTreeNode, Expander>> myLoadQueue; private boolean myQueueProcessorActive; - RepositoryLoader(final SvnRepositoryCache cache) { + RepositoryLoader(@NotNull SvnRepositoryCache cache) { super(cache); - myLoadQueue = new LinkedList<Pair<RepositoryTreeNode, Expander>>(); + myLoadQueue = ContainerUtil.newLinkedList(); myQueueProcessorActive = false; } - public void load(final RepositoryTreeNode node, final Expander afterRefreshExpander) { + public void load(@NotNull RepositoryTreeNode node, @NotNull Expander afterRefreshExpander) { ApplicationManager.getApplication().assertIsDispatchThread(); final Pair<RepositoryTreeNode, Expander> data = Pair.create(node, afterRefreshExpander); @@ -59,12 +63,12 @@ class RepositoryLoader extends Loader { } } - private void setResults(final Pair<RepositoryTreeNode, Expander> data, final List<DirectoryEntry> children) { + private void setResults(@NotNull Pair<RepositoryTreeNode, Expander> data, @NotNull List<DirectoryEntry> children) { myCache.put(data.first.getURL().toString(), children); refreshNode(data.first, children, data.second); } - private void setError(final Pair<RepositoryTreeNode, Expander> data, final String message) { + private void setError(@NotNull Pair<RepositoryTreeNode, Expander> data, @NotNull String message) { myCache.put(data.first.getURL().toString(), message); refreshNodeError(data.first, message); } @@ -85,7 +89,7 @@ class RepositoryLoader extends Loader { } } - private void startLoadTask(final Pair<RepositoryTreeNode, Expander> data) { + private void startLoadTask(@NotNull final Pair<RepositoryTreeNode, Expander> data) { final ModalityState state = ModalityState.current(); ApplicationManager.getApplication().executeOnPooledThread(new Runnable() { @Override @@ -101,18 +105,16 @@ class RepositoryLoader extends Loader { }); } - public void forceRefresh(final String repositoryRootUrl) { - // ? remove - } - + @NotNull protected NodeLoadState getNodeLoadState() { return NodeLoadState.REFRESHED; } private class LoadTask implements Runnable { - private final Pair<RepositoryTreeNode, Expander> myData; - private LoadTask(final Pair<RepositoryTreeNode, Expander> data) { + @NotNull private final Pair<RepositoryTreeNode, Expander> myData; + + private LoadTask(@NotNull Pair<RepositoryTreeNode, Expander> data) { myData = data; } @@ -147,7 +149,7 @@ class RepositoryLoader extends Loader { SwingUtilities.invokeLater(new Runnable() { public void run() { - setResults(myData, new ArrayList<DirectoryEntry>(entries)); + setResults(myData, ContainerUtil.newArrayList(entries)); startNext(); } }); |