Package com.dci.intellij.dbn.debugger.execution.ui

Source Code of com.dci.intellij.dbn.debugger.execution.ui.DBProgramRunConfigurationEditorForm

package com.dci.intellij.dbn.debugger.execution.ui;

import com.dci.intellij.dbn.common.Icons;
import com.dci.intellij.dbn.common.dispose.DisposerUtil;
import com.dci.intellij.dbn.common.thread.BackgroundTask;
import com.dci.intellij.dbn.common.thread.SimpleLaterInvocator;
import com.dci.intellij.dbn.common.ui.DBNForm;
import com.dci.intellij.dbn.common.ui.DBNFormImpl;
import com.dci.intellij.dbn.common.ui.DBNHeaderForm;
import com.dci.intellij.dbn.common.util.ActionUtil;
import com.dci.intellij.dbn.common.util.NamingUtil;
import com.dci.intellij.dbn.debugger.execution.DBProgramRunConfiguration;
import com.dci.intellij.dbn.execution.method.MethodExecutionInput;
import com.dci.intellij.dbn.execution.method.MethodExecutionManager;
import com.dci.intellij.dbn.execution.method.browser.MethodBrowserSettings;
import com.dci.intellij.dbn.execution.method.browser.ui.MethodExecutionBrowserDialog;
import com.dci.intellij.dbn.execution.method.ui.MethodExecutionForm;
import com.dci.intellij.dbn.object.DBMethod;
import com.dci.intellij.dbn.object.common.ui.ObjectTreeModel;
import com.dci.intellij.dbn.object.lookup.DBMethodRef;
import com.intellij.ide.DataManager;
import com.intellij.openapi.actionSystem.ActionToolbar;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.actionSystem.Presentation;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.ui.popup.ListPopup;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;

import javax.swing.Icon;
import javax.swing.JCheckBox;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Point;

public class DBProgramRunConfigurationEditorForm extends DBNFormImpl implements DBNForm {
    private JPanel headerPanel;
    private JPanel mainPanel;
    private JPanel methodArgumentsPanel;
    private JCheckBox compileDependenciesCheckBox;
    private JPanel selectMethodActionPanel;

    private MethodExecutionForm methodExecutionForm;
    private MethodExecutionInput executionInput;

    private DBProgramRunConfiguration configuration;

    public DBProgramRunConfigurationEditorForm(final DBProgramRunConfiguration configuration) {
        this.configuration = configuration;

        ActionToolbar actionToolbar = ActionUtil.createActionToolbar("", true, new SelectMethodAction());
        selectMethodActionPanel.add(actionToolbar.getComponent(), BorderLayout.WEST);
    }

    public JPanel getComponent() {
        return mainPanel;
    }

    public class SelectMethodAction extends AnAction {
        public SelectMethodAction()  {
            super("Select method", null, Icons.DBO_METHOD);
        }

        public void actionPerformed(AnActionEvent e) {
            DefaultActionGroup actionGroup = new DefaultActionGroup();
            OpenMethodHistoryAction historyAction = new OpenMethodHistoryAction();
            OpenMethodBrowserAction browserAction = new OpenMethodBrowserAction();
            actionGroup.add(historyAction);
            actionGroup.add(browserAction);
            if (configuration.getMethodSelectionHistory().size() > 0) {
                actionGroup.addSeparator();
                for (MethodExecutionInput methodExecutionInput : configuration.getMethodSelectionHistory()) {
                    if (!methodExecutionInput.equals(configuration.getExecutionInput())) {
                        actionGroup.add(new SelectHistoryMethodAction(methodExecutionInput));
                    }
                }
            }

            ListPopup popup = JBPopupFactory.getInstance().createActionGroupPopup(
                    "Select method",
                    actionGroup,
                    DataManager.getInstance().getDataContext(getComponent()),
                    JBPopupFactory.ActionSelectionAid.SPEEDSEARCH,
                    true, null, 10);

            Point locationOnScreen = selectMethodActionPanel.getLocationOnScreen();
            Point location = new Point(
                    (int) (locationOnScreen.getX()),
                    (int) locationOnScreen.getY() + selectMethodActionPanel.getHeight());
            popup.showInScreenCoordinates(selectMethodActionPanel, location);
        }
    }

    public class OpenMethodBrowserAction extends AnAction {
        public OpenMethodBrowserAction() {
            super("Method Browser");
        }

