com.amazonaws.eclipse.datatools.sqltools.tablewizard.simpledb.ui.popup.actions.DeleteAttributeWizardAction.java Source code

Java tutorial

Introduction

Here is the source code for com.amazonaws.eclipse.datatools.sqltools.tablewizard.simpledb.ui.popup.actions.DeleteAttributeWizardAction.java

Source

/*
 * Copyright 2009-2011 Amazon Technologies, Inc.
 *
 * 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://aws.amazon.com/apache2.0
 *
 * This file 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.amazonaws.eclipse.datatools.sqltools.tablewizard.simpledb.ui.popup.actions;

import java.sql.Connection;
import java.text.MessageFormat;
import java.util.Iterator;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.datatools.connectivity.sqm.core.connection.DatabaseConnectionRegistry;
import org.eclipse.datatools.connectivity.sqm.core.containment.ContainmentService;
import org.eclipse.datatools.connectivity.sqm.core.rte.ICatalogObject;
import org.eclipse.datatools.connectivity.sqm.internal.core.RDBCorePlugin;
import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo;
import org.eclipse.datatools.connectivity.sqm.internal.core.containment.GroupID;
import org.eclipse.datatools.modelbase.sql.schema.Database;
import org.eclipse.datatools.modelbase.sql.schema.Schema;
import org.eclipse.datatools.modelbase.sql.tables.Column;
import org.eclipse.datatools.modelbase.sql.tables.Table;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreePath;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.actions.WorkspaceModifyOperation;
import org.eclipse.ui.navigator.CommonViewer;

import com.amazonaws.eclipse.datatools.enablement.simpledb.internal.driver.JdbcStatement;
import com.amazonaws.eclipse.datatools.sqltools.tablewizard.simpledb.ui.Messages;
import com.amazonaws.eclipse.datatools.sqltools.tablewizard.simpledb.ui.UIPlugin;

public class DeleteAttributeWizardAction extends AbstractEditorClosingAction {

    private static final String TEXT = Messages.attributeDeleteMenu;

    @Override
    public void selectionChanged(final SelectionChangedEvent event) {
        super.selectionChanged(event);

        if (event.getSelection() instanceof IStructuredSelection
                && ((IStructuredSelection) event.getSelection()).getFirstElement() instanceof EObject) {
            EObject o = (EObject) ((IStructuredSelection) event.getSelection()).getFirstElement();
            ContainmentService containmentService = RDBCorePlugin.getDefault().getContainmentService();
            String groupID = containmentService.getGroupId(o);
            setEnabled((groupID != null) && (groupID.startsWith(GroupID.CORE_PREFIX)));
        }
    }

    @Override
    public void initialize() {
        initializeAction(null, null, TEXT, TEXT);
    }

    @Override
    public void run() {
        if (!this.event.getSelection().isEmpty()) {
            Iterator<?> iter = ((IStructuredSelection) this.event.getSelection()).iterator();
            Object selectedObj = iter.next();

            if (selectedObj instanceof Column) {
                Column column = (Column) selectedObj;

                boolean confirmed = MessageDialog.openConfirm(Display.getCurrent().getActiveShell(),
                        Messages.ConfirmAttributeDeletion,
                        MessageFormat.format(Messages.ConfirmAttributeDeletionMessage,
                                column.getTable().getName() + "." + column.getName())); //$NON-NLS-1$
                if (!confirmed) {
                    return;
                }

                if (!closeEditors(column.getTable())) {
                    return;
                }

                Database db = getDatabase(column.getTable().getSchema());
                ConnectionInfo conInfo = (ConnectionInfo) DatabaseConnectionRegistry.getConnectionForDatabase(db);
                try {
                    deleteColumn(conInfo, column);
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }

    private Database getDatabase(final Schema schema) {
        return schema.getCatalog() == null ? schema.getDatabase() : schema.getCatalog().getDatabase();
    }

    /**
     * @param info
     * @param column
     */
    private void deleteColumn(final ConnectionInfo info, final Column column) throws Exception {
        final Table table = column.getTable();

        WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
            @Override
            protected void execute(final IProgressMonitor monitor) {
                try {
                    Connection conn = info.getSharedConnection();
                    conn.prepareStatement(
                            "alter table " + JdbcStatement.DELIMITED_IDENTIFIER_QUOTE + table.getName() //$NON-NLS-1$
                                    + JdbcStatement.DELIMITED_IDENTIFIER_QUOTE + " drop " //$NON-NLS-1$
                                    + JdbcStatement.DELIMITED_IDENTIFIER_QUOTE + column.getName() + JdbcStatement.DELIMITED_IDENTIFIER_QUOTE)
                            .executeUpdate();

                    CommonViewer cViewer = (CommonViewer) DeleteAttributeWizardAction.this.event.getSource();
                    TreePath[] expanded = cViewer.getExpandedTreePaths();

                    ((ICatalogObject) table).refresh();

                    for (TreePath path : expanded) {
                        cViewer.expandToLevel(path, 0);
                    }
                    cViewer.setSelection(new StructuredSelection(table), true);

                } catch (Exception e) {
                    UIPlugin.logMessage(e.getMessage(), e, IStatus.ERROR);
                } finally {
                    monitor.done();
                }
            }
        };

        UIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().run(false, true, operation);
    }
}