navclus.userinterface.classdiagram.NavClusView.java Source code

Java tutorial

Introduction

Here is the source code for navclus.userinterface.classdiagram.NavClusView.java

Source

/*******************************************************************************
Copyright (c) 2010, 2012 Seonah Lee, SA Lab, KAIST
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:
Seonah Lee - initial implementation
 *******************************************************************************/

package navclus.userinterface.classdiagram;

import java.io.FileNotFoundException;

import navclus.userinterface.classdiagram.actions.ClearAction;
import navclus.userinterface.classdiagram.actions.RedrawAction;
import navclus.userinterface.classdiagram.java.analyzer.RootModel;
import navclus.userinterface.classdiagram.java.manager.RootNode;
import navclus.userinterface.classdiagram.listeners.GraphMouseListener;
import navclus.userinterface.classdiagram.utils.FlagRedraw;
import navclus.userinterface.classdiagram.utils.JavaEditorUtil;
import navclus.userinterface.classdiagram.utils.TypeHistory;
import navclus.userinterface.monitor.listeners.JavaEditorPartListener2;
import navclus.userinterface.monitor.listeners.JavaEditorSelectionListener;
import navclus.userinterface.monitor.patterns.PatternSelector;
import navclus.userinterface.monitor.selections.SelectionKeeper;

import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.zest.core.widgets.Graph;
import org.eclipse.zest.core.widgets.ZestStyles;
import org.eclipse.zest.layouts.LayoutStyles;
import org.eclipse.zest.layouts.algorithms.HorizontalTreeLayoutAlgorithm;

public class NavClusView extends ViewPart {

    public static final String ID = "navclus.userinterface.classdiagram.navclusview"; //$NON-NLS-1$   
    public final static int DRAW_NAVIGATIONAL_RELATIONSHIP = 10;
    public final static int DRAW_STRUCTURAL_RELATIONSHIP = 20;

    /**
     * Returns the shared instance.
     */
    public static NavClusView getDefault() {
        if (viewer == null)
            viewer = new NavClusView();

        return viewer;
    }

    private PatternSelector patternSelector;

    private SelectionKeeper selectionKeeper;

    private static NavClusView viewer;

    JavaEditorPartListener2 javaeditorpartlistner2;

    JavaEditorSelectionListener javaeditorselectionlistener;

    //   JobEventListener jobeventlistener;
    //   JavaChangeListener javachangelistener;   
    private IAction action00;
    private IAction action10;
    //   private IAction action20;

    //   private IAction action30;
    private IWorkbenchWindow WINDOW = null;
    private RootModel rootmodel = null;

    private Graph g = null;

    public NavClusView() {
        viewer = this;
    }

    private void contributeToActionBars() {
        IActionBars bars = getViewSite().getActionBars();
        fillLocalPullDown(bars.getMenuManager());
        fillLocalToolBar(bars.getToolBarManager());
    }

    public int countGraphConnections() {
        return g.getConnections().size();
    }

    public int countGraphNodes() {
        return g.getNodes().size();
    }

    @Override
    public void createPartControl(final Composite parent) {
        WINDOW = PlatformUI.getWorkbench().getActiveWorkbenchWindow();

        g = new Graph(parent, SWT.NONE);

        g.setLayoutAlgorithm(new HorizontalTreeLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING), true);

        //      g.setLayoutAlgorithm(new 
        //            CompositeLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING, 
        //            new LayoutAlgorithm[] { 
        //                  new HorizontalTreeLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING), 
        //                  new TreeLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING) }), true); 

        g.setConnectionStyle(ZestStyles.CONNECTIONS_DIRECTED);

        // Error: we should stop the listener before closing this program
        g.getLightweightSystem().getRootFigure().addMouseListener(new GraphMouseListener());

        rootmodel = new RootModel(new RootNode());

        makeActions(); // for menu
        contributeToActionBars(); // for menu
        hookPartAction(); // for window
        //      SynchronizeWithEditor();   // for view

