/*******************************************************************************
* 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.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.web.bindery.event.shared.EventBus;
import org.eclipse.che.ide.CoreLocalizationConstant;
import org.eclipse.che.ide.Resources;
import org.eclipse.che.ide.api.data.tree.Node;
import org.eclipse.che.ide.api.parts.PartStackType;
import org.eclipse.che.ide.api.parts.WorkspaceAgent;
import org.eclipse.che.ide.api.parts.base.BasePresenter;
import org.eclipse.che.ide.api.resources.Resource;
import org.eclipse.che.ide.api.resources.ResourceChangedEvent;
import org.eclipse.che.ide.api.resources.ResourceChangedEvent.ResourceChangedHandler;
import org.eclipse.che.ide.api.resources.ResourceDelta;
import org.eclipse.che.ide.api.selection.Selection;
import org.eclipse.che.ide.resources.tree.ResourceNode;
import org.eclipse.che.ide.ui.smartTree.Tree;
import org.vectomatic.dom.svg.ui.SVGResource;
import java.util.List;
import static org.eclipse.che.ide.api.resources.ResourceDelta.REMOVED;
/**
* Presenter for the searching some text in the workspace.
*
* @author Valeriy Svydenko
* @author Vlad Zhukovskyi
*/
@Singleton
public class FindResultPresenter extends BasePresenter implements FindResultView.ActionDelegate,
ResourceChangedHandler {
private final WorkspaceAgent workspaceAgent;
private final CoreLocalizationConstant localizationConstant;
private final Resources resources;
private final FindResultView view;
@Inject
public FindResultPresenter(WorkspaceAgent workspaceAgent,
CoreLocalizationConstant localizationConstant,
Resources resources,
FindResultView view,
EventBus eventBus) {
this.workspaceAgent = workspaceAgent;
this.localizationConstant = localizationConstant;
this.resources = resources;
this.view = view;
eventBus.addHandler(ResourceChangedEvent.getType(), this);
view.setDelegate(this);
}
@Override
public String getTitle() {
return localizationConstant.actionFullTextSearch();
}
@Override
public IsWidget getView() {
return view;
}
@Override
public String getTitleToolTip() {
return localizationConstant.actionFullTextSearchDescription();
}
@Override
public SVGResource getTitleImage() {
return (resources.find());
}
@Override
public void go(AcceptsOneWidget container) {
container.setWidget(view);
}
/**
* Activate Find results part and showing all occurrences.
*
* @param resources
* list of files which contains requested text
* @param request
* requested text
*/
public void handleResponse(Resource[] resources, String request) {
workspaceAgent.openPart(this, PartStackType.INFORMATION);
workspaceAgent.setActivePart(this);
view.showResults(resources, request);
}
@Override
public void onSelectionChanged(List<Node> selection) {
setSelection(new Selection<>(selection));
}
@Override
@SuppressWarnings("unchecked")
public void onResourceChanged(ResourceChangedEvent event) {
final ResourceDelta delta = event.getDelta();
final Tree tree = view.getTree();
if (delta.getKind() == REMOVED) {
for (Node node : tree.getNodeStorage().getAll()) {
if (node instanceof ResourceNode && ((ResourceNode)node).getData().getLocation().equals(delta.getResource().getLocation())) {
tree.getNodeStorage().remove(node);
return;
}
}
}
}
}