ca.uvic.chisel.javasketch.ui.internal.presentation.TimeLineAnnotationHook.java Source code

Java tutorial

Introduction

Here is the source code for ca.uvic.chisel.javasketch.ui.internal.presentation.TimeLineAnnotationHook.java

Source

/*******************************************************************************
 * Copyright (c) 2009 the CHISEL group and contributors. 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: Del Myers - initial API and implementation
 *******************************************************************************/
package ca.uvic.chisel.javasketch.ui.internal.presentation;

import java.util.HashMap;
import java.util.Map;

import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.PartInitException;

import ca.uvic.chisel.javasketch.data.model.IActivation;
import ca.uvic.chisel.javasketch.ui.internal.presentation.commands.CommandAction;
import ca.uvic.chisel.javasketch.ui.internal.presentation.commands.CommandExecuter;
import ca.uvic.chisel.javasketch.ui.internal.presentation.commands.FakeCommandHandler;
import ca.uvic.chisel.javasketch.ui.internal.presentation.commands.FocusInHandler;
import ca.uvic.chisel.javasketch.ui.internal.presentation.commands.RevealActivationHandler;
import ca.uvic.chisel.widgets.RangeAnnotation;

/**
 * A class that creates a hook for opening annotations in a timeline.
 * 
 * @author Del Myers
 * 
 */
public class TimeLineAnnotationHook extends MouseAdapter implements IMenuListener {

    private class OpenJavaElementAction extends Action {
        private IJavaElement je;

        public OpenJavaElementAction() {
            setJavaElement(null);
        }

        @Override
        public void run() {
            if (je != null) {
                try {
                    CommandExecuter.execute(FakeCommandHandler.NAVIGATE_TO_CODE_ID, null);
                    JavaUI.openInEditor(je);
                } catch (PartInitException e1) {
                } catch (JavaModelException e1) {
                }
            }
        }

        void setJavaElement(IJavaElement element) {
            this.je = element;
            setEnabled(element != null);
            if (isEnabled()) {
                setText("Open " + element.getElementName());
            } else {
                setText("Open Java Element");
            }
        }

    }

    //   private class RevealAction extends Action {
    //      private Object activation;
    //
    //      public RevealAction() {
    //      }
    //
    //      void setActivation(Object activation) {
    //         this.activation = activation;
    //         setText("Reveal "
    //               + ((ILabelProvider) editor.getSequenceChartViewer()
    //                  .getLabelProvider()).getText(activation));
    //      }
    //
    //      /*
    //       * (non-Javadoc)
    //       * @see org.eclipse.jface.action.Action#run()
    //       */
    //      @Override
    //      public void run() {
    //         //editor.reveal((IActivation)activation);
    //      }
    //      /* (non-Javadoc)
    //       * @see org.eclipse.jface.action.Action#runWithEvent(org.eclipse.swt.widgets.Event)
    //       */
    //      @Override
    //      public void runWithEvent(Event event) {
    //         IHandlerService hs = (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class);
    //         ICommandService cs = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class);
    //         Command command = cs.getCommand(RevealActivationHandler.COMMAND_ID);
    //         IActivation a = (IActivation) activation;
    //         if (command != null && activation != null) {
    //            Map<String, String> parameters = new HashMap<String, String>();
    //            parameters.put(RevealActivationHandler.TRACE_PARAMETER, a.getTrace().getIdentifier());
    //            parameters.put(RevealActivationHandler.THREAD_PARAMETER, a.getThread().getIdentifier());
    //            ParameterizedCommand pc = ParameterizedCommand.generateCommand(command, parameters);
    //            try {
    //               hs.executeCommand(pc, event);
    //            } catch (CommandException e) {
    //               SketchPlugin.getDefault().log(e);
    //            } 
    //         }
    //         
    //         super.runWithEvent(event);
    //      }
    //   }

    private IJavaSketchPresenter editor;
    //   private IContributionItem focusInAction;
    private OpenJavaElementAction openJEAction;

