/* * Copyright 2015 Nokia Solutions and Networks * Licensed under the Apache License, Version 2.0, * see license.txt file for details. */ package org.robotframework.ide.eclipse.main.plugin.tableeditor.handler; import static com.google.common.collect.Lists.newArrayList; import java.util.List; import javax.inject.Named; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.e4.core.di.annotations.Execute; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.search.ui.ISearchQuery; import org.eclipse.search.ui.NewSearchUI; import org.eclipse.search.ui.text.TextSearchQueryProvider; import org.robotframework.ide.eclipse.main.plugin.RedPlugin; import org.robotframework.ide.eclipse.main.plugin.model.LibspecsFolder; import org.robotframework.ide.eclipse.main.plugin.model.RobotFileInternalElement; import org.robotframework.ide.eclipse.main.plugin.tableeditor.handler.FindElementUsagesHandler.E4FindUsagesHandler; import org.robotframework.red.commands.DIParameterizedHandler; import org.robotframework.red.viewers.Selections; public class FindElementUsagesHandler extends DIParameterizedHandler<E4FindUsagesHandler> { public FindElementUsagesHandler() { super(E4FindUsagesHandler.class); } public static class E4FindUsagesHandler { @Execute public void findUsages(@Named(Selections.SELECTION) final IStructuredSelection selection, @Named("org.robotframework.ide.eclipse.findElementUsages.place") final String place) { final RobotFileInternalElement element = Selections.getSingleElement(selection, RobotFileInternalElement.class); final String name = element.getName(); try { final List<IResource> resourcesToLookInto; if ("workspace".equals(place)) { resourcesToLookInto = getResourcesToQuery(ResourcesPlugin.getWorkspace().getRoot()); } else if ("project".equals(place)) { resourcesToLookInto = getResourcesToQuery(element.getSuiteFile().getProject().getProject()); } else { throw new IllegalStateException("Unknown place for searching: " + place); } if (place == null) { return; } final ISearchQuery query = TextSearchQueryProvider.getPreferred().createQuery(name, resourcesToLookInto.toArray(new IResource[0])); NewSearchUI.runQueryInBackground(query); } catch (final CoreException e) { RedPlugin.logError("Unable to find usages of '" + name + "' in " + place, e); } } private List<IResource> getResourcesToQuery(final IWorkspaceRoot workspaceRoot) throws CoreException { final List<IResource> resources = newArrayList(); for (final IResource project : workspaceRoot.members()) { resources.addAll(newArrayList(getResourcesToQuery((IProject) project))); } return resources; } private List<IResource> getResourcesToQuery(final IProject project) throws CoreException { // returns resources from given project excluding libspec folder final List<IResource> resources = newArrayList(); final LibspecsFolder libspecsFolder = LibspecsFolder.get(project); if (!libspecsFolder.exists()) { resources.add(project); return resources; } for (final IResource child : project.members()) { if (!libspecsFolder.getResource().equals(child)) { resources.add(child); } } return resources; } } }