提交 49bb312e 编写于 作者: S Serge Rider

Navigator model additions (local mode)

上级 df35635c
......@@ -80,6 +80,8 @@ public interface DBPDataSourceRegistry extends DBPObject {
void removeFolder(DBPDataSourceFolder folder, boolean dropContents);
DBPDataSourceRegistry createCopy(IProject project);
@Nullable
DBSObjectFilter getSavedFilter(String name);
......@@ -99,4 +101,5 @@ public interface DBPDataSourceRegistry extends DBPObject {
@NotNull
ISecurePreferences getSecurePreferences();
void dispose();
}
......@@ -33,19 +33,16 @@ import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.utils.ArrayUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* DBNProject
*/
public class DBNProject extends DBNResource
{
public class DBNProject extends DBNResource {
private static final Log log = Log.getLog(DBNProject.class);
public DBNProject(DBNNode parentNode, IProject project, DBPResourceHandler handler)
{
public DBNProject(DBNNode parentNode, IProject project, DBPResourceHandler handler) {
super(parentNode, project, handler);
if (getModel().isGlobal()) {
getModel().getPlatform().getProjectManager().addProject(project);
......@@ -53,21 +50,18 @@ public class DBNProject extends DBNResource
}
@Override
protected void dispose(boolean reflect)
{
protected void dispose(boolean reflect) {
super.dispose(reflect);
if (getModel().isGlobal()) {
getModel().getPlatform().getProjectManager().removeProject(getProject());
}
}
public IProject getProject()
{
return (IProject)getResource();
public IProject getProject() {
return (IProject) getResource();
}
public DBNProjectDatabases getDatabases()
{
public DBNProjectDatabases getDatabases() {
try {
for (DBNNode db : getChildren(new VoidProgressMonitor())) {
if (db instanceof DBNProjectDatabases) {
......@@ -81,8 +75,7 @@ public class DBNProject extends DBNResource
}
@Override
public String getNodeDescription()
{
public String getNodeDescription() {
try {
final IProject project = getProject();
return project == null ? null : project.getDescription().getComment();
......@@ -93,14 +86,12 @@ public class DBNProject extends DBNResource
}
@Override
public DBPImage getNodeIcon()
{
public DBPImage getNodeIcon() {
return DBIcon.PROJECT;
}
@Override
public boolean allowsOpen()
{
public boolean allowsOpen() {
return true;
}
......@@ -113,15 +104,13 @@ public class DBNProject extends DBNResource
}
@Override
public boolean supportsRename()
{
public boolean supportsRename() {
// Do not rename active projects
return getModel().getPlatform().getProjectManager().getActiveProject() != getProject();
}
@Override
public void rename(DBRProgressMonitor monitor, String newName) throws DBException
{
public void rename(DBRProgressMonitor monitor, String newName) throws DBException {
try {
final IProjectDescription description = getProject().getDescription();
description.setName(newName);
......@@ -138,7 +127,7 @@ public class DBNProject extends DBNResource
List<DBNNode> children = new ArrayList<>();
Collections.addAll(children, super.getChildren(monitor));
children.removeIf(node ->
node instanceof DBNResource && !((DBNResource) node).getResource().exists());
node instanceof DBNResource && !((DBNResource) node).getResource().exists());
return children.toArray(new DBNNode[0]);
}
......@@ -146,10 +135,10 @@ public class DBNProject extends DBNResource
}
@Override
protected DBNNode[] readChildNodes(DBRProgressMonitor monitor) throws DBException
{
protected DBNNode[] readChildNodes(DBRProgressMonitor monitor) throws DBException {
IProject project = getProject();
if (!project.isOpen()) {
DBNModel model = getModel();
if (model.isGlobal() && !project.isOpen()) {
try {
project.open(monitor.getNestedMonitor());
project.refreshLocal(IFile.DEPTH_ONE, monitor.getNestedMonitor());
......@@ -157,11 +146,19 @@ public class DBNProject extends DBNResource
throw new DBException("Can't open project '" + project.getName() + "'", e);
}
}
DBPDataSourceRegistry dataSourceRegistry = getModel().getPlatform().getProjectManager().getDataSourceRegistry(project);
DBNNode[] children = super.readChildNodes(monitor);
DBPDataSourceRegistry dataSourceRegistry;
if (model.isGlobal()) {
dataSourceRegistry = model.getPlatform().getProjectManager().getDataSourceRegistry(project);
} else {
dataSourceRegistry = model.getPlatform().getProjectManager().getDefaultDataSourceRegistry();
}
if (dataSourceRegistry != null) {
children = ArrayUtils.insertArea(DBNNode.class, children, 0, new Object[] {new DBNProjectDatabases(this, dataSourceRegistry)});
children = ArrayUtils.insertArea(DBNNode.class, children, 0, new Object[]{
new DBNProjectDatabases(this, dataSourceRegistry)});
}
return children;
}
......@@ -178,8 +175,7 @@ public class DBNProject extends DBNResource
return super.addImplicitMembers(members);
}
public DBNResource findResource(IResource resource)
{
public DBNResource findResource(IResource resource) {
List<IResource> path = new ArrayList<>();
for (IResource parent = resource; !(parent instanceof IProject); parent = parent.getParent()) {
path.add(0, parent);
......
......@@ -45,7 +45,9 @@ public class DBNProjectDatabases extends DBNNode implements DBNContainer, DBPEve
public DBNProjectDatabases(DBNProject parentNode, DBPDataSourceRegistry dataSourceRegistry)
{
super(parentNode);
this.dataSourceRegistry = dataSourceRegistry;
this.dataSourceRegistry = getModel().isGlobal() ?
dataSourceRegistry :
dataSourceRegistry.createCopy(parentNode.getProject());
this.dataSourceRegistry.addDataSourceListener(this);
List<? extends DBPDataSourceContainer> projectDataSources = this.dataSourceRegistry.getDataSources();
......@@ -65,6 +67,10 @@ public class DBNProjectDatabases extends DBNNode implements DBNContainer, DBPEve
children = null;
if (dataSourceRegistry != null) {
dataSourceRegistry.removeDataSourceListener(this);
if (!getModel().isGlobal()) {
// For local models registry si
dataSourceRegistry.dispose();
}
dataSourceRegistry = null;
}
super.dispose(reflect);
......
......@@ -190,9 +190,13 @@ public class DataSourceDescriptor
}
// Copy constructor
public DataSourceDescriptor(@NotNull DataSourceDescriptor source)
public DataSourceDescriptor(@NotNull DataSourceDescriptor source) {
this(source, source.registry);
}
public DataSourceDescriptor(@NotNull DataSourceDescriptor source, DBPDataSourceRegistry registry)
{
this.registry = source.registry;
this.registry = registry;
this.origin = source.origin;
this.id = source.id;
this.name = source.name;
......
......@@ -99,6 +99,18 @@ public class DataSourceRegistry implements DBPDataSourceRegistry
DataSourceProviderRegistry.getInstance().fireRegistryChange(this, true);
}
/**
* Create copy
*/
public DataSourceRegistry(DataSourceRegistry source, IProject project) {
this.platform = source.platform;
this.project = project;
for (DataSourceDescriptor ds : source.dataSources) {
dataSources.add(new DataSourceDescriptor(ds, this));
}
}
@Override
public void dispose()
{
DataSourceProviderRegistry.getInstance().fireRegistryChange(this, false);
......@@ -279,6 +291,11 @@ public class DataSourceRegistry implements DBPDataSourceRegistry
dataSourceFolders.remove(folderImpl);
}
@Override
public DBPDataSourceRegistry createCopy(IProject project) {
return new DataSourceRegistry(this, project);
}
private DataSourceFolder findRootFolder(String name) {
for (DataSourceFolder root : getRootFolders()) {
if (root.getName().equals(name)) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册