Search in sources :

Example 61 with DBRRunnableWithProgress

use of org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress in project dbeaver by serge-rider.

the class ERDResourceHandler method createDiagram.

public static IFile createDiagram(final EntityDiagram copyFrom, final String title, IFolder folder, DBRProgressMonitor monitor) throws DBException {
    if (folder == null) {
        try {
            folder = getDiagramsFolder(DBWorkbench.getPlatform().getWorkspace().getActiveProject(), true);
        } catch (CoreException e) {
            throw new DBException("Can't obtain folder for diagram", e);
        }
    }
    if (folder == null) {
        throw new DBException("Can't detect folder for diagram");
    }
    ContentUtils.checkFolderExists(folder, monitor);
    final IFile file = ContentUtils.getUniqueFile(folder, CommonUtils.escapeFileName(title), ERD_EXT);
    try {
        DBRRunnableWithProgress runnable = monitor1 -> {
            try {
                EntityDiagram newDiagram = copyFrom == null ? new EntityDiagram(null, "<Diagram>", new ERDContentProviderDecorated(), new ERDDecoratorDefault()) : copyFrom.copy();
                newDiagram.setName(title);
                newDiagram.setLayoutManualAllowed(true);
                newDiagram.setLayoutManualDesired(true);
                String diagramState = DiagramLoader.serializeDiagram(monitor1, null, newDiagram, false, false);
                InputStream data = new ByteArrayInputStream(diagramState.getBytes(StandardCharsets.UTF_8));
                file.create(data, true, RuntimeUtils.getNestedMonitor(monitor1));
            } catch (Exception e) {
                throw new InvocationTargetException(e);
            }
        };
        if (monitor == null) {
            UIUtils.runInProgressService(runnable);
        } else {
            runnable.run(monitor);
        }
    } catch (InvocationTargetException e) {
        throw new DBException("Error creating diagram", e.getTargetException());
    } catch (InterruptedException e) {
    // interrupted
    }
    return file;
}
Also used : DBWorkbench(org.jkiss.dbeaver.runtime.DBWorkbench) IFolder(org.eclipse.core.resources.IFolder) DBNNode(org.jkiss.dbeaver.model.navigator.DBNNode) ERDContentProviderDecorated(org.jkiss.dbeaver.erd.ui.model.ERDContentProviderDecorated) CoreException(org.eclipse.core.runtime.CoreException) NotNull(org.jkiss.code.NotNull) DBNResource(org.jkiss.dbeaver.model.navigator.DBNResource) IProject(org.eclipse.core.resources.IProject) ByteArrayInputStream(java.io.ByteArrayInputStream) UIUtils(org.jkiss.dbeaver.ui.UIUtils) Log(org.jkiss.dbeaver.Log) DBRProgressMonitor(org.jkiss.dbeaver.model.runtime.DBRProgressMonitor) IFile(org.eclipse.core.resources.IFile) DBPProject(org.jkiss.dbeaver.model.app.DBPProject) ERDEditorStandalone(org.jkiss.dbeaver.erd.ui.editor.ERDEditorStandalone) DiagramLoader(org.jkiss.dbeaver.erd.ui.model.DiagramLoader) CommonUtils(org.jkiss.utils.CommonUtils) FileEditorInput(org.eclipse.ui.part.FileEditorInput) ContentUtils(org.jkiss.dbeaver.utils.ContentUtils) EntityDiagram(org.jkiss.dbeaver.erd.ui.model.EntityDiagram) StandardCharsets(java.nio.charset.StandardCharsets) DBPDataSourceContainer(org.jkiss.dbeaver.model.DBPDataSourceContainer) InvocationTargetException(java.lang.reflect.InvocationTargetException) List(java.util.List) AbstractResourceHandler(org.jkiss.dbeaver.ui.resources.AbstractResourceHandler) RuntimeUtils(org.jkiss.dbeaver.utils.RuntimeUtils) DBException(org.jkiss.dbeaver.DBException) IResource(org.eclipse.core.resources.IResource) ERDDecoratorDefault(org.jkiss.dbeaver.erd.ui.model.ERDDecoratorDefault) DBRRunnableWithProgress(org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress) InputStream(java.io.InputStream) DBException(org.jkiss.dbeaver.DBException) EntityDiagram(org.jkiss.dbeaver.erd.ui.model.EntityDiagram) IFile(org.eclipse.core.resources.IFile) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) ERDContentProviderDecorated(org.jkiss.dbeaver.erd.ui.model.ERDContentProviderDecorated) ERDDecoratorDefault(org.jkiss.dbeaver.erd.ui.model.ERDDecoratorDefault) CoreException(org.eclipse.core.runtime.CoreException) InvocationTargetException(java.lang.reflect.InvocationTargetException) DBException(org.jkiss.dbeaver.DBException) InvocationTargetException(java.lang.reflect.InvocationTargetException) CoreException(org.eclipse.core.runtime.CoreException) ByteArrayInputStream(java.io.ByteArrayInputStream) DBRRunnableWithProgress(org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress)

