/*******************************************************************************
* Copyright (c) 2004, 2012 Tasktop Technologies and others.
* 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:
* Tasktop Technologies - initial API and implementation
* Manuel Doninger - improvements for bug 364155
*******************************************************************************/
package org.eclipse.mylyn.resources.ui;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.mylyn.context.core.IInteractionContext;
import org.eclipse.mylyn.context.core.IInteractionElement;
import org.eclipse.mylyn.internal.resources.ui.ResourcesUiBridgePlugin;
import org.eclipse.mylyn.monitor.core.InteractionEvent;
/**
* @author Mik Kersten
* @author Manuel Doninger
* @author Steffen Pingel
* @since 3.0
*/
public final class ResourcesUi {
public static void addResourceToContext(final Set<IResource> resources, final InteractionEvent.Kind interactionKind) {
ResourcesUiBridgePlugin.getInterestUpdater().addResourceToContext(resources, interactionKind);
}
/**
* Returns all projects that are referenced in <code>context</code>.
*
* @since 3.8
*/
public static Set<IProject> getProjects(IInteractionContext context) {
List<IInteractionElement> allElements = context.getAllElements();
Set<IProject> projectsInContext = new HashSet<IProject>();
IWorkspace workspace = ResourcesPlugin.getWorkspace();
List<IProject> projectsInWorkspace = new LinkedList<IProject>();
for (IProject p : workspace.getRoot().getProjects()) {
if (p.exists()) {
projectsInWorkspace.add(p);
}
}
for (IInteractionElement element : allElements) {
String handle = element.getHandleIdentifier();
IPath path = new Path(handle);
if (path.segmentCount() == 1 && path.isValidPath(handle)) {
String projectName = handle.substring(1);
IProject project = workspace.getRoot().getProject(projectName);
if (projectsInWorkspace.contains(project)) {
projectsInContext.add(project);
}
}
}
return projectsInContext;
}
}