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 59a23a4c460bbf34b1a9751c70e447f13c7012a6..960f1f7cd866a92da3447d178dcab27ae000de09 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 @@ -25,6 +25,7 @@ import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.model.DBPApplication; import org.jkiss.dbeaver.model.DBPPreferenceStore; import org.jkiss.dbeaver.model.DBPProjectManager; +import org.jkiss.dbeaver.model.qm.QMUtils; import org.jkiss.dbeaver.registry.PluginServiceRegistry; import org.jkiss.dbeaver.runtime.IPluginService; import org.jkiss.dbeaver.runtime.net.GlobalProxyAuthenticator; @@ -161,7 +162,9 @@ public class DBeaverCore implements DBPApplication { this.localSystem = new OSDescriptor(Platform.getOS(), Platform.getOSArch()); + QMUtils.initApplication(this); this.queryManager = new QMControllerImpl(); + this.qmLogWriter = new QMLogFileWriter(); this.queryManager.registerMetaListener(qmLogWriter); @@ -333,6 +336,11 @@ public class DBeaverCore implements DBPApplication { return queryManager; } + @Override + public DBPPreferenceStore getPreferenceStore() { + return getGlobalPreferenceStore(); + } + public ProjectRegistry getProjectRegistry() { return projectRegistry; diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/DBPApplication.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/DBPApplication.java index 58984a06aec2bad23408e3497518bce83f7624f8..dc7aeba96a76801d08261da6cf3dacca5069364c 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/DBPApplication.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/DBPApplication.java @@ -22,6 +22,7 @@ import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspace; import org.jkiss.code.NotNull; import org.jkiss.dbeaver.model.navigator.DBNModel; +import org.jkiss.dbeaver.model.qm.QMController; import java.util.Collection; @@ -35,7 +36,14 @@ public interface DBPApplication IWorkspace getWorkspace(); + @NotNull DBPProjectManager getProjectManager(); + @NotNull Collection getLiveProjects(); + @NotNull + QMController getQueryManager(); + + @NotNull + DBPPreferenceStore getPreferenceStore(); } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/DBPProjectManager.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/DBPProjectManager.java index 909e9e44bab1440bfad04f7837ba0a84809b6718..ee4176025b0b9192eac346fecc947bb11823cc7c 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/DBPProjectManager.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/DBPProjectManager.java @@ -28,6 +28,8 @@ import org.jkiss.dbeaver.model.project.DBPResourceHandler; */ public interface DBPProjectManager { + DBPApplication geApplication(); + DBPResourceHandler getResourceHandler(IResource resource); IProject getActiveProject(); diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/impl/jdbc/data/JDBCContentBLOB.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/impl/jdbc/data/JDBCContentBLOB.java index 9594036b8976eeb51760e682f5fc15af65d2fb21..ecea9f17ba9f9f6756f7d31de6b248718daff4a2 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/impl/jdbc/data/JDBCContentBLOB.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/impl/jdbc/data/JDBCContentBLOB.java @@ -17,9 +17,9 @@ */ package org.jkiss.dbeaver.model.impl.jdbc.data; -import org.jkiss.dbeaver.core.Log; import org.eclipse.core.resources.IFile; -import org.jkiss.dbeaver.core.DBeaverCore; +import org.jkiss.dbeaver.DBeaverPreferences; +import org.jkiss.dbeaver.core.Log; import org.jkiss.dbeaver.model.DBPDataSource; import org.jkiss.dbeaver.model.data.DBDContentStorage; import org.jkiss.dbeaver.model.data.DBDDisplayFormat; @@ -30,7 +30,6 @@ import org.jkiss.dbeaver.model.impl.BytesContentStorage; import org.jkiss.dbeaver.model.impl.TemporaryContentStorage; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.struct.DBSTypedObject; -import org.jkiss.dbeaver.DBeaverPreferences; import org.jkiss.dbeaver.utils.ContentUtils; import org.jkiss.dbeaver.utils.MimeTypes; @@ -80,12 +79,12 @@ public class JDBCContentBLOB extends JDBCContentLOB { { if (storage == null && blob != null) { long contentLength = getContentLength(); - if (contentLength < DBeaverCore.getGlobalPreferenceStore().getInt(DBeaverPreferences.MEMORY_CONTENT_MAX_SIZE)) { + if (contentLength < dataSource.getContainer().getApplication().getPreferenceStore().getInt(DBeaverPreferences.MEMORY_CONTENT_MAX_SIZE)) { try { storage = BytesContentStorage.createFromStream( blob.getBinaryStream(), contentLength, - DBeaverCore.getGlobalPreferenceStore().getString(DBeaverPreferences.CONTENT_HEX_ENCODING)); + dataSource.getContainer().getApplication().getPreferenceStore().getString(DBeaverPreferences.CONTENT_HEX_ENCODING)); } catch (SQLException e) { throw new DBCException(e, dataSource); diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/impl/jdbc/data/JDBCContentCLOB.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/impl/jdbc/data/JDBCContentCLOB.java index e1fc687e048de42bbbed4ec5454c726f232d7764..6b6bab4e6e6d87ed6c1eeeb5b5b9d1ee3af13155 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/impl/jdbc/data/JDBCContentCLOB.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/impl/jdbc/data/JDBCContentCLOB.java @@ -17,10 +17,9 @@ */ package org.jkiss.dbeaver.model.impl.jdbc.data; -import org.jkiss.dbeaver.core.Log; import org.eclipse.core.resources.IFile; import org.jkiss.dbeaver.DBeaverPreferences; -import org.jkiss.dbeaver.core.DBeaverCore; +import org.jkiss.dbeaver.core.Log; import org.jkiss.dbeaver.model.DBPDataSource; import org.jkiss.dbeaver.model.data.DBDContent; import org.jkiss.dbeaver.model.data.DBDContentStorage; @@ -82,7 +81,7 @@ public class JDBCContentCLOB extends JDBCContentLOB implements DBDContent { { if (storage == null && clob != null) { long contentLength = getContentLength(); - if (contentLength < DBeaverCore.getGlobalPreferenceStore().getInt(DBeaverPreferences.MEMORY_CONTENT_MAX_SIZE)) { + if (contentLength < dataSource.getContainer().getApplication().getPreferenceStore().getInt(DBeaverPreferences.MEMORY_CONTENT_MAX_SIZE)) { try { storage = StringContentStorage.createFromReader(clob.getCharacterStream(), contentLength); } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/impl/net/HTTPTunnelImpl.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/impl/net/HTTPTunnelImpl.java index dfba42c0d2aa7bcb2801fbfb8c2c9372fddae068..7094f89b07a4f756226675a3e54dca0e1d737f9d 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/impl/net/HTTPTunnelImpl.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/impl/net/HTTPTunnelImpl.java @@ -18,6 +18,7 @@ package org.jkiss.dbeaver.model.impl.net; import org.jkiss.dbeaver.DBException; +import org.jkiss.dbeaver.model.DBPApplication; import org.jkiss.dbeaver.model.DBPConnectionConfiguration; import org.jkiss.dbeaver.model.net.DBWHandlerConfiguration; import org.jkiss.dbeaver.model.net.DBWTunnel; @@ -31,7 +32,7 @@ import java.io.IOException; public class HTTPTunnelImpl implements DBWTunnel { @Override - public DBPConnectionConfiguration initializeTunnel(DBRProgressMonitor monitor, DBWHandlerConfiguration configuration, DBPConnectionConfiguration connectionInfo) + public DBPConnectionConfiguration initializeTunnel(DBRProgressMonitor monitor, DBPApplication application, DBWHandlerConfiguration configuration, DBPConnectionConfiguration connectionInfo) throws DBException, IOException { return connectionInfo; diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/impl/net/SSHTunnelImpl.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/impl/net/SSHTunnelImpl.java index 25981b1bb4202bf40f7e3f251f3088414c586476..411c5714342767ff7ad4faa57a3fe7c5c1a37918 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/impl/net/SSHTunnelImpl.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/impl/net/SSHTunnelImpl.java @@ -20,8 +20,8 @@ package org.jkiss.dbeaver.model.impl.net; import com.jcraft.jsch.*; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.DBeaverPreferences; -import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.core.Log; +import org.jkiss.dbeaver.model.DBPApplication; import org.jkiss.dbeaver.model.DBPConnectionConfiguration; import org.jkiss.dbeaver.model.DBPPreferenceStore; import org.jkiss.dbeaver.model.net.DBWHandlerConfiguration; @@ -48,7 +48,7 @@ public class SSHTunnelImpl implements DBWTunnel { private transient Session session; @Override - public DBPConnectionConfiguration initializeTunnel(DBRProgressMonitor monitor, DBWHandlerConfiguration configuration, DBPConnectionConfiguration connectionInfo) + public DBPConnectionConfiguration initializeTunnel(DBRProgressMonitor monitor, DBPApplication application, DBWHandlerConfiguration configuration, DBPConnectionConfiguration connectionInfo) throws DBException, IOException { String dbPortString = connectionInfo.getHostPort(); @@ -107,7 +107,7 @@ public class SSHTunnelImpl implements DBWTunnel { } catch (NumberFormatException e) { throw new DBException("Bad database port number: " + dbPortString); } - int localPort = findFreePort(); + int localPort = findFreePort(application); try { if (jsch == null) { jsch = new JSch(); @@ -155,9 +155,9 @@ public class SSHTunnelImpl implements DBWTunnel { return connectionInfo; } - private int findFreePort() + private int findFreePort(DBPApplication application) { - DBPPreferenceStore store = DBeaverCore.getGlobalPreferenceStore(); + DBPPreferenceStore store = application.getPreferenceStore(); int minPort = store.getInt(DBeaverPreferences.NET_TUNNEL_PORT_MIN); int maxPort = store.getInt(DBeaverPreferences.NET_TUNNEL_PORT_MAX); int portRange = Math.abs(maxPort - minPort); diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/net/DBWTunnel.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/net/DBWTunnel.java index baa7b143e324264be011b2a7a6b9897229330ee4..5073ffd5446c1e9e20d0c916382cd4260af4fd43 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/net/DBWTunnel.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/net/DBWTunnel.java @@ -18,6 +18,7 @@ package org.jkiss.dbeaver.model.net; import org.jkiss.dbeaver.DBException; +import org.jkiss.dbeaver.model.DBPApplication; import org.jkiss.dbeaver.model.DBPConnectionConfiguration; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; @@ -28,7 +29,7 @@ import java.io.IOException; */ public interface DBWTunnel extends DBWNetworkHandler { - DBPConnectionConfiguration initializeTunnel(DBRProgressMonitor monitor, DBWHandlerConfiguration configuration, DBPConnectionConfiguration connectionInfo) + DBPConnectionConfiguration initializeTunnel(DBRProgressMonitor monitor, DBPApplication application, DBWHandlerConfiguration configuration, DBPConnectionConfiguration connectionInfo) throws DBException, IOException; void closeTunnel(DBRProgressMonitor monitor, DBPConnectionConfiguration connectionInfo) diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/qm/QMUtils.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/qm/QMUtils.java index 1cab526bf1a203ebc21fa18de780676b24cdf21a..3f3867f64c06c7f178f25ea780183598b3805fb1 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/qm/QMUtils.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/qm/QMUtils.java @@ -18,7 +18,7 @@ package org.jkiss.dbeaver.model.qm; -import org.jkiss.dbeaver.core.DBeaverCore; +import org.jkiss.dbeaver.model.DBPApplication; import java.util.List; @@ -27,38 +27,43 @@ import java.util.List; */ public class QMUtils { + private static DBPApplication application; private static QMExecutionHandler defaultHandler; - + + public static void initApplication(DBPApplication application) { + QMUtils.application = application; + } + public static QMExecutionHandler getDefaultHandler() { if (defaultHandler == null) { - defaultHandler = DBeaverCore.getInstance().getQueryManager().getDefaultHandler(); + defaultHandler = application.getQueryManager().getDefaultHandler(); } return defaultHandler; } public static void registerHandler(QMExecutionHandler handler) { - DBeaverCore.getInstance().getQueryManager().registerHandler(handler); + application.getQueryManager().registerHandler(handler); } public static void unregisterHandler(QMExecutionHandler handler) { - DBeaverCore.getInstance().getQueryManager().unregisterHandler(handler); + application.getQueryManager().unregisterHandler(handler); } public static void registerMetaListener(QMMetaListener metaListener) { - DBeaverCore.getInstance().getQueryManager().registerMetaListener(metaListener); + application.getQueryManager().registerMetaListener(metaListener); } public static void unregisterMetaListener(QMMetaListener metaListener) { - DBeaverCore.getInstance().getQueryManager().unregisterMetaListener(metaListener); + application.getQueryManager().unregisterMetaListener(metaListener); } public static List getPastMetaEvents() { - return DBeaverCore.getInstance().getQueryManager().getPastMetaEvents(); + return application.getQueryManager().getPastMetaEvents(); } } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/struct/DBSDataSourceContainer.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/struct/DBSDataSourceContainer.java index 1eef5cfaa46bb491801f63a3df341068a980f61a..4a7e6c8656a1f02ae160ae9bd6040fb2f42f6444 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/struct/DBSDataSourceContainer.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/struct/DBSDataSourceContainer.java @@ -48,6 +48,9 @@ public interface DBSDataSourceContainer extends DBSObject, DBDPreferences, DBPNa @NotNull DBPDriver getDriver(); + @NotNull + DBPApplication getApplication(); + /** * Connection configuration. * @return connection details diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/DataSourceDescriptor.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/DataSourceDescriptor.java index 11ec4d57cbd5f58745a4bd2c0f4766f73b94cc7f..ab308d44aa1e3ab00c3f8f54829643d93adf24ba 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/DataSourceDescriptor.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/DataSourceDescriptor.java @@ -202,6 +202,11 @@ public class DataSourceDescriptor return driver; } + @Override + public DBPApplication getApplication() { + return registry.getApplication(); + } + public void setDriver(@NotNull DriverDescriptor driver) { if (driver == this.driver) { @@ -591,7 +596,7 @@ public class DataSourceDescriptor monitor.subTask("Initialize tunnel"); tunnel = tunnelConfiguration.createHandler(DBWTunnel.class); try { - tunnelConnectionInfo = tunnel.initializeTunnel(monitor, tunnelConfiguration, connectionInfo); + tunnelConnectionInfo = tunnel.initializeTunnel(monitor, registry.getApplication(), tunnelConfiguration, connectionInfo); } catch (Exception e) { throw new DBCException("Can't initialize tunnel", e); } 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 f6da7ab6052a180130308211c6e0fdd628e1c1bf..e98325ab22f847f860c7b92fb3e6740a22f222be 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 @@ -66,13 +66,15 @@ public class DataSourceRegistry implements DBPDataSourceRegistry public static final String CONFIG_FILE_NAME = ".dbeaver-data-sources.xml"; //$NON-NLS-1$ public static final String OLD_CONFIG_FILE_NAME = "data-sources.xml"; //$NON-NLS-1$ + private final DBPApplication application; private final IProject project; private final List dataSources = new ArrayList(); private final List dataSourceListeners = new ArrayList(); - public DataSourceRegistry(IProject project) + public DataSourceRegistry(DBPApplication application, IProject project) { + this.application = application; this.project = project; IFile configFile = project.getFile(CONFIG_FILE_NAME); if (!configFile.exists()) { @@ -133,6 +135,10 @@ public class DataSourceRegistry implements DBPDataSourceRegistry } } + public DBPApplication getApplication() { + return application; + } + //////////////////////////////////////////////////// // Data sources diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/ProjectRegistry.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/ProjectRegistry.java index d9a322816bbcf08ae1c5c97bb9468274b38d4c98..811953856cf9f0f8b9c98927c02e7dc75261eb91 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/ProjectRegistry.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/ProjectRegistry.java @@ -23,6 +23,7 @@ import org.eclipse.core.runtime.*; import org.eclipse.swt.widgets.Display; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.core.DBeaverCore; +import org.jkiss.dbeaver.model.DBPApplication; import org.jkiss.dbeaver.model.DBPProjectManager; import org.jkiss.dbeaver.ui.resources.DefaultResourceHandlerImpl; import org.jkiss.dbeaver.model.project.DBPProjectListener; @@ -170,6 +171,11 @@ public class ProjectRegistry implements DBPProjectManager { } } + @Override + public DBPApplication geApplication() { + return DBeaverCore.getInstance(); + } + @Override public DBPResourceHandler getResourceHandler(IResource resource) { @@ -335,7 +341,7 @@ public class ProjectRegistry implements DBPProjectManager { log.warn("Project [" + project + "] already added"); return; } - projectDatabases.put(project, new DataSourceRegistry(project)); + projectDatabases.put(project, new DataSourceRegistry(DBeaverCore.getInstance(), project)); } @Override