Example 62 with DBRRunnableWithProgress

use of org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress in project dbeaver by serge-rider.

the class NavigatorHandlerObjectCreateCopy method pasteResource.

private void pasteResource(final File file, DBNResource toFolder) {
    final IResource targetResource = toFolder.getResource();
    assert targetResource != null;
    final IContainer targetFolder = targetResource instanceof IContainer ? (IContainer) targetResource : targetResource.getParent();
    try {
        UIUtils.runInProgressService(new DBRRunnableWithProgress() {

            @Override
            public void run(DBRProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
                try {
                    final IFile targetFile = targetFolder.getFile(new Path(file.getName()));
                    if (targetFile.exists()) {
                        throw new IOException("Target file '" + targetFile.getFullPath() + "' already exists");
                    }
                    try (InputStream is = new FileInputStream(file)) {
                        targetFile.create(is, true, monitor.getNestedMonitor());
                    }
                } catch (Exception e) {
                    throw new InvocationTargetException(e);
                }
            }
        });
    } catch (InvocationTargetException e) {
        DBWorkbench.getPlatformUI().showError("Copy error", "Error copying resource", e.getTargetException());
    } catch (InterruptedException e) {
    // ignore
    }
}
Also used : Path(org.eclipse.core.runtime.Path) IFile(org.eclipse.core.resources.IFile) InvocationTargetException(java.lang.reflect.InvocationTargetException) CoreException(org.eclipse.core.runtime.CoreException) ExecutionException(org.eclipse.core.commands.ExecutionException) InvocationTargetException(java.lang.reflect.InvocationTargetException) DBRRunnableWithProgress(org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress) DBRProgressMonitor(org.jkiss.dbeaver.model.runtime.DBRProgressMonitor) IContainer(org.eclipse.core.resources.IContainer) IResource(org.eclipse.core.resources.IResource)

Example 63 with DBRRunnableWithProgress

use of org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress in project dbeaver by serge-rider.

the class JDBCDataSource method openConnection.