        @Override
        public void actionPerformed(AnActionEvent e) {
            final Project project = ActionUtil.getProject(e);
            if (project != null) {
                BackgroundTask backgroundTask = new BackgroundTask(project, "Loading executable elements", false) {
                    @Override
                    public void execute(@NotNull ProgressIndicator progressIndicator) {
                        initProgressIndicator(progressIndicator, true);
                        final MethodBrowserSettings settings = MethodExecutionManager.getInstance(project).getBrowserSettings();
                        DBMethod currentMethod = configuration.getExecutionInput() == null ? null : configuration.getExecutionInput().getMethod();
                        if (currentMethod != null) {
                            settings.setConnectionHandler(currentMethod.getConnectionHandler());
                            settings.setSchema(currentMethod.getSchema());
                            settings.setMethod(currentMethod);
                        }

                        final ObjectTreeModel objectTreeModel = new ObjectTreeModel(settings.getSchema(), settings.getVisibleObjectTypes(), settings.getMethod());

                        new SimpleLaterInvocator() {
                            public void execute() {
                                final MethodExecutionBrowserDialog browserDialog = new MethodExecutionBrowserDialog(project, settings, objectTreeModel);
                                browserDialog.show();
                                if (browserDialog.getExitCode() == DialogWrapper.OK_EXIT_CODE) {
                                    DBMethod method = browserDialog.getSelectedMethod();
                                    MethodExecutionManager methodExecutionManager = MethodExecutionManager.getInstance(project);
                                    MethodExecutionInput methodExecutionInput = methodExecutionManager.getExecutionInput(method);
                                    if (methodExecutionInput != null) {
                                        configuration.setExecutionInput(methodExecutionInput);
                                    }
                                }
                            }
                        }.start();

                    }
                };
                backgroundTask.start();
            }
        }
    }
    public class OpenMethodHistoryAction extends AnAction {
        public OpenMethodHistoryAction() {
            super("Execution History", null, Icons.METHOD_EXECUTION_HISTORY);
        }

        @Override
        public void actionPerformed(AnActionEvent e) {
            Project project = ActionUtil.getProject(e);
            if (project != null) {
                MethodExecutionManager methodExecutionManager = MethodExecutionManager.getInstance(project);
                MethodExecutionInput currentInput = configuration.getExecutionInput();
                MethodExecutionInput methodExecutionInput = methodExecutionManager.selectHistoryMethodExecutionInput(currentInput);
                if (methodExecutionInput != null) {
                    configuration.setExecutionInput(methodExecutionInput);
                }
            }
        }
    }
    public class SelectHistoryMethodAction extends AnAction{
        private MethodExecutionInput executionInput;

        public SelectHistoryMethodAction(MethodExecutionInput executionInput) {
            super("");
            this.executionInput = executionInput;
        }

        @Override
        public void actionPerformed(AnActionEvent e) {
            configuration.setExecutionInput(executionInput);
        }

        @Override
        public void update(AnActionEvent e) {
            Presentation presentation = e.getPresentation();
            DBMethod method = executionInput.getMethod();
            if (method == null) {
                presentation.setIcon(Icons.DBO_METHOD);
            } else {
                presentation.setIcon(method.getOriginalIcon());
            }
            presentation.setText(NamingUtil.enhanceNameForDisplay(executionInput.getMethodRef().getPath()));
        }
    }


    public MethodExecutionInput getExecutionInput() {
        return executionInput;
    }

    public void writeConfiguration(DBProgramRunConfiguration configuration) {
        if (methodExecutionForm != null) {
            methodExecutionForm.setExecutionInput(configuration.getExecutionInput());
            methodExecutionForm.updateExecutionInput();
        }
        configuration.setCompileDependencies(compileDependenciesCheckBox.isSelected());
        //selectMethodAction.setConfiguration(configuration);
    }

    public void readConfiguration(DBProgramRunConfiguration configuration) {
        setExecutionInput(configuration.getExecutionInput(), false);
        compileDependenciesCheckBox.setSelected(configuration.isCompileDependencies());
    }

    public void setExecutionInput(MethodExecutionInput executionInput, boolean touchForm) {
        this.executionInput = executionInput;
        String headerTitle = "No method selected";
        Icon headerIcon = null;
        Color headerBackground = UIUtil.getPanelBackground();

        methodArgumentsPanel.removeAll();
        if (executionInput != null && executionInput.getMethod() != null) {
            headerTitle = executionInput.getMethodRef().getPath();
            methodExecutionForm = new MethodExecutionForm(executionInput, false, true);
            methodArgumentsPanel.add(methodExecutionForm.getComponent(), BorderLayout.CENTER);
            if (touchForm) methodExecutionForm.touch();
            DBMethodRef methodRef = executionInput.getMethodRef();
            methodRef.getPath();
            headerIcon = executionInput.getMethod().getOriginalIcon();
            DBMethod method = methodRef.get();
            if (method != null && getEnvironmentSettings(method.getProject()).getVisibilitySettings().getDialogHeaders().value()) {
                headerBackground = method.getEnvironmentType().getColor();
            }
        }

        DBNHeaderForm headerForm = new DBNHeaderForm(
                headerTitle,
                headerIcon,
                headerBackground);
        headerPanel.removeAll();
        headerPanel.add(headerForm.getComponent(), BorderLayout.CENTER);



        mainPanel.updateUI();
    }

    public void dispose() {
        super.dispose();
        DisposerUtil.dispose(methodExecutionForm);
        methodExecutionForm = null;
        executionInput = null;
        configuration = null;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
TOP

Related Classes of com.dci.intellij.dbn.debugger.execution.ui.DBProgramRunConfigurationEditorForm

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.