Package com.dci.intellij.dbn.code.common.intention

Source Code of com.dci.intellij.dbn.code.common.intention.SelectConnectionIntentionAction$SetupConnectionAction

package com.dci.intellij.dbn.code.common.intention;

import com.dci.intellij.dbn.common.Icons;
import com.dci.intellij.dbn.common.util.ActionUtil;
import com.dci.intellij.dbn.connection.ConnectionBundle;
import com.dci.intellij.dbn.connection.ConnectionHandler;
import com.dci.intellij.dbn.connection.ConnectionManager;
import com.dci.intellij.dbn.connection.ProjectConnectionBundle;
import com.dci.intellij.dbn.language.common.DBLanguageFile;
import com.dci.intellij.dbn.object.DBSchema;
import com.dci.intellij.dbn.options.ui.GlobalProjectSettingsDialog;
import com.intellij.ide.DataManager;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.ui.popup.ListPopup;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;

import javax.swing.Icon;
import java.util.List;

public class SelectConnectionIntentionAction extends GenericIntentionAction {
    @NotNull
    public String getText() {
        return "Select connection...";
    }

    @NotNull
    public String getFamilyName() {
        return "DBNavigator environment intentions";
    }

    public Icon getIcon(int flags) {
        return Icons.FILE_CONNECTION_MAPPING;
    }

    public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile psiFile) {
        VirtualFile virtualFile = psiFile.getVirtualFile();
        if (psiFile instanceof DBLanguageFile && virtualFile != null && virtualFile.isInLocalFileSystem()) {
            //DBLanguageFile file = (DBLanguageFile) psiFile;
            return true;
        }
        return false;
    }

    public void invoke(@NotNull Project project, Editor editor, PsiFile psiFile) throws IncorrectOperationException {
        ConnectionManager connectionManager = ConnectionManager.getInstance(project);
        List<ConnectionBundle> connectionBundles = connectionManager.getConnectionBundles();

        DefaultActionGroup actionGroup = new DefaultActionGroup();
        DBLanguageFile dbLanguageFile = (DBLanguageFile) psiFile;

        boolean connectionsFound = false;
        for (ConnectionBundle connectionBundle : connectionBundles) {
            if (connectionBundle.getConnectionHandlers().size() > 0) {
                actionGroup.addSeparator();
                for (ConnectionHandler connectionHandler : connectionBundle.getConnectionHandlers()) {

                    SelectConnectionAction connectionAction = new SelectConnectionAction(connectionHandler, dbLanguageFile);
                    actionGroup.add(connectionAction);
                    connectionsFound = true;
                }
            }
        }

        if (connectionsFound) actionGroup.addSeparator();
        ProjectConnectionBundle projectConnectionManager = ProjectConnectionBundle.getInstance(project);
        for (ConnectionHandler virtualConnectionHandler : projectConnectionManager.getVirtualConnections()) {
            SelectConnectionAction connectionAction = new SelectConnectionAction(virtualConnectionHandler, dbLanguageFile);
            actionGroup.add(connectionAction);
        }

        actionGroup.addSeparator();
        actionGroup.add(new SetupConnectionAction());

        ListPopup popupBuilder = JBPopupFactory.getInstance().createActionGroupPopup(
                "Select connection",
                actionGroup,
                DataManager.getInstance().getDataContext(editor.getComponent()),
                JBPopupFactory.ActionSelectionAid.SPEEDSEARCH,
                true);

        popupBuilder.showCenteredInCurrentWindow(project);


        /*
        // old dialog approach
        DBLanguageFile file = (DBLanguageFile) psiFile;
        SelectConnectionDialog selectCurrentSchemaDialog = new SelectConnectionDialog(file);
        selectCurrentSchemaDialog.show();
        */
    }




    private class SelectConnectionAction extends AnAction {
        private ConnectionHandler connectionHandler;
        private DBLanguageFile file;

        private SelectConnectionAction(ConnectionHandler connectionHandler, DBLanguageFile file) {
            super(connectionHandler.getName(), null, connectionHandler.getIcon());
            this.file = file;
            this.connectionHandler = connectionHandler;
        }

        @Override
        public void actionPerformed(AnActionEvent e) {
            DBSchema currentSchema = connectionHandler.getUserSchema();
            file.setActiveConnection(connectionHandler);
            file.setCurrentSchema(currentSchema);

        }
    }

    private class SetupConnectionAction extends AnAction {
        private SetupConnectionAction() {
            super("Setup new connection", null, Icons.CONNECTION_NEW);
        }

        @Override
        public void actionPerformed(AnActionEvent e) {
            Project project = ActionUtil.getProject(e);
            if (project != null) {
                GlobalProjectSettingsDialog globalSettingsDialog = new GlobalProjectSettingsDialog(project);
                globalSettingsDialog.show();
            }
        }
    }

    public boolean startInWriteAction() {
        return false;
    }
}
TOP

Related Classes of com.dci.intellij.dbn.code.common.intention.SelectConnectionIntentionAction$SetupConnectionAction

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.
y>