diff options
Diffstat (limited to 'src/com/google/devrel/cluestick/studioclient/SearchResultsTree.java')
-rw-r--r-- | src/com/google/devrel/cluestick/studioclient/SearchResultsTree.java | 289 |
1 files changed, 0 insertions, 289 deletions
diff --git a/src/com/google/devrel/cluestick/studioclient/SearchResultsTree.java b/src/com/google/devrel/cluestick/studioclient/SearchResultsTree.java deleted file mode 100644 index c8f0c67..0000000 --- a/src/com/google/devrel/cluestick/studioclient/SearchResultsTree.java +++ /dev/null @@ -1,289 +0,0 @@ -/* - * Copyright (C) 2016 The Android Open Source Project - * - * 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 com.google.devrel.cluestick.studioclient; - -import com.appspot.cluestick_server.search.model.CodeResult; -import com.appspot.cluestick_server.search.model.Result; - -import com.intellij.icons.AllIcons; -import com.intellij.ui.ColoredTreeCellRenderer; -import com.intellij.ui.SimpleTextAttributes; -import com.intellij.ui.treeStructure.Tree; -import com.intellij.util.ui.UIUtil; - -import org.jetbrains.annotations.NotNull; - -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import javax.swing.Icon; -import javax.swing.JTree; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.TreeNode; -import javax.swing.tree.TreePath; - -/** - * Tree structure containing search results for display in a JTree. Results are displayed as a - * collection of repos. This tree is not expanded by default. - */ -public final class SearchResultsTree extends Tree { - private static final SimpleTextAttributes SUFFIX_ATTRIBUTES = new SimpleTextAttributes( - SimpleTextAttributes.STYLE_ITALIC, UIUtil.getInactiveTextColor()); - - private final LayoutNode symbolHeading; - private final LayoutNode resultHeading; - - public SearchResultsTree(Symbol symbol, List<Result> results) { - super(new DefaultMutableTreeNode()); - DefaultMutableTreeNode top = (DefaultMutableTreeNode) getModel().getRoot(); - - setRootVisible(false); - setCellRenderer(new CellRenderer()); - - symbolHeading = new LayoutNode(); - symbolHeading.text = "Symbol"; - symbolHeading.isHeading = true; - top.add(symbolHeading); - - LayoutNode symbolNode = new LayoutNode(); - if (symbol.packageName != null && !symbol.packageName.isEmpty()) { - symbolNode.prefix = symbol.packageName + "."; - } - symbolNode.icon = AllIcons.Nodes.EjbFinderMethod; - symbolNode.text = symbol.symbolName; - symbolHeading.add(symbolNode); - - resultHeading = new LayoutNode(); - resultHeading.text = "Found results"; - resultHeading.count = results.size(); - resultHeading.isHeading = true; - top.add(resultHeading); - - addResults(resultHeading, results); - } - - /** - * Determines whether the {@link Result} has code. - * @param result The result to check. - * @return Whether the result safely has code. - */ - public static boolean hasCode(Result result) { - return result.getCode() != null && result.getCode().getLines() != null; - } - - private void addResults(DefaultMutableTreeNode parent, List<Result> results) { - Map<String, RepoNode> repoNodes = new LinkedHashMap<String, RepoNode>(); // linked provides insert ordering - - for (Result result : results) { - if (!hasCode(result)) { - parent.add(new ResultNode(result)); - continue; - } - - // If this is a code node, then group by repo/branch pair. Retrieve or create the RepoNode - // for this pair, add and update its total count. - CodeResult code = result.getCode(); - String key = String.format("%s:%s", code.getRepo(), code.getBranch()); - RepoNode repoNode = repoNodes.get(key); - if (repoNode == null) { - repoNode = new RepoNode(code.getRepo(), code.getBranch()); - repoNodes.put(key, repoNode); - } - repoNode.add(new ResultNode(result)); - } - - // Now, add the repo nodes in order of first seen. - for (RepoNode repoNode : repoNodes.values()) { - parent.add(repoNode); - } - } - - /** - * RepoNode represents a whole repository (aka, repo/branch). - */ - private static class RepoNode extends DefaultMutableTreeNode implements SearchResultsNode { - private final String repo; - private final String branch; - private final ResultUtils.GitHubInfo info; - - RepoNode(String repo, String branch) { - this.repo = repo; - this.branch = branch; - - info = ResultUtils.parseRepoName(repo); - } - - public Icon getIcon() { - if (info != null) { - return IconFetcher.GitHub; - } - return null; - } - - public String getSuffix() { - if (this.branch == null || this.branch.isEmpty() || this.branch.equals("master")) { - return null; - } - return this.branch; - } - - public String getPrefix() { - if (info != null) { - return info.user + "/"; - } - return null; - } - - @Override - public String getURL() { - if (info != null) { - // TODO(thorogood): Deal with non-master branch. - return String.format("https://github.com/%s/%s", info.user, info.repo); - } - return null; - } - - @Override - public Result getSearchResult() { - return null; - } - - @Override - public String toString() { - if (info != null) { - return info.repo; - } - return this.repo; - } - } - - - /** - * LayoutNode is a generic node for use inside SearchResultsTree. - */ - private static class LayoutNode extends DefaultMutableTreeNode { - String prefix; - String suffix; - String text; - Icon icon; - boolean isHeading; - int count = -1; - - @NotNull - public String getText() { - if (text == null) { - return "?"; - } - return text; - } - } - - /** - * Node representing a {@link Result}. - */ - public static class ResultNode extends DefaultMutableTreeNode implements SearchResultsNode { - public ResultNode(Result result) { - super(result); - } - - @Override - public String getURL() { - return getSearchResult().getUrl(); - } - - @Override - public Result getSearchResult() { - return (Result) getUserObject(); - } - } - - private static class CellRenderer extends ColoredTreeCellRenderer { - @Override - public void customizeCellRenderer(JTree tree, Object value, - boolean selected, boolean expanded, boolean leaf, - int row, boolean hasFocus) { - - if (value instanceof LayoutNode) { - LayoutNode node = (LayoutNode) value; - setIcon(node.icon); - - if (node.prefix != null) { - append(node.prefix, SimpleTextAttributes.GRAYED_ATTRIBUTES, false); - } - - SimpleTextAttributes defaultAttributes = SimpleTextAttributes.REGULAR_ATTRIBUTES; - if (node.isHeading) { - defaultAttributes = SimpleTextAttributes.REGULAR_BOLD_ATTRIBUTES; - } - append(node.getText(), defaultAttributes, true); - - if (node.suffix != null) { - append(" " + node.suffix, SUFFIX_ATTRIBUTES, false); - } - if (node.count >= 0) { - String format = " (%d result" + (node.count != 1 ? "s" : "") + ")"; - append(String.format(format, node.count), SUFFIX_ATTRIBUTES, false); - } - return; - } - - if (value instanceof RepoNode) { - RepoNode node = (RepoNode) value; - setIcon(node.getIcon()); - - String prefix = node.getPrefix(); - if (prefix != null) { - append(prefix, SimpleTextAttributes.GRAYED_ATTRIBUTES, false); - } - - append(node.toString(), SimpleTextAttributes.REGULAR_ATTRIBUTES, true); - - String suffix = node.getSuffix(); - if (suffix != null) { - append(" " + suffix, SimpleTextAttributes.GRAYED_ATTRIBUTES, false); - } - - return; - } - - if (value instanceof ResultNode) { - ResultNode node = (ResultNode) value; - Result result = node.getSearchResult(); - - if (!hasCode(result)) { - setIcon(AllIcons.Actions.CreateFromUsage); // "light bulb" icon - append(result.getText()); - return; - } - - setIcon(AllIcons.Actions.EditSource); - - String baseName = ResultUtils.getBaseName(result.getCode().getPath()); - append(baseName, SimpleTextAttributes.REGULAR_ATTRIBUTES, true); - - int count = result.getCode().getLines().size(); - String format = " (%d result" + (count != 1 ? "s" : "") + ")"; - append(String.format(format, count), SUFFIX_ATTRIBUTES, false); - return; - } - - // This should never happen, but just in case IntelliJ gives us random nodes, then be sure - // to always render something. - append(value.toString()); - } - } -} |