From aa0957f6a9846f10f912ede9358fda1b3bd5c65e Mon Sep 17 00:00:00 2001 From: jurgen Date: Wed, 1 Jul 2015 09:47:15 +0000 Subject: [PATCH] Model refactoring --- .../org/jkiss/dbeaver/core/DBeaverCore.java | 8 +++++++ .../jkiss/dbeaver/model/DBPApplication.java | 8 +++++++ .../dbeaver/model/DBPProjectManager.java | 2 ++ .../model/impl/jdbc/data/JDBCContentBLOB.java | 9 ++++---- .../model/impl/jdbc/data/JDBCContentCLOB.java | 5 ++--- .../model/impl/net/HTTPTunnelImpl.java | 3 ++- .../dbeaver/model/impl/net/SSHTunnelImpl.java | 10 ++++----- .../jkiss/dbeaver/model/net/DBWTunnel.java | 3 ++- .../org/jkiss/dbeaver/model/qm/QMUtils.java | 21 ++++++++++++------- .../model/struct/DBSDataSourceContainer.java | 3 +++ .../registry/DataSourceDescriptor.java | 7 ++++++- .../dbeaver/registry/DataSourceRegistry.java | 8 ++++++- .../dbeaver/registry/ProjectRegistry.java | 8 ++++++- 13 files changed, 69 insertions(+), 26 deletions(-) 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 59a23a4c46..960f1f7cd8 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 58984a06ae..dc7aeba96a 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 909e9e44ba..ee4176025b 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 9594036b89..ecea9f17ba 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 e1fc687e04..6b6bab4e6e 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 dfba42c0d2..7094f89b07 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 25981b1bb4..411c571434 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 baa7b143e3..5073ffd544 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 1cab526bf1..3f3867f64c 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 1eef5cfaa4..4a7e6c8656 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 11ec4d57cb..ab308d44aa 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 f6da7ab605..e98325ab22 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 d9a322816b..811953856c 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 -- GitLab