Package com.dci.intellij.dbn.execution.statement.result.ui

Source Code of com.dci.intellij.dbn.execution.statement.result.ui.StatementExecutionResultForm

package com.dci.intellij.dbn.execution.statement.result.ui;

import com.dci.intellij.dbn.common.thread.ConditionalLaterInvocator;
import com.dci.intellij.dbn.common.thread.ReadActionRunner;
import com.dci.intellij.dbn.common.thread.SimpleLaterInvocator;
import com.dci.intellij.dbn.common.ui.DBNFormImpl;
import com.dci.intellij.dbn.common.util.ActionUtil;
import com.dci.intellij.dbn.data.find.DataSearchComponent;
import com.dci.intellij.dbn.data.find.SearchableDataComponent;
import com.dci.intellij.dbn.data.model.resultSet.ResultSetDataModel;
import com.dci.intellij.dbn.data.record.RecordViewInfo;
import com.dci.intellij.dbn.data.ui.table.basic.BasicTable;
import com.dci.intellij.dbn.data.ui.table.resultSet.ResultSetTable;
import com.dci.intellij.dbn.execution.ExecutionManager;
import com.dci.intellij.dbn.execution.common.result.ui.ExecutionResultForm;
import com.dci.intellij.dbn.execution.statement.result.StatementExecutionCursorResult;
import com.intellij.openapi.actionSystem.ActionToolbar;
import com.intellij.openapi.project.Project;
import com.intellij.ui.IdeBorderFactory;
import com.intellij.util.ui.UIUtil;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import java.awt.BorderLayout;

public class StatementExecutionResultForm extends DBNFormImpl implements ExecutionResultForm<StatementExecutionCursorResult>, SearchableDataComponent {
    private JPanel mainPanel;
    private JPanel actionsPanel;
    private JPanel statusPanel;
    private JScrollPane resultScrollPane;
    private ResultSetTable resultTable;
    private JLabel statusLabel;
    private JPanel searchPanel;
    private JPanel resultPanel;
    private StatementExecutionCursorResult executionResult;
    private RecordViewInfo recordViewInfo;
    private DataSearchComponent dataSearchComponent;

    public StatementExecutionResultForm(final StatementExecutionCursorResult executionResult) {
        this.executionResult = executionResult;
        ActionToolbar actionToolbar = ActionUtil.createActionToolbar("", false, "DBNavigator.ActionGroup.StatementExecutionResult");

        actionsPanel.add(actionToolbar.getComponent());

        recordViewInfo = new ReadActionRunner<RecordViewInfo>() {
            @Override
            protected RecordViewInfo run() {
                return new RecordViewInfo(
                                executionResult.getResultName(),
                                executionResult.getResultIcon());
            }
        }.start();

        resultPanel.setBorder(IdeBorderFactory.createBorder());
        resultTable = new ResultSetTable(executionResult.getTableModel(), true, recordViewInfo);

        resultScrollPane.setViewportView(resultTable);
        resultScrollPane.setRowHeaderView(resultTable.getTableGutter());
        resultScrollPane.getViewport().setBackground(resultTable.getBackground());

        JPanel panel = new JPanel();
        panel.setBorder(UIUtil.getTableHeaderCellBorder());
        resultScrollPane.setCorner(ScrollPaneConstants.UPPER_LEFT_CORNER, panel);
        ActionUtil.registerDataProvider(resultTable, executionResult.getDataProvider(), false);
    }

    public void setExecutionResult(StatementExecutionCursorResult executionResult) {
        if (this.executionResult != executionResult) {
            this.executionResult = executionResult;
            reloadTableModel();
        }
    }

    public StatementExecutionCursorResult getExecutionResult() {
        return executionResult;
    }

    public void reloadTableModel() {
        new SimpleLaterInvocator() {
            public void execute() {
                if (executionResult != null) {
                    resultTable = new ResultSetTable(executionResult.getTableModel(), true, recordViewInfo);
                    resultScrollPane.setViewportView(resultTable);
                    resultScrollPane.setRowHeaderView(resultTable.getTableGutter());
                }
            }
        }.start();
    }

    public ResultSetTable getResultTable() {
        return resultTable;
    }

    public void updateVisibleComponents() {
        new ConditionalLaterInvocator() {
            public void execute() {
                ResultSetDataModel dataModel = executionResult.getTableModel();
                statusLabel.setText(executionResult.getExecutionInput().getConnectionHandler().getPresentableText() + ": " +
                        dataModel.getSize() + " records" + (dataModel.isResultSetExhausted() ? "" : " (Partial)"));
            }
        }.start();

    }

    public void dispose() {
        super.dispose();
        if (executionResult != null) {
            if (executionResult.hasResult()) {
                executionResult.getTableModel().dispose();
            }
            executionResult.getExecutionProcessor().reset();
            executionResult.dispose();
            executionResult = null;
        }
    }

    public void show() {
        Project project = executionResult.getProject();
        ExecutionManager.getInstance(project).selectResultTab(executionResult);
    }

    public JPanel getComponent() {
        return mainPanel;
    }

    public void highlightLoading(boolean loading) {
        resultTable.setLoading(loading);
        resultTable.repaint();
    }

    /*********************************************************
     *              SearchableDataComponent                  *
     *********************************************************/
    public void showSearchHeader() {
        resultTable.clearSelection();

        if (dataSearchComponent == null) {
            dataSearchComponent = new DataSearchComponent(this);
            ActionUtil.registerDataProvider(dataSearchComponent.getSearchField(), executionResult.getDataProvider(), false);
            searchPanel.add(dataSearchComponent, BorderLayout.CENTER);
        } else {
            dataSearchComponent.initializeFindModel();
        }
        if (searchPanel.isVisible()) {
            dataSearchComponent.getSearchField().selectAll();
        } else {
            searchPanel.setVisible(true);
        }
        dataSearchComponent.getSearchField().requestFocus();

    }

    public void hideSearchHeader() {
        dataSearchComponent.resetFindModel();
        searchPanel.setVisible(false);
        resultTable.repaint();
        resultTable.requestFocus();
    }

    @Override
    public void cancelEditActions() {
    }

    @Override
    public BasicTable getTable() {
        return resultTable;
    }

    @Override
    public String getSelectedText() {
        return null;
    }
}
TOP

Related Classes of com.dci.intellij.dbn.execution.statement.result.ui.StatementExecutionResultForm

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.