org.neo4j.neoclipse.connection.ConnectionsView.java Source code

Java tutorial

Introduction

Here is the source code for org.neo4j.neoclipse.connection.ConnectionsView.java

Source

/**
 * Licensed to Neo Technology under one or more contributor
 * license agreements. See the NOTICE file distributed with
 * this work for additional information regarding copyright
 * ownership. Neo Technology licenses this file to you under
 * the Apache License, Version 2.0 (the "License"); you may
 * not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.neo4j.neoclipse.connection;

import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.part.ViewPart;
import org.neo4j.neoclipse.Activator;
import org.neo4j.neoclipse.connection.actions.ForceStartHandler;
import org.neo4j.neoclipse.connection.actions.NewAliasAction;
import org.neo4j.neoclipse.connection.actions.SqlEditorAction;
import org.neo4j.neoclipse.event.NeoclipseEvent;
import org.neo4j.neoclipse.event.NeoclipseEventListener;
import org.neo4j.neoclipse.event.NeoclipseListenerList;
import org.neo4j.neoclipse.graphdb.GraphDbServiceManager;
import org.neo4j.neoclipse.graphdb.GraphDbServiceStatus;
import org.neo4j.neoclipse.view.ErrorMessage;
import org.neo4j.neoclipse.view.NeoGraphViewPart;
import org.neo4j.neoclipse.view.UiHelper;

/**
 * 
 * @author Radhakrishna Kalyan
 */
public class ConnectionsView extends ViewPart implements NeoclipseEventListener {

    public static final String ID = ConnectionsView.class.getCanonicalName();
    private final NeoclipseListenerList connectionListeners = new NeoclipseListenerList();
    private TreeViewer _treeViewer;

    public ConnectionsView() {
        super();
        Activator.getDefault().setConnectionsView(this);
        connectionListeners.add(new ForceStartHandler());
    }

    @Override
    public void createPartControl(Composite parent) {
        Activator.getDefault().getAliasManager().registerConnetionListener(this);

        _treeViewer = new TreeViewer(parent, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL);
        getSite().setSelectionProvider(_treeViewer);

        IToolBarManager toolBarMgr = getViewSite().getActionBars().getToolBarManager();
        toolBarMgr.add(new NewAliasAction());
        toolBarMgr.add(new SqlEditorAction());

        _treeViewer.setUseHashlookup(true);
        _treeViewer.setContentProvider(new ConnectionTreeContentProvider());
        _treeViewer.setLabelProvider(new ConnectionTreeLabelProvider());
        _treeViewer.setInput(Activator.getDefault().getAliasManager());

        // doubleclick on alias opens session
        _treeViewer.addDoubleClickListener(new IDoubleClickListener() {
            @Override
            public void doubleClick(final DoubleClickEvent event) {
                UiHelper.asyncExec(new Runnable() {
                    @Override
                    public void run() {
                        IStructuredSelection selection = (IStructuredSelection) event.getSelection();
                        if (selection != null) {
                            Object selected = selection.getFirstElement();
                            if (selected instanceof Alias) {
                                Alias alias = (Alias) selection.getFirstElement();
                                startOrStopConnection(alias);
                            }
                        }
                    }
                });
            }
        });

        _treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
            @Override
            public void selectionChanged(final SelectionChangedEvent event) {
                UiHelper.asyncExec(new Runnable() {
                    @Override
                    public void run() {
                        refreshToolbar();
                        Activator.getDefault().fireServiceChangedEvent(GraphDbServiceStatus.DB_SELECT);
                    }
                });
            }

        });

        // add context menu
        final ConnectionTreeActionGroup actionGroup = new ConnectionTreeActionGroup();
        MenuManager menuManager = new MenuManager("ConnectionTreeContextMenu");
        menuManager.setRemoveAllWhenShown(true);
        Menu contextMenu = menuManager.createContextMenu(_treeViewer.getTree());
        _treeViewer.getTree().setMenu(contextMenu);

        menuManager.addMenuListener(new IMenuListener() {
            @Override
            public void menuAboutToShow(IMenuManager manager) {
                actionGroup.fillContextMenu(manager);
            }
        });
        _treeViewer.setAutoExpandLevel(2);

        parent.layout();

    }

    public void startOrStopConnection(final Alias alias) {
        UiHelper.asyncExec(new Runnable() {
            @Override
            public void run() {
                GraphDbServiceManager gsm = Activator.getDefault().getGraphDbServiceManager();
                NeoGraphViewPart graphView = Activator.getDefault().getNeoGraphViewPart();
                try {
                    if (gsm.isRunning()) {
                        if (!gsm.getCurrentAlias().equals(alias)) {
                            ErrorMessage.showDialog("Database problem",
                                    "Another Database view is already active. Please close it before starting another one.");
                        } else {
                            graphView.cleanTransactionBeforeShutdown();
                            gsm.stopGraphDbService().get();
                        }
                    } else if (!gsm.isRunning()) {
                        gsm.startGraphDbService(alias).get();
                        graphView.showSomeNode();
                    }
                } catch (Exception e) {
                    ErrorMessage.showDialog("Database problem", e);
                }
                Activator.getDefault().getAliasManager().notifyListners();
            }
        });

    }

    public Alias getSelectedAlias() {
        IStructuredSelection selection = (IStructuredSelection) _treeViewer.getSelection();
        return (Alias) selection.getFirstElement();

    }

    @Override
    public void setFocus() {
        _treeViewer.getControl().setFocus();
    }

    @Override
    public void stateChanged(NeoclipseEvent event) {
        UiHelper.asyncExec(new Runnable() {
            @Override
            public void run() {
                if (!_treeViewer.getTree().isDisposed()) {
                    _treeViewer.refresh();
                    refreshToolbar();
                }
            }
        });

    }

    private void refreshToolbar() {
        IToolBarManager toolbar = getViewSite().getActionBars().getToolBarManager();
        IContributionItem[] items = toolbar.getItems();
        for (IContributionItem item : items) {
            if (item instanceof ActionContributionItem) {
                ActionContributionItem contrib = (ActionContributionItem) item;
                IAction contribAction = contrib.getAction();
                if (contribAction instanceof AbstractConnectionTreeAction) {
                    AbstractConnectionTreeAction action = (AbstractConnectionTreeAction) contribAction;
                    action.setEnabled(action.isAvailable());
                }
            }
        }

    }

    public void notifyListners() {
        connectionListeners.notifyListeners();
    }
}