package net.sourceforge.tagsea.resources.popup.actions;
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.TreeSet;
import net.sourceforge.tagsea.TagSEAPlugin;
import net.sourceforge.tagsea.core.ITag;
import net.sourceforge.tagsea.core.IWaypoint;
import net.sourceforge.tagsea.core.ui.TagSEAView;
import net.sourceforge.tagsea.resources.ResourceWaypointUtils;
import org.eclipse.core.resources.IResource;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Event;
import org.eclipse.ui.IActionDelegate2;
import org.eclipse.ui.IObjectActionDelegate;
import org.eclipse.ui.IWorkbenchPart;
/**
* An action that selects the tags in the tags viewer, then selects the waypoints in the waypoints viewer for the
* selected resource.
*/
public class ShowWaypointsAction implements IObjectActionDelegate,
IActionDelegate2 {
private LinkedList<IResource> resources;
private LinkedList<IWaypoint> waypoints;
public void setActivePart(IAction action, IWorkbenchPart targetPart) {
}
public void run(IAction action) {
TagSEAView tView = TagSEAPlugin.getDefault().getUI().showTagSEAView();
if (tView != null) {
//get all of the tags and show select them in the tags view
TreeSet<ITag> tagSet = new TreeSet<ITag>();
for (IWaypoint wp : this.waypoints) {
tagSet.addAll(Arrays.asList(wp.getTags()));
}
tView.setSelectedTags(tagSet.toArray(new ITag[tagSet.size()]));
}
}
public void selectionChanged(IAction action, ISelection selection) {
this.resources = new LinkedList<IResource>();
if (selection instanceof IStructuredSelection) {
Iterator i = ((IStructuredSelection)selection).iterator();
while (i.hasNext()) {
resources.add((IResource) i.next());
}
}
refreshWaypoints();
action.setEnabled(waypoints.size() > 0);
}
private void refreshWaypoints() {
this.waypoints = new LinkedList<IWaypoint>();
if (resources != null) {
for (IResource resource : resources) {
IWaypoint[] wps = ResourceWaypointUtils.getWaypointsForResource(resource, true);
this.waypoints.addAll(Arrays.asList(wps));
}
}
}
public void dispose() {
}
public void init(IAction action) {
}
public void runWithEvent(IAction action, Event event) {
run(action);
}
}