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