diff --git a/plugins/org.jkiss.dbeaver.core/META-INF/MANIFEST.MF b/plugins/org.jkiss.dbeaver.core/META-INF/MANIFEST.MF index 478cf0aed030060a7b545b00aed1a46a19e8d18a..83852a7b799cb410dcd4bdb17648955791772121 100644 --- a/plugins/org.jkiss.dbeaver.core/META-INF/MANIFEST.MF +++ b/plugins/org.jkiss.dbeaver.core/META-INF/MANIFEST.MF @@ -126,6 +126,7 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.nebula.widgets.gallery, org.jkiss.dbeaver.model;visibility:=reexport, org.jkiss.dbeaver.ui;visibility:=reexport, + org.jkiss.dbeaver.ui.editors.base;visibility:=reexport, org.jkiss.utils;visibility:=reexport, org.jkiss.dbeaver.data.transfer, org.jkiss.bundle.bouncycastle;resolution:=optional diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/DBeaverCore.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/DBeaverCore.java index 78dc939005de209b7a4bb52dec8eef489e0f434d..ffcee0e5820dc6be5b5e3e6dc4ebff8f4ea3fc8f 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/DBeaverCore.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/core/DBeaverCore.java @@ -495,6 +495,8 @@ public class DBeaverCore implements DBPPlatform { return projectRegistry; } + @NotNull + @Override public DBPExternalFileManager getExternalFileManager() { return projectRegistry; } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/DataSourceRegistry.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/DataSourceRegistry.java index 489197121358b5713d49c9a8a4ee96a5286edfb8..55d9458a344f47d7f77201ba6960824684f97734 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/DataSourceRegistry.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/DataSourceRegistry.java @@ -447,19 +447,6 @@ public class DataSourceRegistry implements DBPDataSourceRegistry return SecurePreferencesFactory.getDefault().node("dbeaver").node("datasources"); } - public static List getAllRegistries() { - List result = new ArrayList<>(); - for (IProject project : DBeaverCore.getInstance().getLiveProjects()) { - if (project.isOpen()) { - DataSourceRegistry registry = DBeaverCore.getInstance().getProjectRegistry().getDataSourceRegistry(project); - if (registry != null) { - result.add(registry); - } - } - } - return result; - } - public static List getAllDataSources() { List result = new ArrayList<>(); for (IProject project : DBeaverCore.getInstance().getLiveProjects()) { @@ -474,23 +461,6 @@ public class DataSourceRegistry implements DBPDataSourceRegistry } - /** - * Find data source in all available registries - */ - public static DBPDataSourceContainer findDataSource(String dataSourceId) { - ProjectRegistry projectRegistry = DBeaverCore.getInstance().getProjectRegistry(); - for (IProject project : DBeaverCore.getInstance().getLiveProjects()) { - DataSourceRegistry dataSourceRegistry = projectRegistry.getDataSourceRegistry(project); - if (dataSourceRegistry != null) { - DBPDataSourceContainer dataSourceContainer = dataSourceRegistry.getDataSource(dataSourceId); - if (dataSourceContainer != null) { - return dataSourceContainer; - } - } - } - return null; - } - private void loadDataSources(boolean refresh) { if (!project.isOpen()) { return; diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/querylog/QueryLogViewer.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/querylog/QueryLogViewer.java index c06453c184c277c0103c788b99e461fb96f533a9..7c942987c0eb2edeb16ad10940183a71440edd64 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/querylog/QueryLogViewer.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/controls/querylog/QueryLogViewer.java @@ -46,6 +46,7 @@ import org.jkiss.dbeaver.core.CoreCommands; import org.jkiss.dbeaver.core.CoreMessages; import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.model.DBPDataSourceContainer; +import org.jkiss.dbeaver.model.DBUtils; import org.jkiss.dbeaver.model.exec.DBCExecutionContext; import org.jkiss.dbeaver.model.exec.DBCExecutionPurpose; import org.jkiss.dbeaver.model.preferences.DBPPreferenceListener; @@ -56,7 +57,6 @@ import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.load.AbstractLoadService; import org.jkiss.dbeaver.model.sql.SQLConstants; import org.jkiss.dbeaver.model.sql.SQLDialect; -import org.jkiss.dbeaver.registry.DataSourceRegistry; import org.jkiss.dbeaver.runtime.qm.DefaultEventFilter; import org.jkiss.dbeaver.ui.*; import org.jkiss.dbeaver.ui.controls.ProgressLoaderVisualizer; @@ -893,7 +893,7 @@ public class QueryLogViewer extends Viewer implements QMMetaListener, DBPPrefere QMMStatementExecuteInfo stmtExec = (QMMStatementExecuteInfo) object; if (dsContainer == null) { String containerId = stmtExec.getStatement().getSession().getContainerId(); - dsContainer = DataSourceRegistry.findDataSource(containerId); + dsContainer = DBUtils.findDataSource(containerId); } String queryString = stmtExec.getQueryString(); if (!CommonUtils.isEmptyTrimmed(queryString)) { diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/DatabaseEditorInput.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/DatabaseEditorInput.java index e887cbda3ee31a2ae6208aab864f52c6b8a51e4f..8fca5465c3b743248f2073337fe9a6b008ba5ce3 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/DatabaseEditorInput.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/DatabaseEditorInput.java @@ -23,7 +23,6 @@ import org.eclipse.ui.model.IWorkbenchAdapter; import org.eclipse.ui.model.WorkbenchAdapter; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.DBeaverPreferences; -import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.model.DBPDataSourceContainer; import org.jkiss.dbeaver.model.DBUtils; import org.jkiss.dbeaver.model.IDataSourceContainerProvider; @@ -33,6 +32,7 @@ import org.jkiss.dbeaver.model.navigator.DBNDataSource; import org.jkiss.dbeaver.model.navigator.DBNDatabaseNode; import org.jkiss.dbeaver.model.preferences.DBPPropertySource; import org.jkiss.dbeaver.model.struct.DBSObject; +import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.dbeaver.runtime.properties.PropertySourceEditable; import org.jkiss.dbeaver.ui.DBeaverIcons; @@ -90,7 +90,7 @@ public abstract class DatabaseEditorInput implemen @Override public String getName() { - if (DBeaverCore.getGlobalPreferenceStore().getBoolean(DBeaverPreferences.NAVIGATOR_EDITOR_FULL_NAME)) { + if (DBWorkbench.getPlatform().getPreferenceStore().getBoolean(DBeaverPreferences.NAVIGATOR_EDITOR_FULL_NAME)) { return node.getNodeFullName(); } else { return node.getName(); @@ -103,7 +103,7 @@ public abstract class DatabaseEditorInput implemen if (getExecutionContext() == null || getDatabaseObject() == null || !getDatabaseObject().isPersisted() || - !DBeaverCore.getGlobalPreferenceStore().getBoolean(DBeaverPreferences.UI_KEEP_DATABASE_EDITORS)) + !DBWorkbench.getPlatform().getPreferenceStore().getBoolean(DBeaverPreferences.UI_KEEP_DATABASE_EDITORS)) { return null; } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/DatabaseEditorInputFactory.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/DatabaseEditorInputFactory.java index cff9a067ba1a8bfe08ca6166d7fa681da392f272..55375ed5bc6a2802abfdb082d734dad35d5a714f 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/DatabaseEditorInputFactory.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/DatabaseEditorInputFactory.java @@ -22,12 +22,12 @@ import org.eclipse.ui.IElementFactory; import org.eclipse.ui.IMemento; import org.jkiss.dbeaver.DBeaverPreferences; import org.jkiss.dbeaver.Log; -import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.model.DBPDataSourceContainer; +import org.jkiss.dbeaver.model.DBUtils; import org.jkiss.dbeaver.model.exec.DBCExecutionContext; import org.jkiss.dbeaver.model.navigator.DBNDatabaseNode; import org.jkiss.dbeaver.model.navigator.DBNModel; -import org.jkiss.dbeaver.registry.DataSourceRegistry; +import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.utils.CommonUtils; public class DatabaseEditorInputFactory implements IElementFactory @@ -68,7 +68,7 @@ public class DatabaseEditorInputFactory implements IElementFactory final String activePageId = memento.getString(TAG_ACTIVE_PAGE); final String activeFolderId = memento.getString(TAG_ACTIVE_FOLDER); - final DBPDataSourceContainer dataSourceContainer = DataSourceRegistry.findDataSource(dataSourceId); + final DBPDataSourceContainer dataSourceContainer = DBUtils.findDataSource(dataSourceId); if (dataSourceContainer == null) { log.error("Can't find data source '" + dataSourceId + "'"); //$NON-NLS-2$ return null; @@ -79,7 +79,7 @@ public class DatabaseEditorInputFactory implements IElementFactory return null; } final IProject project = dataSourceContainer.getRegistry().getProject(); - final DBNModel navigatorModel = DBeaverCore.getInstance().getNavigatorModel(); + final DBNModel navigatorModel = DBWorkbench.getPlatform().getNavigatorModel(); navigatorModel.ensureProjectLoaded(project); return new DatabaseLazyEditorInput(dataSourceContainer, project, nodePath, nodeName, activePageId, activeFolderId); @@ -87,7 +87,7 @@ public class DatabaseEditorInputFactory implements IElementFactory public static void saveState(IMemento memento, DatabaseEditorInput input) { - if (!DBeaverCore.getGlobalPreferenceStore().getBoolean(DBeaverPreferences.UI_KEEP_DATABASE_EDITORS)) { + if (!DBWorkbench.getPlatform().getPreferenceStore().getBoolean(DBeaverPreferences.UI_KEEP_DATABASE_EDITORS)) { return; } final DBCExecutionContext context = input.getExecutionContext(); diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/DatabaseEditorListener.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/DatabaseEditorListener.java index 47a70d23e0cb1538ca3da521578e93e66811754c..860ca1639b6d62d5f9a839957f98ed0eea396b65 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/DatabaseEditorListener.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/DatabaseEditorListener.java @@ -17,11 +17,11 @@ package org.jkiss.dbeaver.ui.editors; import org.eclipse.ui.IWorkbenchPage; -import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.model.DBPDataSourceContainer; import org.jkiss.dbeaver.model.navigator.DBNEvent; import org.jkiss.dbeaver.model.navigator.DBNNode; import org.jkiss.dbeaver.model.navigator.INavigatorListener; +import org.jkiss.dbeaver.runtime.DBWorkbench; /** * DatabaseEditorListener @@ -44,7 +44,7 @@ public class DatabaseEditorListener implements INavigatorListener dataSourceContainer.acquire(databaseEditor); } // Register node listener - DBeaverCore.getInstance().getNavigatorModel().addListener(this); + DBWorkbench.getPlatform().getNavigatorModel().addListener(this); } public void dispose() @@ -56,7 +56,7 @@ public class DatabaseEditorListener implements INavigatorListener } // Remove node listener - DBeaverCore.getInstance().getNavigatorModel().removeListener(this); + DBWorkbench.getPlatform().getNavigatorModel().removeListener(this); } public DBNNode getTreeNode() @@ -86,7 +86,7 @@ public class DatabaseEditorListener implements INavigatorListener } } if (closeEditor) { - if (DBeaverCore.isClosing()) { + if (DBWorkbench.getPlatform().isShuttingDown()) { // Do not update editors during shutdown, just remove listeners dispose(); return; diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/DatabaseLazyEditorInput.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/DatabaseLazyEditorInput.java index f629248a7c0836d4a0c079f483f95abab4cfb78e..9723eb3a4e87d8daacdb67617e6451655c9173d1 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/DatabaseLazyEditorInput.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/DatabaseLazyEditorInput.java @@ -22,7 +22,6 @@ import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.IPersistableElement; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.DBException; -import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.model.DBPDataSourceContainer; import org.jkiss.dbeaver.model.edit.DBECommandContext; import org.jkiss.dbeaver.model.exec.DBCExecutionContext; @@ -33,6 +32,7 @@ import org.jkiss.dbeaver.model.navigator.DBNNode; import org.jkiss.dbeaver.model.preferences.DBPPropertySource; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.struct.DBSObject; +import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.dbeaver.runtime.properties.PropertySourceCustom; import org.jkiss.dbeaver.ui.DBeaverIcons; import org.jkiss.dbeaver.ui.UITask; @@ -184,7 +184,7 @@ public class DatabaseLazyEditorInput implements IDatabaseEditorInput public IDatabaseEditorInput initializeRealInput(final DBRProgressMonitor monitor) throws DBException { - final DBNModel navigatorModel = DBeaverCore.getInstance().getNavigatorModel(); + final DBNModel navigatorModel = DBWorkbench.getPlatform().getNavigatorModel(); while (!dataSource.isConnected()) { boolean connected; diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/EditorUtils.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/EditorUtils.java index e16e66b45e98d176095848d95aaba64d292bba38..480ad8638098d01de410c6571409392b4ee53dff 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/EditorUtils.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/EditorUtils.java @@ -37,14 +37,12 @@ import org.eclipse.ui.ide.IDE; import org.jkiss.code.NotNull; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.Log; -import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.model.DBPDataSourceContainer; import org.jkiss.dbeaver.model.DBPExternalFileManager; +import org.jkiss.dbeaver.model.app.DBPDataSourceRegistry; import org.jkiss.dbeaver.model.struct.DBSObject; -import org.jkiss.dbeaver.registry.DataSourceRegistry; +import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.dbeaver.ui.UIUtils; -import org.jkiss.dbeaver.ui.editors.sql.SQLPreferenceConstants; -import org.jkiss.dbeaver.ui.navigator.NavigatorUtils; import org.jkiss.dbeaver.utils.ContentUtils; import org.jkiss.utils.CommonUtils; @@ -136,14 +134,6 @@ public class EditorUtils { ////////////////////////////////////////////////////////// // Datasource <-> resource manipulations - public static boolean isReadEmbeddedBinding() { - return DBeaverCore.getGlobalPreferenceStore().getBoolean(SQLPreferenceConstants.SCRIPT_BIND_EMBEDDED_READ); - } - - public static boolean isWriteEmbeddedBinding() { - return DBeaverCore.getGlobalPreferenceStore().getBoolean(SQLPreferenceConstants.SCRIPT_BIND_EMBEDDED_WRITE); - } - public static DBPDataSourceContainer getInputDataSource(IEditorInput editorInput) { if (editorInput instanceof IDatabaseEditorInput) { @@ -161,18 +151,18 @@ public class EditorUtils { } else { File localFile = getLocalFileFromInput(editorInput); if (localFile != null) { - final DBPExternalFileManager efManager = DBeaverCore.getInstance().getExternalFileManager(); + final DBPExternalFileManager efManager = DBWorkbench.getPlatform().getExternalFileManager(); String dataSourceId = (String) efManager.getFileProperty(localFile, PROP_SQL_DATA_SOURCE_ID); String projectName = (String) efManager.getFileProperty(localFile, PROP_SQL_PROJECT_ID); if (CommonUtils.isEmpty(dataSourceId) || CommonUtils.isEmpty(projectName)) { return null; } - final IProject project = DBeaverCore.getInstance().getWorkspace().getEclipseWorkspace().getRoot().getProject(projectName); + final IProject project = DBWorkbench.getPlatform().getWorkspace().getEclipseWorkspace().getRoot().getProject(projectName); if (project == null || !project.exists()) { log.error("Can't locate project '" + projectName + "' in workspace"); return null; } - DataSourceRegistry dataSourceRegistry = DBeaverCore.getInstance().getProjectRegistry().getDataSourceRegistry(project); + DBPDataSourceRegistry dataSourceRegistry = DBWorkbench.getPlatform().getProjectManager().getDataSourceRegistry(project); return dataSourceRegistry == null ? null : dataSourceRegistry.getDataSource(dataSourceId); } else { @@ -194,12 +184,12 @@ public class EditorUtils { if (dataSourceId != null) { IProject project = file.getProject(); if (projectId != null) { - final IProject fileProject = DBeaverCore.getInstance().getWorkspace().getEclipseWorkspace().getRoot().getProject(projectId); + final IProject fileProject = DBWorkbench.getPlatform().getWorkspace().getEclipseWorkspace().getRoot().getProject(projectId); if (fileProject != null && fileProject.exists()) { project = fileProject; } } - DataSourceRegistry dataSourceRegistry = DBeaverCore.getInstance().getProjectRegistry().getDataSourceRegistry(project); + DBPDataSourceRegistry dataSourceRegistry = DBWorkbench.getPlatform().getProjectManager().getDataSourceRegistry(project); return dataSourceRegistry == null ? null : dataSourceRegistry.getDataSource(dataSourceId); } else { // Try to extract from embedded comment @@ -211,7 +201,7 @@ public class EditorUtils { } } - public static void setInputDataSource(@NotNull IEditorInput editorInput, @Nullable DBPDataSourceContainer dataSourceContainer, boolean notify) + public static void setInputDataSource(@NotNull IEditorInput editorInput, @Nullable DBPDataSourceContainer dataSourceContainer) { if (editorInput instanceof INonPersistentEditorInput) { ((INonPersistentEditorInput) editorInput).setProperty(PROP_SQL_DATA_SOURCE_CONTAINER, dataSourceContainer); @@ -219,19 +209,19 @@ public class EditorUtils { } IFile file = getFileFromInput(editorInput); if (file != null) { - setFileDataSource(file, dataSourceContainer, notify); + setFileDataSource(file, dataSourceContainer); } else { File localFile = getLocalFileFromInput(editorInput); if (localFile != null) { - setFileDataSource(dataSourceContainer, localFile); + setFileDataSource(localFile, dataSourceContainer); } else { log.error("Can't set datasource for input " + editorInput); } } } - private static void setFileDataSource(@Nullable DBPDataSourceContainer dataSourceContainer, File localFile) { - final DBPExternalFileManager efManager = DBeaverCore.getInstance().getExternalFileManager(); + private static void setFileDataSource(File localFile, @Nullable DBPDataSourceContainer dataSourceContainer) { + final DBPExternalFileManager efManager = DBWorkbench.getPlatform().getExternalFileManager(); efManager.setFileProperty( localFile, PROP_SQL_PROJECT_ID, @@ -243,18 +233,10 @@ public class EditorUtils { } public static void setFileDataSource(@NotNull IFile file, @Nullable DBPDataSourceContainer dataSourceContainer) - { - setFileDataSource(file, dataSourceContainer, false); - } - - public static void setFileDataSource(@NotNull IFile file, @Nullable DBPDataSourceContainer dataSourceContainer, boolean notify) { try { file.setPersistentProperty(QN_DATA_SOURCE_ID, dataSourceContainer == null ? null : dataSourceContainer.getId()); file.setPersistentProperty(QN_PROJECT_ID, dataSourceContainer == null ? null : dataSourceContainer.getRegistry().getProject().getName()); - if (notify) { - NavigatorUtils.refreshNavigatorResource(file, dataSourceContainer); - } } catch (CoreException e) { log.error("Internal error while writing file property", e); } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/NodeEditorInputFactory.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/NodeEditorInputFactory.java index 0ef1ddaed27e120d8de0a3057a772c021f3bcff1..b73ebaf36ce72c6192bf4b54bb797b0dbcd196d1 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/NodeEditorInputFactory.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/NodeEditorInputFactory.java @@ -21,10 +21,10 @@ import org.eclipse.ui.IElementFactory; import org.eclipse.ui.IMemento; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.Log; -import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.model.navigator.DBNModel; import org.jkiss.dbeaver.model.navigator.DBNNode; import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor; +import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.dbeaver.ui.editors.entity.NodeEditorInput; public class NodeEditorInputFactory implements IElementFactory @@ -48,7 +48,7 @@ public class NodeEditorInputFactory implements IElementFactory if (nodePath == null) { return null; } - final DBNModel navigatorModel = DBeaverCore.getInstance().getNavigatorModel(); + final DBNModel navigatorModel = DBWorkbench.getPlatform().getNavigatorModel(); try { final DBNNode node = navigatorModel.getNodeByPath(new VoidProgressMonitor(), nodePath); diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditor.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditor.java index ab9b8199a26a7a1a510423688921a2f138cd4f1c..af2d066d1605fb6c395cb72dab6059f5045d5d1f 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditor.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditor.java @@ -107,6 +107,7 @@ import org.jkiss.dbeaver.ui.editors.sql.registry.SQLPresentationDescriptor; import org.jkiss.dbeaver.ui.editors.sql.registry.SQLPresentationPanelDescriptor; import org.jkiss.dbeaver.ui.editors.sql.registry.SQLPresentationRegistry; import org.jkiss.dbeaver.ui.editors.text.ScriptPositionColumn; +import org.jkiss.dbeaver.ui.navigator.NavigatorUtils; import org.jkiss.dbeaver.ui.views.SQLResultsView; import org.jkiss.dbeaver.ui.views.plan.ExplainPlanViewer; import org.jkiss.dbeaver.utils.GeneralUtils; @@ -300,7 +301,11 @@ public class SQLEditor extends SQLEditorBase implements } IEditorInput input = getEditorInput(); if (input != null) { - EditorUtils.setInputDataSource(input, container, true); + EditorUtils.setInputDataSource(input, container); + IFile file = EditorUtils.getFileFromInput(input); + if (file != null) { + NavigatorUtils.refreshNavigatorResource(file, container); + } } checkConnected(false, status -> UIUtils.asyncExec(() -> { @@ -317,7 +322,7 @@ public class SQLEditor extends SQLEditorBase implements dataSourceContainer.acquire(this); } - if (EditorUtils.isWriteEmbeddedBinding()) { + if (SQLEditorBase.isWriteEmbeddedBinding()) { // Patch connection reference UIUtils.syncExec(this::embedDataSourceAssociation); } @@ -327,7 +332,7 @@ public class SQLEditor extends SQLEditorBase implements private void updateDataSourceContainer() { DBPDataSourceContainer inputDataSource = null; - if (EditorUtils.isReadEmbeddedBinding()) { + if (SQLEditorBase.isReadEmbeddedBinding()) { // Try to get datasource from contents (always, no matter what ) inputDataSource = getDataSourceFromContent(); } @@ -2008,7 +2013,7 @@ public class SQLEditor extends SQLEditorBase implements IFileStore fileStore = EFS.getStore(saveFile.toURI()); IEditorInput input = new FileStoreEditorInput(fileStore); - EditorUtils.setInputDataSource(input, getDataSourceContainer(), false); + EditorUtils.setInputDataSource(input, getDataSourceContainer()); init(getEditorSite(), input); } catch (CoreException e) { diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorBase.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorBase.java index a2784c7783f6aef385d5fb774e21b2f7cd7a199c..e249e6368f6e67b94f33f00879e3a687753ba0ac 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorBase.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorBase.java @@ -49,6 +49,7 @@ import org.jkiss.dbeaver.ModelPreferences; import org.jkiss.dbeaver.core.CoreCommands; import org.jkiss.dbeaver.core.CoreMessages; import org.jkiss.dbeaver.core.DBeaverActivator; +import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.model.*; import org.jkiss.dbeaver.model.exec.DBCExecutionContext; import org.jkiss.dbeaver.model.impl.sql.BasicSQLDialect; @@ -168,6 +169,14 @@ public abstract class SQLEditorBase extends BaseTextEditor implements IErrorVisu return false; } + static boolean isReadEmbeddedBinding() { + return DBWorkbench.getPlatform().getPreferenceStore().getBoolean(SQLPreferenceConstants.SCRIPT_BIND_EMBEDDED_READ); + } + + static boolean isWriteEmbeddedBinding() { + return DBWorkbench.getPlatform().getPreferenceStore().getBoolean(SQLPreferenceConstants.SCRIPT_BIND_EMBEDDED_WRITE); + } + protected void handleInputChange(IEditorInput input) { if (isBigScript(input)) { uninstallOccurrencesFinder(); diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/handlers/OpenHandler.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/handlers/OpenHandler.java index 4c52ac0d0a533198dbe3462a7e45db69ea226de2..0e05c223a76489a3adbb95c6c3af207b05f4b785 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/handlers/OpenHandler.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/sql/handlers/OpenHandler.java @@ -270,7 +270,7 @@ public class OpenHandler extends AbstractDataSourceHandler { } public static SQLEditor openSQLConsole(IWorkbenchWindow workbenchWindow, DBPDataSourceContainer dataSourceContainer, IEditorInput sqlInput) { - EditorUtils.setInputDataSource(sqlInput, dataSourceContainer, false); + EditorUtils.setInputDataSource(sqlInput, dataSourceContainer); return openSQLEditor(workbenchWindow, sqlInput); } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/navigator/actions/NavigatorHandlerAssociateScript.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/navigator/actions/NavigatorHandlerAssociateScript.java index b9e9af3943a48dc3d631e0450a6177e761f9677a..62da8684fc486ff4d9a20c4fe00e29d7516ae6d8 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/navigator/actions/NavigatorHandlerAssociateScript.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/navigator/actions/NavigatorHandlerAssociateScript.java @@ -30,6 +30,7 @@ import org.jkiss.dbeaver.model.navigator.DBNNode; import org.jkiss.dbeaver.model.navigator.DBNResource; import org.jkiss.dbeaver.ui.dialogs.connection.SelectDataSourceDialog; import org.jkiss.dbeaver.ui.editors.EditorUtils; +import org.jkiss.dbeaver.ui.navigator.NavigatorUtils; import org.jkiss.dbeaver.utils.RuntimeUtils; import java.util.ArrayList; @@ -61,7 +62,8 @@ public class NavigatorHandlerAssociateScript extends NavigatorHandlerObjectBase } DBPDataSourceContainer dataSource = dialog.getDataSource(); for (IFile script : scripts) { - EditorUtils.setFileDataSource(script, dataSource, true); + EditorUtils.setFileDataSource(script, dataSource); + NavigatorUtils.refreshNavigatorResource(script, dataSource); } } return null; diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/perspective/DataSourceManagementToolbar.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/perspective/DataSourceManagementToolbar.java index 4d06fe1fed3b66b3860b1053976dd3dc08bde632..b0e5a6635dbbf54f6d9bdbc1d1ec0b514b30a4d5 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/perspective/DataSourceManagementToolbar.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/perspective/DataSourceManagementToolbar.java @@ -699,7 +699,7 @@ public class DataSourceManagementToolbar implements DBPRegistryListener, DBPEven // Register as datasource listener in all datasources // We need it because at this moment there could be come already loaded registries (on startup) DataSourceProviderRegistry.getInstance().addDataSourceRegistryListener(DataSourceManagementToolbar.this); - for (DataSourceRegistry registry : DataSourceRegistry.getAllRegistries()) { + for (DBPDataSourceRegistry registry : DBUtils.getAllRegistries()) { handleRegistryLoad(registry); } diff --git a/plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/core/DatabaseLaunchDelegate.java b/plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/core/DatabaseLaunchDelegate.java index 149f64c9507a8c066ea67c74a72d145a992988ba..a18edfebe8ff7d0cb39936b6862a3d7a30c91411 100644 --- a/plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/core/DatabaseLaunchDelegate.java +++ b/plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/core/DatabaseLaunchDelegate.java @@ -31,7 +31,7 @@ import org.jkiss.dbeaver.debug.DBGException; import org.jkiss.dbeaver.debug.core.model.DatabaseDebugTarget; import org.jkiss.dbeaver.debug.core.model.DatabaseProcess; import org.jkiss.dbeaver.model.DBPDataSourceContainer; -import org.jkiss.dbeaver.registry.DataSourceRegistry; +import org.jkiss.dbeaver.model.DBUtils; import org.jkiss.dbeaver.utils.GeneralUtils; import java.util.Map; @@ -42,7 +42,7 @@ public class DatabaseLaunchDelegate extends LaunchConfigurationDelegate { public void launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) throws CoreException { String datasourceId = configuration.getAttribute(DBGConstants.ATTR_DATASOURCE_ID, (String)null); - DBPDataSourceContainer datasourceDescriptor = DataSourceRegistry.findDataSource(datasourceId); + DBPDataSourceContainer datasourceDescriptor = DBUtils.findDataSource(datasourceId); if (datasourceDescriptor == null) { String message = NLS.bind("Unable to find data source with id {0}", datasourceId); throw new CoreException(DebugUtils.newErrorStatus(message)); diff --git a/plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/sourcelookup/DBGSourcePathComputer.java b/plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/sourcelookup/DBGSourcePathComputer.java index 74c6fb6e7d9b867e5f03573bfc576e067f9250ee..cca8ba6651c9cb565b09b720c41ab92b6818c344 100644 --- a/plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/sourcelookup/DBGSourcePathComputer.java +++ b/plugins/org.jkiss.dbeaver.debug.core/src/org/jkiss/dbeaver/debug/sourcelookup/DBGSourcePathComputer.java @@ -26,7 +26,7 @@ import org.eclipse.debug.core.sourcelookup.ISourcePathComputerDelegate; import org.jkiss.dbeaver.debug.DBGConstants; import org.jkiss.dbeaver.debug.core.DebugUtils; import org.jkiss.dbeaver.model.DBPDataSourceContainer; -import org.jkiss.dbeaver.registry.DataSourceRegistry; +import org.jkiss.dbeaver.model.DBUtils; public class DBGSourcePathComputer implements ISourcePathComputerDelegate { @@ -34,7 +34,7 @@ public class DBGSourcePathComputer implements ISourcePathComputerDelegate { public ISourceContainer[] computeSourceContainers(ILaunchConfiguration configuration, IProgressMonitor monitor) throws CoreException { String datasourceId = configuration.getAttribute(DBGConstants.ATTR_DATASOURCE_ID, ""); - DBPDataSourceContainer dataSource = DataSourceRegistry.findDataSource(datasourceId); + DBPDataSourceContainer dataSource = DBUtils.findDataSource(datasourceId); if (dataSource == null) { throw new CoreException(DebugUtils.newErrorStatus("Can't find datasource " + datasourceId)); } diff --git a/plugins/org.jkiss.dbeaver.debug.ui/src/org/jkiss/dbeaver/debug/ui/DatabaseDebugConfigurationTab.java b/plugins/org.jkiss.dbeaver.debug.ui/src/org/jkiss/dbeaver/debug/ui/DatabaseDebugConfigurationTab.java index 1002570052e392a8161a11bc7df855ca929e845c..1490a23d167be4b6226802370431b41efeaee78d 100644 --- a/plugins/org.jkiss.dbeaver.debug.ui/src/org/jkiss/dbeaver/debug/ui/DatabaseDebugConfigurationTab.java +++ b/plugins/org.jkiss.dbeaver.debug.ui/src/org/jkiss/dbeaver/debug/ui/DatabaseDebugConfigurationTab.java @@ -39,6 +39,7 @@ import org.jkiss.dbeaver.debug.ui.internal.DebugConfigurationPanelRegistry; import org.jkiss.dbeaver.debug.ui.internal.DebugUIMessages; import org.jkiss.dbeaver.model.DBIcon; import org.jkiss.dbeaver.model.DBPDataSourceContainer; +import org.jkiss.dbeaver.model.DBUtils; import org.jkiss.dbeaver.model.runtime.DBRRunnableContext; import org.jkiss.dbeaver.registry.DataSourceRegistry; import org.jkiss.dbeaver.runtime.RunnableContextDelegate; @@ -204,7 +205,7 @@ public class DatabaseDebugConfigurationTab extends AbstractLaunchConfigurationTa this.currentConfiguration = configuration; try { String dsId = configuration.getAttribute(DBGConstants.ATTR_DATASOURCE_ID, (String) null); - DBPDataSourceContainer dataSource = DataSourceRegistry.findDataSource(dsId); + DBPDataSourceContainer dataSource = DBUtils.findDataSource(dsId); connectionCombo.select(dataSource); if (dataSource != null) { driverText.setText(dataSource.getDriver().getFullName()); diff --git a/plugins/org.jkiss.dbeaver.ext.sample.database/src/org/jkiss/dbeaver/ext/sample/database/WorkbenchInitializerCreateSampleDatabase.java b/plugins/org.jkiss.dbeaver.ext.sample.database/src/org/jkiss/dbeaver/ext/sample/database/WorkbenchInitializerCreateSampleDatabase.java index 33040f2757ece4178b967c22a18a57d2cbbf9491..f753193f7014016dbd3029246a9a458b00f322b5 100644 --- a/plugins/org.jkiss.dbeaver.ext.sample.database/src/org/jkiss/dbeaver/ext/sample/database/WorkbenchInitializerCreateSampleDatabase.java +++ b/plugins/org.jkiss.dbeaver.ext.sample.database/src/org/jkiss/dbeaver/ext/sample/database/WorkbenchInitializerCreateSampleDatabase.java @@ -20,6 +20,7 @@ import org.eclipse.core.resources.IProject; import org.eclipse.ui.IWorkbenchWindow; import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.core.DBeaverCore; +import org.jkiss.dbeaver.model.DBUtils; import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration; import org.jkiss.dbeaver.model.connection.DBPConnectionType; import org.jkiss.dbeaver.registry.DataSourceDescriptor; @@ -60,7 +61,7 @@ public class WorkbenchInitializerCreateSampleDatabase implements IWorkbenchWindo // No active project return; } - if (DataSourceRegistry.findDataSource(SAMPLE_DB1_ID) != null) { + if (DBUtils.findDataSource(SAMPLE_DB1_ID) != null) { // Already exist return; } diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBUtils.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBUtils.java index 20a3224936839f4e0fca79991178eabf391a3fce..00389fecde56e0e8e85a0022aed761c219adf3e6 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBUtils.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBUtils.java @@ -24,6 +24,7 @@ import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.ModelPreferences; import org.jkiss.dbeaver.model.app.DBPDataSourceRegistry; +import org.jkiss.dbeaver.model.app.DBPProjectManager; import org.jkiss.dbeaver.model.data.*; import org.jkiss.dbeaver.model.exec.*; import org.jkiss.dbeaver.model.impl.data.DBDValueError; @@ -35,6 +36,7 @@ import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor; import org.jkiss.dbeaver.model.sql.*; import org.jkiss.dbeaver.model.struct.*; import org.jkiss.dbeaver.model.struct.rdb.*; +import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.dbeaver.runtime.jobs.InvalidateJob; import org.jkiss.dbeaver.runtime.ui.DBUserInterface; import org.jkiss.dbeaver.utils.GeneralUtils; @@ -1667,4 +1669,34 @@ public final class DBUtils { } return null; } + + public static List getAllRegistries() { + List result = new ArrayList<>(); + for (IProject project : DBWorkbench.getPlatform().getLiveProjects()) { + if (project.isOpen()) { + DBPDataSourceRegistry registry = DBWorkbench.getPlatform().getProjectManager().getDataSourceRegistry(project); + if (registry != null) { + result.add(registry); + } + } + } + return result; + } + + /** + * Find data source in all available registries + */ + public static DBPDataSourceContainer findDataSource(String dataSourceId) { + DBPProjectManager projectRegistry = DBWorkbench.getPlatform().getProjectManager(); + for (IProject project : DBWorkbench.getPlatform().getLiveProjects()) { + DBPDataSourceRegistry dataSourceRegistry = projectRegistry.getDataSourceRegistry(project); + if (dataSourceRegistry != null) { + DBPDataSourceContainer dataSourceContainer = dataSourceRegistry.getDataSource(dataSourceId); + if (dataSourceContainer != null) { + return dataSourceContainer; + } + } + } + return null; + } } diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/app/DBPPlatform.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/app/DBPPlatform.java index 9e02bab083cb53fcafc8de1698d4e1914345edda..5367d20941f5aaee246e85313a3b8c518cc2a6c4 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/app/DBPPlatform.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/app/DBPPlatform.java @@ -20,6 +20,7 @@ package org.jkiss.dbeaver.model.app; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspace; import org.jkiss.code.NotNull; +import org.jkiss.dbeaver.model.DBPExternalFileManager; import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore; import org.jkiss.dbeaver.model.data.DBDRegistry; import org.jkiss.dbeaver.model.edit.DBERegistry; @@ -83,6 +84,9 @@ public interface DBPPlatform @NotNull DBASecureStorage getSecureStorage(); + @NotNull + DBPExternalFileManager getExternalFileManager(); + @NotNull File getTempFolder(DBRProgressMonitor monitor, String name) throws IOException;