Package org.neo4j.neoclipse.connection

Source Code of org.neo4j.neoclipse.connection.ConnectionsView

/**
* 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();
    }
}
TOP

Related Classes of org.neo4j.neoclipse.connection.ConnectionsView

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.