protected Connection openConnection(@NotNull DBRProgressMonitor monitor, @Nullable JDBCExecutionContext context, @NotNull String purpose) throws DBCException {
    // It MUST be a JDBC driver
    Driver driverInstance = null;
    DBPDriver driver = getContainer().getDriver();
    if (driver.isInstantiable() && !CommonUtils.isEmpty(driver.getDriverClassName())) {
        try {
            driverInstance = getDriverInstance(monitor);
        } catch (DBException e) {
            throw new DBCConnectException("Can't create driver instance", e, this);
        }
    } else {
        if (!CommonUtils.isEmpty(driver.getDriverClassName())) {
            try {
                driver.loadDriver(monitor);
                Class.forName(driver.getDriverClassName(), true, driver.getClassLoader());
            } catch (Exception e) {
                throw new DBCException("Driver class '" + driver.getDriverClassName() + "' not found", e);
            }
        }
    }
    DBPConnectionConfiguration connectionInfo = new DBPConnectionConfiguration(container.getActualConnectionConfiguration());
    Properties connectProps = getAllConnectionProperties(monitor, context, purpose, connectionInfo);
    final JDBCConnectionConfigurer connectionConfigurer = GeneralUtils.adapt(this, JDBCConnectionConfigurer.class);
    DBAAuthModel authModel = connectionInfo.getAuthModel();
    // Obtain connection
    try {
        if (connectionConfigurer != null) {
            connectionConfigurer.beforeConnection(monitor, connectionInfo, connectProps);
        }
        final String url = getConnectionURL(connectionInfo);
        if (driverInstance != null) {
            try {
                if (!driverInstance.acceptsURL(url)) {
                    // Just write a warning in log. Some drivers are poorly coded and always returns false here.
                    log.error("Bad URL: " + url);
                }
            } catch (Throwable e) {
                log.debug("Error in " + driverInstance.getClass().getName() + ".acceptsURL() - " + url, e);
            }
        }
        monitor.subTask("Connecting " + purpose);
        Connection[] connection = new Connection[1];
        Exception[] error = new Exception[1];
        int openTimeout = getContainer().getPreferenceStore().getInt(ModelPreferences.CONNECTION_OPEN_TIMEOUT);
        final Driver driverInstanceFinal = driverInstance;
        try {
            DBAAuthCredentials credentials = authModel.loadCredentials(getContainer(), connectionInfo);
            authModel.initAuthentication(monitor, this, credentials, connectionInfo, connectProps);
        } catch (DBException e) {
            throw new DBCException("Authentication error: " + e.getMessage(), e);
        }
        DBRRunnableWithProgress connectTask = monitor1 -> {
            try {
                if (driverInstanceFinal == null) {
                    connection[0] = DriverManager.getConnection(url, connectProps);
                } else {
                    connection[0] = driverInstanceFinal.connect(url, connectProps);
                }
            } catch (Exception e) {
                error[0] = e;
            } finally {
                if (connectionConfigurer != null) {
                    try {
                        connectionConfigurer.afterConnection(monitor, connectionInfo, connectProps, connection[0], error[0]);
                    } catch (Exception e) {
                        log.debug(e);
                    }
                }
            }
        };
        boolean openTaskFinished;
        try {
            if (openTimeout <= 0) {
                openTaskFinished = true;
                connectTask.run(monitor);
            } else {
                openTaskFinished = RuntimeUtils.runTask(connectTask, "Opening database connection", openTimeout + 2000);
            }
        } finally {
            authModel.endAuthentication(container, connectionInfo, connectProps);
        }
        if (error[0] != null) {
            throw error[0];
        }
        if (!openTaskFinished) {
            throw new DBCException("Connection has timed out");
        }
        if (connection[0] == null) {
            throw new DBCException("Null connection returned");
        }
        // Set read-only flag
        if (container.isConnectionReadOnly() && !isConnectionReadOnlyBroken()) {
            connection[0].setReadOnly(true);
        }
        return connection[0];
    } catch (SQLException ex) {
        throw new DBCConnectException(ex.getMessage(), ex, this);
    } catch (DBCException ex) {
        throw ex;
    } catch (Throwable e) {
        throw new DBCConnectException("Unexpected driver error occurred while connecting to the database", e);
    }
}
Also used : java.sql(java.sql) JDBCFactory(org.jkiss.dbeaver.model.exec.jdbc.JDBCFactory) Property(org.jkiss.dbeaver.model.meta.Property) Nullable(org.jkiss.code.Nullable) NotNull(org.jkiss.code.NotNull) DBSInstanceContainer(org.jkiss.dbeaver.model.struct.DBSInstanceContainer) ModelMessages(org.jkiss.dbeaver.model.messages.ModelMessages) SocketException(java.net.SocketException) JDBCConnectionImpl(org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCConnectionImpl) DBPDriver(org.jkiss.dbeaver.model.connection.DBPDriver) JDBCSession(org.jkiss.dbeaver.model.exec.jdbc.JDBCSession) DBSDataType(org.jkiss.dbeaver.model.struct.DBSDataType) Map(java.util.Map) Log(org.jkiss.dbeaver.Log) DBRProgressMonitor(org.jkiss.dbeaver.model.runtime.DBRProgressMonitor) DBSObjectContainer(org.jkiss.dbeaver.model.struct.DBSObjectContainer) ModelPreferences(org.jkiss.dbeaver.ModelPreferences) org.jkiss.dbeaver.model(org.jkiss.dbeaver.model) IAdaptable(org.eclipse.core.runtime.IAdaptable) DBAAuthModel(org.jkiss.dbeaver.model.auth.DBAAuthModel) GeneralUtils(org.jkiss.dbeaver.utils.GeneralUtils) CommonUtils(org.jkiss.utils.CommonUtils) Properties(java.util.Properties) DBPConnectionConfiguration(org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration) JDBCStatement(org.jkiss.dbeaver.model.exec.jdbc.JDBCStatement) org.jkiss.dbeaver.model.exec(org.jkiss.dbeaver.model.exec) JDBCFactoryDefault(org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCFactoryDefault) DBSObject(org.jkiss.dbeaver.model.struct.DBSObject) JDBCDatabaseMetaData(org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData) List(java.util.List) RuntimeUtils(org.jkiss.dbeaver.utils.RuntimeUtils) DBException(org.jkiss.dbeaver.DBException) SQLDialect(org.jkiss.dbeaver.model.sql.SQLDialect) SQLState(org.jkiss.dbeaver.model.sql.SQLState) DBAAuthCredentials(org.jkiss.dbeaver.model.auth.DBAAuthCredentials) DBRRunnableWithProgress(org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress) Collections(java.util.Collections) VoidProgressMonitor(org.jkiss.dbeaver.model.runtime.VoidProgressMonitor) DBException(org.jkiss.dbeaver.DBException) DBAAuthCredentials(org.jkiss.dbeaver.model.auth.DBAAuthCredentials) DBPDriver(org.jkiss.dbeaver.model.connection.DBPDriver) Properties(java.util.Properties) SocketException(java.net.SocketException) DBException(org.jkiss.dbeaver.DBException) DBAAuthModel(org.jkiss.dbeaver.model.auth.DBAAuthModel) DBPConnectionConfiguration(org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration) DBPDriver(org.jkiss.dbeaver.model.connection.DBPDriver) DBRRunnableWithProgress(org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress)

