Package com.dci.intellij.dbn.editor.code.action

Source Code of com.dci.intellij.dbn.editor.code.action.CompareWithDatabaseAction

package com.dci.intellij.dbn.editor.code.action;

import com.dci.intellij.dbn.common.Icons;
import com.dci.intellij.dbn.common.thread.BackgroundTask;
import com.dci.intellij.dbn.common.util.ActionUtil;
import com.dci.intellij.dbn.common.util.MessageUtil;
import com.dci.intellij.dbn.editor.code.SourceCodeManager;
import com.dci.intellij.dbn.object.common.DBSchemaObject;
import com.dci.intellij.dbn.vfs.SourceCodeFile;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;

import java.sql.SQLException;

public class CompareWithDatabaseAction extends AbstractDiffAction {
    public CompareWithDatabaseAction() {
        super("Compare with database", null, Icons.CODE_EDITOR_DIFF_DB);
    }

    public void actionPerformed(final AnActionEvent e) {
        final Project project = ActionUtil.getProject(e);
        if (project != null) {
            new BackgroundTask(project, "Loading database source code", false, true) {
                @Override
                protected void execute(@NotNull ProgressIndicator progressIndicator) throws InterruptedException {
                    SourceCodeFile virtualFile = getSourcecodeFile(e);
                    Editor editor = getEditor(e);
                    if (virtualFile != null && editor != null) {
                        String content = editor.getDocument().getText();
                        virtualFile.setContent(content);
                        DBSchemaObject object = virtualFile.getObject();
                        if (object != null) {
                            try {
                                SourceCodeManager sourceCodeManager = SourceCodeManager.getInstance(project);
                                String referenceText = sourceCodeManager.loadSourceCodeFromDatabase(object, virtualFile.getContentType());
                                if (!progressIndicator.isCanceled()) {
                                    openDiffWindow(e, referenceText, "Database version", "Local version vs. database version");
                                }

                            } catch (SQLException e1) {
                                MessageUtil.showErrorDialog(
                                        "Could not load sourcecode for " +
                                                object.getQualifiedNameWithType() + " from database.", e1);
                            }
                        }
                    }
                }
            }.start();
        }

    }

    public void update(AnActionEvent e) {
        Editor editor = getEditor(e);
        e.getPresentation().setText("Compare with database");
        e.getPresentation().setEnabled(editor != null);
    }
}
TOP

Related Classes of com.dci.intellij.dbn.editor.code.action.CompareWithDatabaseAction

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.