blob: 04f6d95fe67d65b725181abd25945c3715c48611 [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.idea.svn.dialogs.browser;
import org.jetbrains.idea.svn.dialogs.RepositoryBrowserComponent;
import org.jetbrains.idea.svn.dialogs.RepositoryTreeNode;
import org.jetbrains.idea.svn.dialogs.browserCache.Expander;
import org.jetbrains.idea.svn.dialogs.browserCache.KeepingExpandedExpander;
import javax.swing.tree.TreeNode;
import java.util.Enumeration;
public abstract class AbstractOpeningExpander implements Expander {
private final RepositoryBrowserComponent myBrowser;
private final KeepingExpandedExpander myKeepingExpander;
private final String mySelectionPath;
protected AbstractOpeningExpander(final RepositoryBrowserComponent browser, final String selectionPath) {
myBrowser = browser;
myKeepingExpander = new KeepingExpandedExpander(browser);
mySelectionPath = selectionPath;
}
public void onBeforeRefresh(final RepositoryTreeNode node) {
myKeepingExpander.onBeforeRefresh(node);
}
protected enum ExpandVariants {
DO_NOTHING,
EXPAND_AND_EXIT,
EXPAND_CONTINUE
}
protected abstract ExpandVariants expandNode(final String url);
protected abstract boolean checkChild(final String childUrl);
public void onAfterRefresh(final RepositoryTreeNode node) {
myKeepingExpander.onAfterRefresh(node);
if (node.isLeaf()) {
return;
}
final String myUrl = node.getURL().toString();
final ExpandVariants expandVariant = expandNode(myUrl);
if (ExpandVariants.DO_NOTHING.equals(expandVariant)) {
return;
}
// then expanded
myBrowser.expandNode(node);
if (ExpandVariants.EXPAND_AND_EXIT.equals(expandVariant)) {
removeSelf();
} else {
final Enumeration children = node.children();
while (children.hasMoreElements()) {
final TreeNode treeNode = (TreeNode) children.nextElement();
if (treeNode instanceof RepositoryTreeNode) {
final RepositoryTreeNode repositoryTreeNode = (RepositoryTreeNode) treeNode;
final String childUrl = repositoryTreeNode.getURL().toString();
if (checkChild(childUrl)) {
if ((mySelectionPath != null) && (mySelectionPath.equals(childUrl))) {
myBrowser.setSelectedNode(repositoryTreeNode);
}
repositoryTreeNode.reload(this, false);
return;
}
}
}
removeSelf();
}
}
private void removeSelf() {
myBrowser.setLazyLoadingExpander(new KeepingExpandedExpander.Factory());
}
}