        //      InteractionEvent interactionEvent 
        //      = InteractionEvent.makePreference(ID, "classview ; open_view ; " + countGraphNodes());
        //      MonitorUiPlugin.getDefault().notifyInteractionObserved(interactionEvent);
    }

    @Override
    public void dispose() {
        super.dispose();

        rootmodel.cleanUp();
        rootmodel = null;

        // Open & Close Files
        WINDOW.getPartService().removePartListener(javaeditorpartlistner2);

        // Select Text
        WINDOW.getSelectionService().removePostSelectionListener(javaeditorselectionlistener);

        //      // Jobs
        //      Job.getJobManager().removeJobChangeListener(jobeventlistener);
        //      
        //      // change java elements
        //      JavaCore.removeElementChangedListener(javachangelistener);

        //      InteractionEvent interactionEvent 
        //      = InteractionEvent.makePreference(ID, "classview ; close_view ; " + countGraphNodes());
        //      MonitorUiPlugin.getDefault().notifyInteractionObserved(interactionEvent);

        this.patternSelector = null;
        this.selectionKeeper = null;

        g.dispose();
    }

    private void fillLocalPullDown(IMenuManager manager) {
        //      manager.add(action20);
        //      manager.add(new Separator());
        manager.add(action00);
        manager.add(action10);
    }

    private void fillLocalToolBar(IToolBarManager manager) {
        //      manager.add(action20);   
        manager.add(action00);
        manager.add(action10);
    }

    //   public int getDrawOption() {
    //
    //      //      if (action10.isChecked())
    //      //         return 10;
    //      //      else 
    //      if (action20.isChecked())
    //         return 20;
    //      else {
    //         //         System.out.println("Action is:" )
    //         return -1;
    //      }
    //
    //   }

    public Graph getG() {
        return g;
    }

    public PatternSelector getPatternSelector() {
        return patternSelector;
    }

    public RootModel getRootModel() {
        return rootmodel;
    }

    public RootNode getRootNode() {
        if (rootmodel == null)
            return null;

        return rootmodel.getRootNode();
    }

    public SelectionKeeper getSelectionKeeper() {
        return selectionKeeper;
    }

    public IWorkbenchWindow getWINDOW() {
        if (WINDOW != null)
            return WINDOW;
        else
            return PlatformUI.getWorkbench().getActiveWorkbenchWindow();
    }

    private void hookPartAction() {

        this.patternSelector = new PatternSelector();
        this.selectionKeeper = new SelectionKeeper();

        // Open & Close Files
        javaeditorpartlistner2 = new JavaEditorPartListener2();
        WINDOW.getPartService().addPartListener(javaeditorpartlistner2);

        //      // change java elements
        //      javachangelistener = new JavaChangeListener(this);
        //      JavaCore.addElementChangedListener(javachangelistener, ElementChangedEvent.POST_RECONCILE);
        //      
        // Select Text
        javaeditorselectionlistener = new JavaEditorSelectionListener();
        WINDOW.getSelectionService().addPostSelectionListener(javaeditorselectionlistener);
        //      
        //      // Jobs
        //      jobeventlistener = new JobEventListener();
        //      Job.getJobManager().addJobChangeListener(jobeventlistener);

        try {
            this.patternSelector.initiate();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private void makeActions() {
        action00 = new Action() {
            public void run() {
                g.applyLayout();
            }
        };
        action00.setText("Apply Layout");
        action00.setImageDescriptor(
                PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_TOOL_NEW_WIZARD));

        action10 = new ClearAction();
        action10.setText("Clear");
        action10.setImageDescriptor(ImageDescriptor.createFromImage(
                new Image(Display.getDefault(), this.getClass().getResourceAsStream("clear.gif"))));

        //      action20 = new RedrawAction();   
        //      action20.setText("Show Structural Information");
        //      action20.setImageDescriptor(ImageDescriptor.createFromImage(
        //            new Image(Display.getDefault(), 
        //                  this.getClass().getResourceAsStream("admin2_face.gif"))));
        //
        //
        //      action20.setChecked(true);
    }

    /**
     * Passing the focus request to the viewer's control.
     */
    @Override
    public void setFocus() {
    }

    public void setG(Graph g) {
        this.g = g;
    }

    public void setRootModel(RootModel rootmodel) {
        this.rootmodel = rootmodel;
    }

    private void showMessage(String message) {
        MessageDialog.openInformation(g.getShell(), "Class View", message);
    }

    private void SynchronizeWithEditor() {
        FlagRedraw.setSync(false);

        IWorkbenchPage page = WINDOW.getActivePage();
        if (page == null)
            return;

        IEditorReference[] editorreferences = page.getEditorReferences();
        for (IEditorReference editorreference : editorreferences) {
            IJavaElement element = JavaEditorUtil.getJavaElement(editorreference);

            if (element == null)
                continue;
            else {
                try {
                    rootmodel.addJavaFile(element);
                } catch (JavaModelException e) {
                    e.printStackTrace();
                }
                FlagRedraw.setSync(true);
            }
        }
        IJavaElement finalJavaElement = JavaEditorUtil.getTopElement();
        TypeHistory.setCurElement(finalJavaElement);
    }

}