Example 64 with DBRRunnableWithProgress

use of org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress in project dbeaver by serge-rider.

the class ResultSetViewer method restoreDataFilter.

private DBDDataFilter restoreDataFilter(final DBSDataContainer dataContainer) {
    // Restore data filter
    final DataFilterRegistry.SavedDataFilter savedConfig = DataFilterRegistry.getInstance().getSavedConfig(dataContainer);
    if (savedConfig != null) {
        final DBDDataFilter dataFilter = new DBDDataFilter();
        DBRRunnableWithProgress restoreTask = monitor -> {
            try {
                savedConfig.restoreDataFilter(monitor, dataContainer, dataFilter);
            } catch (DBException e) {
                throw new InvocationTargetException(e);
            }
        };
        RuntimeUtils.runTask(restoreTask, "Restore data filter", 10000);
        if (dataFilter.hasFilters()) {
            return dataFilter;
        }
    }
    return null;
}
Also used : DatabaseLoadService(org.jkiss.dbeaver.model.runtime.load.DatabaseLoadService) SQLQueryContainer(org.jkiss.dbeaver.model.sql.SQLQueryContainer) org.eclipse.jface.action(org.eclipse.jface.action) CompoundContributionItem(org.eclipse.ui.actions.CompoundContributionItem) org.jkiss.dbeaver.ui(org.jkiss.dbeaver.ui) IMenuService(org.eclipse.ui.menus.IMenuService) org.jkiss.dbeaver.model.virtual(org.jkiss.dbeaver.model.virtual) CommandContributionItemParameter(org.eclipse.ui.menus.CommandContributionItemParameter) NavigatorCommands(org.jkiss.dbeaver.ui.navigator.NavigatorCommands) IDialogConstants(org.eclipse.jface.dialogs.IDialogConstants) IDialogSettings(org.eclipse.jface.dialogs.IDialogSettings) GC(org.eclipse.swt.graphics.GC) Point(org.eclipse.swt.graphics.Point) DBSQLException(org.jkiss.dbeaver.model.sql.DBSQLException) ToolbarSeparatorContribution(org.jkiss.dbeaver.ui.controls.ToolbarSeparatorContribution) PrefPageResultSetMain(org.jkiss.dbeaver.ui.editors.data.preferences.PrefPageResultSetMain) ModelMessages(org.jkiss.dbeaver.model.messages.ModelMessages) IStatus(org.eclipse.core.runtime.IStatus) org.eclipse.swt.custom(org.eclipse.swt.custom) ITextEditorActionDefinitionIds(org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds) AbstractExecutionSource(org.jkiss.dbeaver.model.impl.AbstractExecutionSource) DBPProject(org.jkiss.dbeaver.model.app.DBPProject) SQLScriptElement(org.jkiss.dbeaver.model.sql.SQLScriptElement) IAdaptable(org.eclipse.core.runtime.IAdaptable) DBPPreferenceListener(org.jkiss.dbeaver.model.preferences.DBPPreferenceListener) ILoadService(org.jkiss.dbeaver.model.runtime.load.ILoadService) GeneralUtils(org.jkiss.dbeaver.utils.GeneralUtils) CommonUtils(org.jkiss.utils.CommonUtils) org.eclipse.swt.layout(org.eclipse.swt.layout) NLS(org.eclipse.osgi.util.NLS) Status(org.eclipse.core.runtime.Status) IFindReplaceTarget(org.eclipse.jface.text.IFindReplaceTarget) IThemeManager(org.eclipse.ui.themes.IThemeManager) org.eclipse.jface.viewers(org.eclipse.jface.viewers) DBStyles(org.jkiss.dbeaver.ui.css.DBStyles) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) InvocationTargetException(java.lang.reflect.InvocationTargetException) StatResultSet(org.jkiss.dbeaver.model.impl.local.StatResultSet) List(java.util.List) EmptyPresentation(org.jkiss.dbeaver.ui.controls.resultset.view.EmptyPresentation) RuntimeUtils(org.jkiss.dbeaver.utils.RuntimeUtils) org.jkiss.dbeaver.ui.controls.resultset.virtual(org.jkiss.dbeaver.ui.controls.resultset.virtual) DBException(org.jkiss.dbeaver.DBException) AutoRefreshControl(org.jkiss.dbeaver.ui.controls.autorefresh.AutoRefreshControl) DataEditorsMessages(org.jkiss.dbeaver.ui.editors.data.internal.DataEditorsMessages) SWT(org.eclipse.swt.SWT) ResetRowColorAction(org.jkiss.dbeaver.ui.controls.resultset.colors.ResetRowColorAction) SetRowColorAction(org.jkiss.dbeaver.ui.controls.resultset.colors.SetRowColorAction) SQLUtils(org.jkiss.dbeaver.model.sql.SQLUtils) PrefUtils(org.jkiss.dbeaver.utils.PrefUtils) CommandContributionItem(org.eclipse.ui.menus.CommandContributionItem) VerticalFolder(org.jkiss.dbeaver.ui.controls.VerticalFolder) TabFolderReorder(org.jkiss.dbeaver.ui.controls.TabFolderReorder) VoidProgressMonitor(org.jkiss.dbeaver.model.runtime.VoidProgressMonitor) DBWorkbench(org.jkiss.dbeaver.runtime.DBWorkbench) CustomizeColorsAction(org.jkiss.dbeaver.ui.controls.resultset.colors.CustomizeColorsAction) java.util(java.util) DBPPreferenceStore(org.jkiss.dbeaver.model.preferences.DBPPreferenceStore) StatisticsPresentation(org.jkiss.dbeaver.ui.controls.resultset.view.StatisticsPresentation) org.jkiss.dbeaver.model.data(org.jkiss.dbeaver.model.data) Rectangle(org.eclipse.swt.graphics.Rectangle) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Nullable(org.jkiss.code.Nullable) AbstractJob(org.jkiss.dbeaver.model.runtime.AbstractJob) NotNull(org.jkiss.code.NotNull) ResultSetPanelDescriptor(org.jkiss.dbeaver.ui.controls.resultset.panel.ResultSetPanelDescriptor) DataSourceJob(org.jkiss.dbeaver.runtime.jobs.DataSourceJob) Log(org.jkiss.dbeaver.Log) DBRProgressMonitor(org.jkiss.dbeaver.model.runtime.DBRProgressMonitor) ResultSetMessages(org.jkiss.dbeaver.ui.controls.resultset.internal.ResultSetMessages) ErrorPresentation(org.jkiss.dbeaver.ui.controls.resultset.view.ErrorPresentation) IPropertyChangeListener(org.eclipse.jface.util.IPropertyChangeListener) PrefPageDataFormat(org.jkiss.dbeaver.ui.editors.data.preferences.PrefPageDataFormat) ModelPreferences(org.jkiss.dbeaver.ModelPreferences) org.jkiss.dbeaver.model(org.jkiss.dbeaver.model) IValueController(org.jkiss.dbeaver.ui.data.IValueController) DBeaverNotifications(org.jkiss.dbeaver.runtime.DBeaverNotifications) org.eclipse.swt.events(org.eclipse.swt.events) org.jkiss.dbeaver.model.struct(org.jkiss.dbeaver.model.struct) FilterValueEditPopup(org.jkiss.dbeaver.ui.controls.resultset.valuefilter.FilterValueEditPopup) org.jkiss.dbeaver.model.exec(org.jkiss.dbeaver.model.exec) org.eclipse.swt.widgets(org.eclipse.swt.widgets) DecimalFormat(java.text.DecimalFormat) VerticalButton(org.jkiss.dbeaver.ui.controls.VerticalButton) ArrayUtils(org.jkiss.utils.ArrayUtils) org.eclipse.ui(org.eclipse.ui) CSSUtils(org.jkiss.dbeaver.ui.css.CSSUtils) org.jkiss.dbeaver.ui.controls.resultset.handler(org.jkiss.dbeaver.ui.controls.resultset.handler) Color(org.eclipse.swt.graphics.Color) ITheme(org.eclipse.ui.themes.ITheme) DBEPersistAction(org.jkiss.dbeaver.model.edit.DBEPersistAction) DBRRunnableWithProgress(org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress) ConfirmationDialog(org.jkiss.dbeaver.ui.dialogs.ConfirmationDialog) DBException(org.jkiss.dbeaver.DBException) DBRRunnableWithProgress(org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress) InvocationTargetException(java.lang.reflect.InvocationTargetException)

Aggregations

DBRRunnableWithProgress (org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress)64 DBRProgressMonitor (org.jkiss.dbeaver.model.runtime.DBRProgressMonitor)60 InvocationTargetException (java.lang.reflect.InvocationTargetException)58 DBException (org.jkiss.dbeaver.DBException)36 ArrayList (java.util.ArrayList)11 IFile (org.eclipse.core.resources.IFile)11 DBNDatabaseNode (org.jkiss.dbeaver.model.navigator.DBNDatabaseNode)11 CoreException (org.eclipse.core.runtime.CoreException)10 DBSObject (org.jkiss.dbeaver.model.struct.DBSObject)10 List (java.util.List)9 NotNull (org.jkiss.code.NotNull)9 Nullable (org.jkiss.code.Nullable)9 CommonUtils (org.jkiss.utils.CommonUtils)8 File (java.io.File)7 Collection (java.util.Collection)7 AbstractJob (org.jkiss.dbeaver.model.runtime.AbstractJob)7 Log (org.jkiss.dbeaver.Log)6 InputStream (java.io.InputStream)5 IResource (org.eclipse.core.resources.IResource)5 SWT (org.eclipse.swt.SWT)5