    /**
     * Adds a menu and mouse listeners to the time range to open up markers on
     * it.
     * 
     * @param javaSketchEditor
     */
    public TimeLineAnnotationHook(IJavaSketchPresenter javaSketchEditor) {
        this.editor = javaSketchEditor;
        createActions();
        hookContextMenu();
        editor.getTimeRange().addMouseListener(this);
    }

    /**
     * 
     */
    private void createActions() {
        //      this.focusInAction = createContributionItem(FocusInHandler.COMMAND_ID, null);
        this.openJEAction = new OpenJavaElementAction();
    }

    //   private CommandContributionItem createContributionItem(String commandId, Map params) {
    //      CommandContributionItemParameter parameters = new CommandContributionItemParameter(
    //         SketchPlugin.getDefault().getWorkbench(), null, commandId, SWT.PUSH);
    //      parameters.parameters = params;
    //      return new CommandContributionItem(parameters);
    //   }

    private void hookContextMenu() {
        MenuManager manager = new MenuManager();
        manager.addMenuListener(this);
        manager.setRemoveAllWhenShown(true);
        Menu menu = manager.createContextMenu(editor.getTimeRange());
        editor.getTimeRange().setMenu(menu);
    }

    @Override
    public void menuAboutToShow(IMenuManager manager) {
        Point p = editor.getTimeRange().getDisplay().getCursorLocation();
        p = editor.getTimeRange().toControl(p);
        RangeAnnotation r = editor.getTimeRange().itemAt(p);
        if (r != null) {
            IActivation a = getActivation(r.getData());
            IJavaElement je = getJavaElement(r.getData());
            if (a != null) {
                Map<String, String> params = new HashMap<String, String>();
                params.put(RevealActivationHandler.THREAD_PARAMETER, a.getThread().getIdentifier());
                params.put(RevealActivationHandler.TRACE_PARAMETER, a.getTrace().getIdentifier());
                Action revealAction = new CommandAction(RevealActivationHandler.COMMAND_ID, params);
                revealAction.setText("Reveal " + a.getMethod().getName());
                manager.add(revealAction);
                Action focusInAction = new CommandAction(FocusInHandler.COMMAND_ID, null);
                focusInAction.setText("Focus On " + a.getMethod().getName());
                manager.add(focusInAction);
                openJEAction.setJavaElement(je);
            }
        } else {
            openJEAction.setJavaElement(null);
        }
    }

    /*
     * (non-Javadoc)
     * @see
     * org.eclipse.swt.events.MouseAdapter#mouseUp(org.eclipse.swt.events.MouseEvent
     * )
     */
    @Override
    public void mouseUp(MouseEvent e) {
        // if (e.button == 1) {
        // RangeAnnotation annotation =editor.getTimeRange().itemAt(new
        // Point(e.x, e.y));
        // if (annotation != null) {
        // //check the key combination
        // if (((e.stateMask & SWT.CTRL) & SWT.SHIFT) != 0) {
        // //open the root
        // IActivation a = getActivation(annotation.getData());
        // if (a != null) {
        // focusInAction.setFocusElement(a);
        // focusInAction.run();
        // }
        // } else if ((e.stateMask & SWT.CTRL) != 0) {
        // IJavaElement je = getJavaElement(annotation.getData());
        // if (je != null) {
        // openJEAction.setJavaElement(je);
        // openJEAction.run();
        // }
        // } else if ((e.stateMask & SWT.SHIFT) != 0) {
        // IActivation a = getActivation(annotation.getData());
        // if (a != null) {
        // revealAction.setFocusElement(a);
        // revealAction.run();
        // }
        // }
        // }
        // }
    }

    private IActivation getActivation(Object data) {
        if (data instanceof IAdaptable) {
            return (IActivation) ((IAdaptable) data).getAdapter(IActivation.class);
        }
        return null;
    }

    private IJavaElement getJavaElement(Object data) {
        if (data instanceof IAdaptable) {
            return (IJavaElement) ((IAdaptable) data).getAdapter(IJavaElement.class);
        }
        return null;
    }

}