package ca.uvic.chisel.javasketch.ui.internal.views; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Platform; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jface.action.ContributionItem; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.IWorkbenchPartSite; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.menus.CommandContributionItem; import org.eclipse.ui.menus.CommandContributionItemParameter; import ca.uvic.chisel.javasketch.SketchPlugin; import ca.uvic.chisel.javasketch.data.model.IThread; import ca.uvic.chisel.javasketch.data.model.ITraceModel; import ca.uvic.chisel.javasketch.internal.JavaSearchUtils; import ca.uvic.chisel.javasketch.ui.internal.presentation.commands.RevealActivationHandler; public class RevealInThreadContribution extends ContributionItem { // public class RevealInThreadAction extends Action { // // private IJavaElement element; // private IThread thread; // // /** // * @param thread // * @param selection // */ // public RevealInThreadAction(IThread thread, IJavaElement element) { // this.element = element; // this.thread = thread; // } // // /* // * (non-Javadoc) // * @see org.eclipse.jface.action.Action#run() // */ // @Override // public void run() { // IWorkbenchPage page = PlatformUI.getWorkbench() // .getActiveWorkbenchWindow().getActivePage(); // IViewPart part = page.findView(JavaSketchView.VIEW_ID); // if (part instanceof JavaSketchView) { // JavaSketchView sv = (JavaSketchView) part; // List<IActivation> activations = null; // try { // if (element instanceof IMethod) { // activations = JavaSearchUtils.findActivationsForMethod( // thread, (IMethod) element, // new NullProgressMonitor()); // } else if (element instanceof IType) { // activations = JavaSearchUtils.findActivationsForClass( // thread, (IType) element, new NullProgressMonitor()); // } // } catch (CoreException e) { // } // if (activations != null && !activations.isEmpty()) { // IActivation first = activations.get(0); // page.bringToTop(sv); // //sv.reveal(first); // } // // } // } // // /* // * (non-Javadoc) // * @see org.eclipse.jface.action.Action#getText() // */ // @Override // public String getText() { // return thread.getName(); // } // } public RevealInThreadContribution() { } public RevealInThreadContribution(String id) { super(id); } /* * (non-Javadoc) * @see * org.eclipse.jface.action.ContributionItem#fill(org.eclipse.swt.widgets * .Menu, int) */ @Override public void fill(Menu menu, int index) { MenuManager manager = new MenuManager(); fill(manager); IContributionItem items[] = manager.getItems(); for (int i = 0; i < items.length; i++) { items[i].fill(menu, index++); } } /** * @param manager */ private void fill(MenuManager manager) { try { ITraceModel selection = getActiveSelection(); if (selection == null) return; IJavaElement element = JavaSearchUtils.findElement(selection, new NullProgressMonitor()); IThread[] threads = JavaSearchUtils.findThreadsForElement(selection.getTrace(), element); for (IThread thread : threads) { Map<String, String> parameters = new HashMap<String, String>(); parameters.put(RevealActivationHandler.TRACE_PARAMETER, selection.getTrace().getIdentifier()); parameters.put(RevealActivationHandler.THREAD_PARAMETER, thread.getIdentifier()); CommandContributionItemParameter parameter = new CommandContributionItemParameter( PlatformUI.getWorkbench(), null, RevealActivationHandler.COMMAND_ID, parameters, null, null, null, thread.getName(), null, null, SWT.PUSH, null, true ); CommandContributionItem item = new CommandContributionItem(parameter); manager.add(item); } } catch (InterruptedException e) { } catch (CoreException e) { SketchPlugin.getDefault().log(e); } } /** * @return */ private ITraceModel getActiveSelection() { IWorkbenchPartSite site = PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getActivePage().getActivePart() .getSite(); ISelection selection = site.getSelectionProvider().getSelection(); if (selection instanceof IStructuredSelection) { return getTraceModelForSelection((IStructuredSelection) selection); } return null; } private ITraceModel getTraceModelForSelection(IStructuredSelection ss) { ITraceModel tm = null; for (Iterator<?> it = ss.iterator(); it.hasNext() && tm == null;) { Object o = it.next(); if (o instanceof ITraceModel) { tm = (ITraceModel) o; } else if (o instanceof IAdaptable) { tm = (ITraceModel) ((IAdaptable)o).getAdapter(ITraceModel.class); } else { tm = (ITraceModel) Platform.getAdapterManager().getAdapter(o, ITraceModel.class); } if (tm != null) { return tm; } } return tm; } }