From 8be9b259438ebfa25333192f8ae648e1d1468840 Mon Sep 17 00:00:00 2001 From: jurgen Date: Wed, 1 Jul 2015 09:30:38 +0000 Subject: [PATCH] Model refactoring --- .../org/jkiss/dbeaver/core/DBeaverCore.java | 8 +++- .../jkiss/dbeaver/model/DBPApplication.java | 6 +++ .../dbeaver/model/DBPProjectManager.java | 41 +++++++++++++++++ .../model/navigator/DBNDataSource.java | 4 +- .../model/navigator/DBNDatabaseFolder.java | 4 +- .../model/navigator/DBNDatabaseItem.java | 10 ++--- .../model/navigator/DBNDatabaseNode.java | 22 +++++++-- .../model/navigator/DBNDatabaseObject.java | 4 +- .../dbeaver/model/navigator/DBNModel.java | 45 +++++++------------ .../dbeaver/model/navigator/DBNNode.java | 12 +++-- .../dbeaver/model/navigator/DBNProject.java | 13 +++--- .../model/navigator/DBNProjectDatabases.java | 16 +++---- .../dbeaver/model/navigator/DBNResource.java | 11 +++-- .../dbeaver/model/navigator/DBNRoot.java | 24 ++++++---- .../dbeaver/registry/ProjectRegistry.java | 9 +++- .../tools/scripts/ScriptsExportUtils.java | 7 ++- .../ui/editors/entity/EntityHyperlink.java | 4 +- .../dbeaver/ui/search/AbstractSearchPage.java | 6 +-- .../ui/search/data/SearchDataQuery.java | 3 +- .../database/DatabaseNavigatorTree.java | 2 +- 20 files changed, 157 insertions(+), 94 deletions(-) create mode 100644 plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/DBPProjectManager.java 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 b367b0b5ad..59a23a4c46 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 @@ -24,6 +24,7 @@ import org.jkiss.code.NotNull; 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.registry.PluginServiceRegistry; import org.jkiss.dbeaver.runtime.IPluginService; import org.jkiss.dbeaver.runtime.net.GlobalProxyAuthenticator; @@ -175,7 +176,7 @@ public class DBeaverCore implements DBPApplication { initializeProjects(); // Navigator model - this.navigatorModel = new DBNModel(); + this.navigatorModel = new DBNModel(this); this.navigatorModel.initialize(); // Activate plugin services @@ -297,6 +298,11 @@ public class DBeaverCore implements DBPApplication { return workspace; } + @Override + public DBPProjectManager getProjectManager() { + return getProjectRegistry(); + } + /** * Returns configuration file */ 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 1e1065ce6f..58984a06ae 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 @@ -18,10 +18,13 @@ package org.jkiss.dbeaver.model; +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 java.util.Collection; + /** * DBPApplication */ @@ -32,4 +35,7 @@ public interface DBPApplication IWorkspace getWorkspace(); + DBPProjectManager getProjectManager(); + Collection getLiveProjects(); + } 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 new file mode 100644 index 0000000000..909e9e44ba --- /dev/null +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/DBPProjectManager.java @@ -0,0 +1,41 @@ +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2010-2015 Serge Rieder (serge@jkiss.org) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License (version 2) + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +package org.jkiss.dbeaver.model; + +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.jkiss.dbeaver.model.project.DBPProjectListener; +import org.jkiss.dbeaver.model.project.DBPResourceHandler; + +/** + * ProjectManager + */ +public interface DBPProjectManager +{ + DBPResourceHandler getResourceHandler(IResource resource); + + IProject getActiveProject(); + void setActiveProject(IProject project); + void addProject(IProject project); + void removeProject(IProject project); + void addProjectListener(DBPProjectListener listener); + void removeProjectListener(DBPProjectListener listener); + + DBPDataSourceRegistry getDataSourceRegistry(IProject project); +} diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNDataSource.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNDataSource.java index 614cdbe2ce..0b2db32c99 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNDataSource.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNDataSource.java @@ -49,7 +49,7 @@ public class DBNDataSource extends DBNDatabaseNode implements IAdaptable super(parentNode); this.dataSource = dataSource; this.treeRoot = dataSource.getDriver().getNavigatorRoot(); - DBNModel.getInstance().addNode(this, false); + registerNode(); } @Override @@ -68,7 +68,7 @@ public class DBNDataSource extends DBNDatabaseNode implements IAdaptable @Override protected void dispose(boolean reflect) { - DBNModel.getInstance().removeNode(this, reflect); + unregisterNode(reflect); super.dispose(reflect); } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNDatabaseFolder.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNDatabaseFolder.java index 4df274fe70..04b95f7653 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNDatabaseFolder.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNDatabaseFolder.java @@ -45,13 +45,13 @@ public class DBNDatabaseFolder extends DBNDatabaseNode implements DBNContainer, { super(parent); this.meta = meta; - DBNModel.getInstance().addNode(this); + registerNode(); } @Override protected void dispose(boolean reflect) { - DBNModel.getInstance().removeNode(this, reflect); + unregisterNode(reflect); super.dispose(reflect); } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNDatabaseItem.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNDatabaseItem.java index 3896f2f4dd..270bb15c2e 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNDatabaseItem.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNDatabaseItem.java @@ -34,7 +34,7 @@ public class DBNDatabaseItem extends DBNDatabaseNode super(parent); this.meta = meta; this.object = object; - DBNModel.getInstance().addNode(this, reflect); + registerNode(); } @Override @@ -46,9 +46,7 @@ public class DBNDatabaseItem extends DBNDatabaseNode @Override protected void dispose(boolean reflect) { - // Notify model - // Reflect changes only if underlying object is not persisted - DBNModel.getInstance().removeNode(this, reflect); + unregisterNode(reflect); this.object = null; super.dispose(reflect); } @@ -61,9 +59,9 @@ public class DBNDatabaseItem extends DBNDatabaseNode @Override protected void reloadObject(DBRProgressMonitor monitor, DBSObject object) { - DBNModel.getInstance().removeNode(this, false); + unregisterNode(false); this.object = object; - DBNModel.getInstance().addNode(this, false); + registerNode(); } @Override diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNDatabaseNode.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNDatabaseNode.java index 004285b537..1626ec92bd 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNDatabaseNode.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNDatabaseNode.java @@ -52,6 +52,20 @@ public abstract class DBNDatabaseNode extends DBNNode implements DBSWrapper, DBP super(parentNode); } + protected void registerNode() { + DBNModel model = getModel(); + if (model != null) { + model.addNode(this); + } + } + + protected void unregisterNode(boolean reflect) { + DBNModel model = getModel(); + if (model != null) { + model.removeNode(this, reflect); + } + } + @Override void dispose(boolean reflect) { @@ -178,7 +192,7 @@ public abstract class DBNDatabaseNode extends DBNNode implements DBSWrapper, DBP synchronized (this) { childNodes.add(newChild); } - DBNModel.getInstance().fireNodeEvent(new DBNEvent(this, DBNEvent.Action.ADD, DBNEvent.NodeChange.LOAD, newChild)); + getModel().fireNodeEvent(new DBNEvent(this, DBNEvent.Action.ADD, DBNEvent.NodeChange.LOAD, newChild)); } else { log.error("Cannot add child item to " + getNodeName() + ". Conditions doesn't met"); //$NON-NLS-1$ //$NON-NLS-2$ } @@ -262,7 +276,7 @@ public abstract class DBNDatabaseNode extends DBNNode implements DBSWrapper, DBP return; } this.locked = true; - DBNModel model = DBNModel.getInstance(); + DBNModel model = getModel(); try { model.fireNodeUpdate(source, this, DBNEvent.NodeChange.LOCK); @@ -361,7 +375,7 @@ public abstract class DBNDatabaseNode extends DBNNode implements DBSWrapper, DBP monitor.done(); if (filtered) { - DBNModel.getInstance().fireNodeUpdate(this, this, DBNEvent.NodeChange.REFRESH); + getModel().fireNodeUpdate(this, this, DBNEvent.NodeChange.REFRESH); } } @@ -449,7 +463,7 @@ public abstract class DBNDatabaseNode extends DBNNode implements DBSWrapper, DBP // Refresh children recursive oldChild.reloadChildren(monitor); } - DBNModel.getInstance().fireNodeUpdate(this, oldChild, DBNEvent.NodeChange.REFRESH); + getModel().fireNodeUpdate(this, oldChild, DBNEvent.NodeChange.REFRESH); toList.add(oldChild); added = true; diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNDatabaseObject.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNDatabaseObject.java index bf64d6acdf..4156f80c00 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNDatabaseObject.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNDatabaseObject.java @@ -37,13 +37,13 @@ public class DBNDatabaseObject extends DBNDatabaseNode implements DBSObject { super(parent); this.meta = meta; - DBNModel.getInstance().addNode(this); + registerNode(); } @Override protected void dispose(boolean reflect) { - DBNModel.getInstance().removeNode(this, reflect); + unregisterNode(reflect); super.dispose(reflect); } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNModel.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNModel.java index 900251bf09..102cfe9eb9 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNModel.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNModel.java @@ -23,15 +23,14 @@ import org.eclipse.core.resources.IResourceChangeListener; import org.eclipse.core.resources.IResourceDelta; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.DBException; -import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.core.Log; import org.jkiss.dbeaver.model.DBIconComposite; +import org.jkiss.dbeaver.model.DBPApplication; import org.jkiss.dbeaver.model.DBPImage; +import org.jkiss.dbeaver.model.navigator.meta.DBXTreeFolder; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.struct.DBSObject; import org.jkiss.dbeaver.model.struct.DBSObjectState; -import org.jkiss.dbeaver.registry.ProjectRegistry; -import org.jkiss.dbeaver.model.navigator.meta.DBXTreeFolder; import org.jkiss.utils.CommonUtils; import java.util.ArrayList; @@ -51,18 +50,18 @@ import java.util.Map; public class DBNModel implements IResourceChangeListener { static final Log log = Log.getLog(DBNModel.class); + private final DBPApplication application; private DBNRoot root; private final List listeners = new ArrayList(); private transient INavigatorListener[] listenersCopy = null; private final Map nodeMap = new HashMap(); - public DBNModel() - { + public DBNModel(DBPApplication application) { + this.application = application; } - public static DBNModel getInstance() - { - return DBeaverCore.getInstance().getNavigatorModel(); + public DBPApplication getApplication() { + return application; } public void initialize() @@ -70,25 +69,19 @@ public class DBNModel implements IResourceChangeListener { if (this.root != null) { throw new IllegalStateException("Can't initialize navigator model more than once"); } - this.root = new DBNRoot(); + this.root = new DBNRoot(this); // Add all existing projects to root node - final DBeaverCore core = DBeaverCore.getInstance(); - for (IProject project : core.getLiveProjects()) { + for (IProject project : application.getLiveProjects()) { root.addProject(project, false); } -/* - for (DataSourceDescriptor dataSource : registry.getDataSources()) { - root.addProject(dataSource); - } -*/ - core.getWorkspace().addResourceChangeListener(this); + application.getWorkspace().addResourceChangeListener(this); } public void dispose() { - DBeaverCore.getInstance().getWorkspace().removeResourceChangeListener(this); + application.getWorkspace().removeResourceChangeListener(this); this.root.dispose(false); synchronized (nodeMap) { this.nodeMap.clear(); @@ -193,7 +186,7 @@ public class DBNModel implements IResourceChangeListener { @Nullable public DBNDataSource getDataSourceByPath(String path) throws DBException { - DBNProject project = getRoot().getProject(getProjectRegistry().getActiveProject()); + DBNProject project = getRoot().getProject(application.getProjectManager().getActiveProject()); if (project == null) { log.debug("Project node not found"); return null; @@ -204,7 +197,7 @@ public class DBNModel implements IResourceChangeListener { @Nullable public DBNNode getNodeByPath(DBRProgressMonitor monitor, String path) throws DBException { - DBNProject project = getRoot().getProject(getProjectRegistry().getActiveProject()); + DBNProject project = getRoot().getProject(application.getProjectManager().getActiveProject()); if (project == null) { log.debug("Project node not found"); return null; @@ -444,8 +437,8 @@ public class DBNModel implements IResourceChangeListener { // New projectNode getRoot().addProject(project, true); - if (getProjectRegistry().getActiveProject() == null) { - getProjectRegistry().setActiveProject(project); + if (application.getProjectManager().getActiveProject() == null) { + application.getProjectManager().setActiveProject(project); } } else { // Project not found - report an error @@ -455,8 +448,8 @@ public class DBNModel implements IResourceChangeListener { if (childDelta.getKind() == IResourceDelta.REMOVED) { // Project deleted getRoot().removeProject(project); - if (project == getProjectRegistry().getActiveProject()) { - getProjectRegistry().setActiveProject(null); + if (project == application.getProjectManager().getActiveProject()) { + application.getProjectManager().setActiveProject(null); } } else { if (childDelta.getFlags() == IResourceDelta.OPEN) { @@ -503,8 +496,4 @@ public class DBNModel implements IResourceChangeListener { } } - private static ProjectRegistry getProjectRegistry() { - return DBeaverCore.getInstance().getProjectRegistry(); - } - } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNNode.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNNode.java index 7b620e3e1e..9d08ad4652 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNNode.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNNode.java @@ -36,7 +36,7 @@ public abstract class DBNNode implements DBPNamedObject, DBPPersistedObject { static final Log log = Log.getLog(DBNNode.class); - private DBNNode parentNode; + private final DBNNode parentNode; protected DBNNode() { @@ -55,17 +55,15 @@ public abstract class DBNNode implements DBPNamedObject, DBPPersistedObject void dispose(boolean reflect) { - this.parentNode = null; } - public DBNNode getParentNode() - { - return parentNode; + public DBNModel getModel() { + return parentNode == null ? null : parentNode.getModel(); } - protected void setParentNode(DBNNode parentNode) + public DBNNode getParentNode() { - this.parentNode = parentNode; + return parentNode; } public boolean isLocked() diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNProject.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNProject.java index 5b8ef13fa9..d9647111d0 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNProject.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNProject.java @@ -23,13 +23,12 @@ import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.jkiss.dbeaver.DBException; -import org.jkiss.dbeaver.core.DBeaverCore; +import org.jkiss.dbeaver.model.DBIcon; +import org.jkiss.dbeaver.model.DBPDataSourceRegistry; import org.jkiss.dbeaver.model.DBPImage; import org.jkiss.dbeaver.model.project.DBPResourceHandler; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; -import org.jkiss.dbeaver.registry.DataSourceRegistry; import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor; -import org.jkiss.dbeaver.model.DBIcon; import java.util.ArrayList; import java.util.List; @@ -42,7 +41,7 @@ public class DBNProject extends DBNResource implements IAdaptable public DBNProject(DBNNode parentNode, IProject project, DBPResourceHandler handler) { super(parentNode, project, handler); - DBeaverCore.getInstance().getProjectRegistry().addProject(project); + getModel().getApplication().getProjectManager().addProject(project); } @Override @@ -50,7 +49,7 @@ public class DBNProject extends DBNResource implements IAdaptable { IProject project = getProject(); super.dispose(reflect); - DBeaverCore.getInstance().getProjectRegistry().removeProject(project); + getModel().getApplication().getProjectManager().removeProject(project); } public IProject getProject() @@ -109,7 +108,7 @@ public class DBNProject extends DBNResource implements IAdaptable public boolean supportsRename() { // Do not rename active projects - return DBeaverCore.getInstance().getProjectRegistry().getActiveProject() != getProject(); + return getModel().getApplication().getProjectManager().getActiveProject() != getProject(); } @Override @@ -134,7 +133,7 @@ public class DBNProject extends DBNResource implements IAdaptable throw new DBException("Can't open project '" + getProject().getName() + "'", e); } } - DataSourceRegistry dataSourceRegistry = DBeaverCore.getInstance().getProjectRegistry().getDataSourceRegistry(getProject()); + DBPDataSourceRegistry dataSourceRegistry = getModel().getApplication().getProjectManager().getDataSourceRegistry(getProject()); List children = super.readChildNodes(monitor); if (dataSourceRegistry != null) { children.add(0, new DBNProjectDatabases(this, dataSourceRegistry)); diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNProjectDatabases.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNProjectDatabases.java index b2e767562d..c6f5e91ccd 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNProjectDatabases.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNProjectDatabases.java @@ -18,7 +18,6 @@ package org.jkiss.dbeaver.model.navigator; import org.jkiss.dbeaver.core.CoreMessages; -import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.core.DBeaverUI; import org.jkiss.dbeaver.model.*; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; @@ -160,7 +159,7 @@ public class DBNProjectDatabases extends DBNNode implements DBNContainer, DBPEve public void refreshChildren() { this.children = null; - DBeaverCore.getInstance().getNavigatorModel().fireNodeUpdate(this, this, DBNEvent.NodeChange.STRUCT_REFRESH); + getModel().fireNodeUpdate(this, this, DBNEvent.NodeChange.STRUCT_REFRESH); } @Override @@ -202,7 +201,7 @@ public class DBNProjectDatabases extends DBNNode implements DBNContainer, DBPEve dataSources.add(newNode); children = null; if (reflect) { - DBNModel.getInstance().fireNodeEvent(new DBNEvent(this, DBNEvent.Action.ADD, newNode)); + getModel().fireNodeEvent(new DBNEvent(this, DBNEvent.Action.ADD, newNode)); } return newNode; } @@ -227,12 +226,13 @@ public class DBNProjectDatabases extends DBNNode implements DBNContainer, DBPEve @Override public void handleDataSourceEvent(DBPEvent event) { + DBNModel model = getModel(); switch (event.getAction()) { case OBJECT_ADD: if (event.getObject() instanceof DBSDataSourceContainer) { addDataSource((DBSDataSourceContainer) event.getObject(), true); - } else if (DBNModel.getInstance().getNodeByObject(event.getObject()) == null) { - final DBNDatabaseNode parentNode = DBNModel.getInstance().getParentNode(event.getObject()); + } else if (model.getNodeByObject(event.getObject()) == null) { + final DBNDatabaseNode parentNode = model.getParentNode(event.getObject()); if (parentNode != null) { if (parentNode.getChildNodes() == null && parentNode.allowsChildren()) { @@ -265,7 +265,7 @@ public class DBNProjectDatabases extends DBNNode implements DBNContainer, DBPEve if (event.getObject() instanceof DBSDataSourceContainer) { removeDataSource((DBSDataSourceContainer) event.getObject()); } else { - final DBNDatabaseNode node = DBNModel.getInstance().getNodeByObject(event.getObject()); + final DBNDatabaseNode node = model.getNodeByObject(event.getObject()); if (node != null && node.getParentNode() instanceof DBNDatabaseNode) { ((DBNDatabaseNode)node.getParentNode()).removeChildItem(event.getObject()); } @@ -274,7 +274,7 @@ public class DBNProjectDatabases extends DBNNode implements DBNContainer, DBPEve case OBJECT_UPDATE: case OBJECT_SELECT: { - DBNNode dbmNode = DBNModel.getInstance().getNodeByObject(event.getObject()); + DBNNode dbmNode = model.getNodeByObject(event.getObject()); if (dbmNode != null) { DBNEvent.NodeChange nodeChange; Boolean enabled = null; @@ -292,7 +292,7 @@ public class DBNProjectDatabases extends DBNNode implements DBNContainer, DBPEve nodeChange = DBNEvent.NodeChange.REFRESH; } } - DBNModel.getInstance().fireNodeUpdate( + model.fireNodeUpdate( this, dbmNode, nodeChange); diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNResource.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNResource.java index 70b701a9a5..3156d513a9 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNResource.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNResource.java @@ -22,7 +22,6 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.DBException; -import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.model.DBIcon; import org.jkiss.dbeaver.model.DBPImage; import org.jkiss.dbeaver.model.meta.Property; @@ -63,7 +62,7 @@ public class DBNResource extends DBNNode children = null; } if (reflect) { - DBNModel.getInstance().fireNodeEvent(new DBNEvent(this, DBNEvent.Action.REMOVE, this)); + getModel().fireNodeEvent(new DBNEvent(this, DBNEvent.Action.REMOVE, this)); } } super.dispose(reflect); @@ -147,7 +146,6 @@ public class DBNResource extends DBNNode protected List readChildNodes(DBRProgressMonitor monitor) throws DBException { - //final ProjectRegistry projectRegistry = DBeaverCore.getInstance().getProjectRegistry(); List result = new ArrayList(); try { IResource[] members = ((IContainer) resource).members(); @@ -192,7 +190,7 @@ public class DBNResource extends DBNNode // Sub folder return handler.makeNavigatorNode(this, resource); } - DBPResourceHandler resourceHandler = DBeaverCore.getInstance().getProjectRegistry().getResourceHandler(resource); + DBPResourceHandler resourceHandler = getModel().getApplication().getProjectManager().getResourceHandler(resource); if (resourceHandler == null) { log.debug("Skip resource '" + resource.getName() + "'"); return null; @@ -349,9 +347,10 @@ public class DBNResource extends DBNNode void handleResourceChange(IResourceDelta delta) { + DBNModel model = getModel(); if (delta.getKind() == IResourceDelta.CHANGED) { // Update this node in navigator - DBNModel.getInstance().fireNodeEvent(new DBNEvent(delta, DBNEvent.Action.UPDATE, this)); + model.fireNodeEvent(new DBNEvent(delta, DBNEvent.Action.UPDATE, this)); } if (children == null) { // Child nodes are not yet read so nothing to change here - just return @@ -366,7 +365,7 @@ public class DBNResource extends DBNNode if (newChild != null) { children.add(newChild); sortChildren(children); - DBNModel.getInstance().fireNodeEvent(new DBNEvent(childDelta, DBNEvent.Action.ADD, newChild)); + model.fireNodeEvent(new DBNEvent(childDelta, DBNEvent.Action.ADD, newChild)); if (childDelta.getKind() == IResourceDelta.CHANGED) { // Notify just created resource diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNRoot.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNRoot.java index 8daa42d9ac..bfe38caa1b 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNRoot.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/model/navigator/DBNRoot.java @@ -19,7 +19,6 @@ package org.jkiss.dbeaver.model.navigator; import org.eclipse.core.resources.IProject; import org.jkiss.dbeaver.core.CoreMessages; -import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.model.DBPImage; import org.jkiss.dbeaver.model.project.DBPProjectListener; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; @@ -31,12 +30,14 @@ import java.util.*; */ public class DBNRoot extends DBNNode implements DBNContainer, DBPProjectListener { + private final DBNModel model; private List projects = new ArrayList(); - public DBNRoot() + public DBNRoot(DBNModel model) { super(); - DBeaverCore.getInstance().getProjectRegistry().addProjectListener(this); + this.model = model; + model.getApplication().getProjectManager().addProjectListener(this); } @Override @@ -46,7 +47,12 @@ public class DBNRoot extends DBNNode implements DBNContainer, DBPProjectListener project.dispose(reflect); } projects.clear(); - DBeaverCore.getInstance().getProjectRegistry().removeProjectListener(this); + model.getApplication().getProjectManager().removeProjectListener(this); + } + + @Override + public DBNModel getModel() { + return model; } @Override @@ -130,7 +136,7 @@ public class DBNRoot extends DBNNode implements DBNContainer, DBPProjectListener DBNProject projectNode = new DBNProject( this, project, - DBeaverCore.getInstance().getProjectRegistry().getResourceHandler(project)); + model.getApplication().getProjectManager().getResourceHandler(project)); projects.add(projectNode); Collections.sort(projects, new Comparator() { @Override @@ -139,7 +145,7 @@ public class DBNRoot extends DBNNode implements DBNContainer, DBPProjectListener return o1.getNodeName().compareTo(o2.getNodeName()); } }); - DBNModel.getInstance().fireNodeEvent(new DBNEvent(this, DBNEvent.Action.ADD, projectNode)); + model.fireNodeEvent(new DBNEvent(this, DBNEvent.Action.ADD, projectNode)); return projectNode; } @@ -150,7 +156,7 @@ public class DBNRoot extends DBNNode implements DBNContainer, DBPProjectListener DBNProject projectNode = iter.next(); if (projectNode.getProject() == project) { iter.remove(); - DBNModel.getInstance().fireNodeEvent(new DBNEvent(this, DBNEvent.Action.REMOVE, projectNode)); + model.fireNodeEvent(new DBNEvent(this, DBNEvent.Action.REMOVE, projectNode)); projectNode.dispose(true); break; } @@ -163,10 +169,10 @@ public class DBNRoot extends DBNNode implements DBNContainer, DBPProjectListener DBNProject projectNode = getProject(newValue); DBNProject oldProjectNode = getProject(oldValue); if (projectNode != null) { - DBNModel.getInstance().fireNodeEvent(new DBNEvent(this, DBNEvent.Action.UPDATE, projectNode)); + model.fireNodeEvent(new DBNEvent(this, DBNEvent.Action.UPDATE, projectNode)); } if (oldProjectNode != null) { - DBNModel.getInstance().fireNodeEvent(new DBNEvent(this, DBNEvent.Action.UPDATE, oldProjectNode)); + model.fireNodeEvent(new DBNEvent(this, DBNEvent.Action.UPDATE, oldProjectNode)); } } } 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 46a1bb478e..d9a322816b 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.DBPProjectManager; import org.jkiss.dbeaver.ui.resources.DefaultResourceHandlerImpl; import org.jkiss.dbeaver.model.project.DBPProjectListener; import org.jkiss.dbeaver.model.project.DBPResourceHandler; @@ -34,7 +35,7 @@ import org.jkiss.utils.CommonUtils; import java.util.*; -public class ProjectRegistry { +public class ProjectRegistry implements DBPProjectManager { static final Log log = Log.getLog(ProjectRegistry.class); private static final String PROP_PROJECT_ACTIVE = "project.active"; @@ -153,6 +154,7 @@ public class ProjectRegistry { } } + @Override public void addProjectListener(DBPProjectListener listener) { synchronized (projectListeners) { @@ -160,6 +162,7 @@ public class ProjectRegistry { } } + @Override public void removeProjectListener(DBPProjectListener listener) { synchronized (projectListeners) { @@ -167,6 +170,7 @@ public class ProjectRegistry { } } + @Override public DBPResourceHandler getResourceHandler(IResource resource) { if (resource == null || resource.isHidden() || resource.isPhantom()) { @@ -255,6 +259,7 @@ public class ProjectRegistry { return dataSourceRegistry; } + @Override public IProject getActiveProject() { return activeProject; @@ -319,6 +324,7 @@ public class ProjectRegistry { * Otherwise set of workspace synchronize problems occur * @param project project */ + @Override public void addProject(IProject project) { if (busyProjects.contains(project)) { @@ -332,6 +338,7 @@ public class ProjectRegistry { projectDatabases.put(project, new DataSourceRegistry(project)); } + @Override public void removeProject(IProject project) { // Remove project from registry diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/tools/scripts/ScriptsExportUtils.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/tools/scripts/ScriptsExportUtils.java index e6058d5e2d..b2a7bf3dbb 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/tools/scripts/ScriptsExportUtils.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/tools/scripts/ScriptsExportUtils.java @@ -18,18 +18,17 @@ package org.jkiss.dbeaver.tools.scripts; -import org.jkiss.dbeaver.core.Log; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.core.DBeaverCore; -import org.jkiss.dbeaver.ui.resources.ScriptsHandlerImpl; -import org.jkiss.dbeaver.model.navigator.DBNModel; +import org.jkiss.dbeaver.core.Log; import org.jkiss.dbeaver.model.navigator.DBNNode; import org.jkiss.dbeaver.model.navigator.DBNProject; import org.jkiss.dbeaver.model.navigator.DBNResource; import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor; +import org.jkiss.dbeaver.ui.resources.ScriptsHandlerImpl; /** * Utils @@ -42,7 +41,7 @@ class ScriptsExportUtils { { final IProject activeProject = DBeaverCore.getInstance().getProjectRegistry().getActiveProject(); if (activeProject == null) { - return DBNModel.getInstance().getRoot(); + return DBeaverCore.getInstance().getNavigatorModel().getRoot(); } final DBNProject projectNode = DBeaverCore.getInstance().getNavigatorModel().getRoot().getProject(activeProject); DBNNode scriptsNode = projectNode; diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/EntityHyperlink.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/EntityHyperlink.java index 7c9a9c0708..40ed2e3bf8 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/EntityHyperlink.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/editors/entity/EntityHyperlink.java @@ -21,10 +21,10 @@ import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.hyperlink.IHyperlink; import org.eclipse.ui.PlatformUI; import org.jkiss.dbeaver.DBException; +import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.core.DBeaverUI; import org.jkiss.dbeaver.model.DBUtils; import org.jkiss.dbeaver.model.navigator.DBNDatabaseNode; -import org.jkiss.dbeaver.model.navigator.DBNModel; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress; import org.jkiss.dbeaver.model.struct.DBSObject; @@ -111,7 +111,7 @@ public class EntityHyperlink implements IHyperlink monitor.beginTask("Resolve object " + reference.getName(), 1); try { DBSObject object = reference.resolveObject(monitor); - node = DBNModel.getInstance().getNodeByObject(monitor, object, true); + node = DBeaverCore.getInstance().getNavigatorModel().getNodeByObject(monitor, object, true); } catch (DBException e) { throw new InvocationTargetException(e); } finally { diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/search/AbstractSearchPage.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/search/AbstractSearchPage.java index ccb327c175..91e1f18ab8 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/search/AbstractSearchPage.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/search/AbstractSearchPage.java @@ -19,11 +19,11 @@ package org.jkiss.dbeaver.ui.search; import org.eclipse.jface.dialogs.DialogPage; import org.jkiss.dbeaver.DBException; +import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.core.DBeaverUI; import org.jkiss.dbeaver.core.Log; import org.jkiss.dbeaver.model.DBPPreferenceStore; import org.jkiss.dbeaver.model.navigator.DBNDataSource; -import org.jkiss.dbeaver.model.navigator.DBNModel; import org.jkiss.dbeaver.model.navigator.DBNNode; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress; @@ -77,12 +77,12 @@ public abstract class AbstractSearchPage extends DialogPage implements IObjectSe while (st.hasMoreTokens()) { String nodePath = st.nextToken(); try { - DBNDataSource dsNode = DBNModel.getInstance().getDataSourceByPath(nodePath); + DBNDataSource dsNode = DBeaverCore.getInstance().getNavigatorModel().getDataSourceByPath(nodePath); if (brokenDataSources.contains(dsNode)) { continue; } - DBNNode node = DBNModel.getInstance().getNodeByPath(monitor, nodePath); + DBNNode node = DBeaverCore.getInstance().getNavigatorModel().getNodeByPath(monitor, nodePath); if (node != null) { result.add(node); } else { diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/search/data/SearchDataQuery.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/search/data/SearchDataQuery.java index ee52ba9899..039f2929a7 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/search/data/SearchDataQuery.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/search/data/SearchDataQuery.java @@ -17,6 +17,7 @@ */ package org.jkiss.dbeaver.ui.search.data; +import org.jkiss.dbeaver.core.DBeaverCore; import org.jkiss.dbeaver.core.Log; import org.jkiss.code.NotNull; import org.jkiss.dbeaver.DBException; @@ -71,7 +72,7 @@ public class SearchDataQuery implements IObjectSearchQuery { } // Search - DBNModel dbnModel = DBNModel.getInstance(); + DBNModel dbnModel = DBeaverCore.getInstance().getNavigatorModel(); monitor.beginTask( "Search \"" + searchString + "\" in " + params.sources.size() + " table(s) / " + dataSources.size() + " database(s)", diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/views/navigator/database/DatabaseNavigatorTree.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/views/navigator/database/DatabaseNavigatorTree.java index 50438453e6..9a8ffec4d3 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/views/navigator/database/DatabaseNavigatorTree.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/views/navigator/database/DatabaseNavigatorTree.java @@ -66,7 +66,7 @@ public class DatabaseNavigatorTree extends Composite implements INavigatorListen { super(parent, SWT.NONE); this.setLayout(new FillLayout()); - this.model = DBNModel.getInstance(); + this.model = DBeaverCore.getInstance().getNavigatorModel(); this.model.addListener(this); addDisposeListener(new DisposeListener() { @Override -- GitLab