com.sap.dirigible.ide.db.viewer.views.DatabaseViewer.java Source code

Java tutorial

Introduction

Here is the source code for com.sap.dirigible.ide.db.viewer.views.DatabaseViewer.java

Source

/*******************************************************************************
 * Copyright (c) 2014 SAP AG or an SAP affiliate company. All rights reserved.
 * Licensed 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 com.sap.dirigible.ide.db.viewer.views;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.eclipse.jface.action.Action;
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.action.Separator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IFilter;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.dialogs.FilteredTree;
import org.eclipse.ui.dialogs.PatternFilter;
import org.eclipse.ui.part.DrillDownAdapter;
import org.eclipse.ui.part.ViewPart;

import com.sap.dirigible.ide.common.CommonParameters;
import com.sap.dirigible.ide.datasource.DataSourceFacade;
import com.sap.dirigible.ide.db.viewer.views.actions.DeleteTableAction;
import com.sap.dirigible.ide.db.viewer.views.actions.ExportDataAction;
import com.sap.dirigible.ide.db.viewer.views.actions.RefreshViewAction;
import com.sap.dirigible.ide.db.viewer.views.actions.ShowTableDefinitionAction;
import com.sap.dirigible.ide.db.viewer.views.actions.ViewTableContentAction;

/**
 * Database Viewer represents the structure of the tenant specific schema
 * 
 */
public class DatabaseViewer extends ViewPart implements IDbConnectionFactory {

    private static final String DATABASE_VIEW = Messages.DatabaseViewer_DATABASE_VIEW;

    /**
     * The ID of the view as specified by the extension.
     */
    public static final String ID = "com.sap.dirigible.ide.db.viewer.views.DatabaseViewer"; //$NON-NLS-1$

    protected TreeViewer viewer;
    @SuppressWarnings("unused")
    private DrillDownAdapter drillDownAdapter;
    protected Action viewTableContentAction;
    private Action deleteAction;
    private Action exportDataAction;
    private Action doubleClickAction;
    private boolean isOperator;

    private ShowTableDefinitionAction showTableDefinitionAction;

    protected RefreshViewAction refreshViewAction;

    class NameSorter extends ViewerSorter {
        private static final long serialVersionUID = -7067479902071396325L;
    }

    /**
     * The constructor.
     */
    public DatabaseViewer() {
        isOperator = CommonParameters.isUserInRole(CommonParameters.ROLE_OPERATOR);
    }

    /**
     * This is a callback that will allow us to create the viewer and initialize
     * it.
     */
    @SuppressWarnings("unused")
    public void createPartControl(Composite parent) {
        PatternFilter filter = new PatternFilter();
        FilteredTree tree = new FilteredTree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL, filter, true);
        viewer = tree.getViewer();
        DrillDownAdapter drillDownAdapter = new DrillDownAdapter(viewer);
        viewer.setContentProvider(initContentProvider());
        viewer.setLabelProvider(new DatabaseViewLabelProvider(this));
        viewer.setSorter(new NameSorter());
        viewer.setInput(getViewSite());

        // Create the help context id for the viewer's control
        // PlatformUI.getWorkbench().getHelpSystem().setHelp(viewer.getControl(),
        // "com.sap.dirigible.ide.db.viewer.views.DatabaseViewer");

        makeActions();
        hookContextMenu();
        hookDoubleClickAction();
        contributeToActionBars();
    }

    protected IContentProvider initContentProvider() {
        return new DatabaseViewContentProvider(this);
    }

    protected IFilter getSchemaFilter(Connection connection) throws SQLException {
        return null;
    }

    private void hookContextMenu() {
        MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
        menuMgr.setRemoveAllWhenShown(true);
        menuMgr.addMenuListener(new IMenuListener() {
            private static final long serialVersionUID = -4330735691305481160L;

            public void menuAboutToShow(IMenuManager manager) {
                DatabaseViewer.this.fillContextMenu(manager);
            }
        });
        Menu menu = menuMgr.createContextMenu(viewer.getControl());
        viewer.getControl().setMenu(menu);
        getSite().registerContextMenu(menuMgr, viewer);
    }

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

    private void fillLocalPullDown(IMenuManager manager) {
        manager.add(showTableDefinitionAction);
        manager.add(viewTableContentAction);
        manager.add(exportDataAction);
        manager.add(new Separator());
        if (isOperator) {
            manager.add(deleteAction);
        }
        manager.add(new Separator());
        manager.add(refreshViewAction);
    }

    private void fillContextMenu(IMenuManager manager) {
        ISelection selection = viewer.getSelection();
        Object obj = ((IStructuredSelection) selection).getFirstElement();
        if (!TreeParent.class.isInstance(obj)) {
            if (TreeObject.class.isInstance(obj)) {
                manager.add(showTableDefinitionAction);
                manager.add(viewTableContentAction);
                manager.add(exportDataAction);
                manager.add(new Separator());
                if (isOperator) {
                    manager.add(deleteAction);
                }
                manager.add(new Separator());
            }
        }
        manager.add(refreshViewAction);
        // Other plug-ins can contribute there actions here
        manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
    }

    private void fillLocalToolBar(IToolBarManager manager) {
        manager.add(showTableDefinitionAction);
        manager.add(viewTableContentAction);
        manager.add(exportDataAction);
        manager.add(new Separator());
        if (isOperator) {
            manager.add(deleteAction);
        }
        manager.add(new Separator());
        manager.add(refreshViewAction);
    }

    private void makeActions() {
        createRefreshAction();
        createExportDataAction();
        createViewTableContentAction();
        createShowTableDefinitionAction();
        if (isOperator) {
            deleteAction = new DeleteTableAction(viewer);
        }
        doubleClickAction = new ShowTableDefinitionAction(viewer);

    }

    protected void createRefreshAction() {
        refreshViewAction = new RefreshViewAction(viewer);
    }

    protected void createViewTableContentAction() {
        viewTableContentAction = new ViewTableContentAction(viewer, SQLConsole.ID);

    }

    protected void createShowTableDefinitionAction() {
        showTableDefinitionAction = new ShowTableDefinitionAction(viewer);
    }

    protected void createExportDataAction() {
        exportDataAction = new ExportDataAction(viewer);
    }

    private void hookDoubleClickAction() {
        viewer.addDoubleClickListener(new IDoubleClickListener() {
            public void doubleClick(DoubleClickEvent event) {
                doubleClickAction.run();
            }
        });
    }

    protected void showMessage(String message) {
        MessageDialog.openInformation(viewer.getControl().getShell(), DATABASE_VIEW, message);
    }

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

    public Connection getDatabaseConnection() throws SQLException {
        DataSource dataSource = DataSourceFacade.getInstance().getDataSource();
        Connection connection = dataSource.getConnection();
        return connection;
    }

    public boolean showSchemes() {
        return false;
    }

}