/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.ide.search.presentation; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; import org.eclipse.che.api.promises.client.Promise; import org.eclipse.che.api.promises.client.js.Promises; import org.eclipse.che.ide.CoreLocalizationConstant; import org.eclipse.che.ide.api.data.tree.AbstractTreeNode; import org.eclipse.che.ide.api.data.tree.Node; import org.eclipse.che.ide.api.resources.File; import org.eclipse.che.ide.api.resources.Resource; import org.eclipse.che.ide.resources.tree.FileNode; import org.eclipse.che.ide.resources.tree.ResourceNode; import org.eclipse.che.ide.ui.smartTree.compare.NameComparator; import org.eclipse.che.ide.ui.smartTree.presentation.HasPresentation; import org.eclipse.che.ide.ui.smartTree.presentation.NodePresentation; import org.eclipse.che.ide.util.Pair; import javax.validation.constraints.NotNull; import java.util.ArrayList; import java.util.Collections; import java.util.List; import static org.eclipse.che.ide.api.resources.Resource.FILE; import static org.eclipse.che.ide.api.theme.Style.getEditorInfoTextColor; /** * Tree node represent search result. * * @author Valeriy Svydenko * @author Vlad Zhukovskyi */ public class FindResultGroupNode extends AbstractTreeNode implements HasPresentation { private final CoreLocalizationConstant locale; private final ResourceNode.NodeFactory nodeFactory; private NodePresentation nodePresentation; private Resource[] findResults; private String request; @Inject public FindResultGroupNode(CoreLocalizationConstant locale, ResourceNode.NodeFactory nodeFactory, @Assisted Resource[] findResult, @Assisted String request) { this.locale = locale; this.nodeFactory = nodeFactory; this.findResults = findResult; this.request = request; } /** {@inheritDoc} */ @Override protected Promise<List<Node>> getChildrenImpl() { List<Node> fileNodes = new ArrayList<>(); for (Resource resource : findResults) { if (resource.getResourceType() != FILE) { continue; } FileNode node = nodeFactory.newFileNode((File)resource, null); NodePresentation presentation = node.getPresentation(true); presentation.setInfoText(resource.getLocation().toString()); presentation.setInfoTextWrapper(Pair.of("(", ")")); presentation.setInfoTextCss("color:" + getEditorInfoTextColor() + ";font-size: 11px"); fileNodes.add(node); } //sort nodes by file name Collections.sort(fileNodes, new NameComparator()); return Promises.resolve(fileNodes); } /** {@inheritDoc} */ @Override public NodePresentation getPresentation(boolean update) { if (nodePresentation == null) { nodePresentation = new NodePresentation(); updatePresentation(nodePresentation); } if (update) { updatePresentation(nodePresentation); } return nodePresentation; } /** {@inheritDoc} */ @Override public String getName() { return locale.actionFullTextSearch(); } /** {@inheritDoc} */ @Override public boolean isLeaf() { return false; } /** {@inheritDoc} */ @Override public void updatePresentation(@NotNull NodePresentation presentation) { StringBuilder resultTitle = new StringBuilder("Find Occurrences of '" + request + "\' (" + findResults.length + " occurrence"); if (findResults.length > 1) { resultTitle.append("s)"); } else { resultTitle.append(")"); } presentation.setPresentableText(resultTitle.toString()); } }