diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/DataSourceDescriptorManager.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/DataSourceDescriptorManager.java index 9cee5aa92295938af728488c78d1796e1e108240..ab15a545744e07d50205597e8bd3baaada085c25 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/DataSourceDescriptorManager.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/registry/DataSourceDescriptorManager.java @@ -106,14 +106,11 @@ public class DataSourceDescriptorManager extends AbstractObjectManager { + CreateConnectionDialog dialog = new CreateConnectionDialog( + UIUtils.getActiveWorkbenchWindow(), + new NewConnectionWizard()); + dialog.open(); }); } return null; @@ -122,13 +119,7 @@ public class DataSourceDescriptorManager extends AbstractObjectManager options) { - Runnable remover = new Runnable() { - @Override - public void run() - { - object.getRegistry().removeDataSource(object); - } - }; + Runnable remover = () -> object.getRegistry().removeDataSource(object); if (object.isConnected()) { DataSourceHandler.disconnectDataSource(object, remover); } else { diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBPDataSourceContainer.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBPDataSourceContainer.java index 9382e69d2e98daf9f4666e37aa5b3728a37688fc..9efd276117daaedcf9fe7fa82e1c4b3fece8a444 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBPDataSourceContainer.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/DBPDataSourceContainer.java @@ -208,4 +208,6 @@ public interface DBPDataSourceContainer extends DBSObject, DBDPreferences, DBPNa GeneralUtils.IVariableResolver getVariablesResolver(); + DBPDataSourceContainer createCopy(DBPDataSourceRegistry forRegistry); + } diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNProject.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNProject.java index 4ca647cc9b5cff1a57b00d85004df2574e427d71..3cc5ffefa1eb2b777cfece891bb337ce947601b5 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNProject.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNProject.java @@ -156,6 +156,12 @@ public class DBNProject extends DBNResource { return super.addImplicitMembers(members); } + @Override + public DBNNode refreshNode(DBRProgressMonitor monitor, Object source) throws DBException { + project.getDataSourceRegistry().refreshConfig(); + return super.refreshNode(monitor, source); + } + public DBNResource findResource(IResource resource) { List path = new ArrayList<>(); for (IResource parent = resource; !(parent instanceof IProject); parent = parent.getParent()) { diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNProjectDatabases.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNProjectDatabases.java index 16a409c6c983fb25d2698bec6e08155d7c4332a5..1a02b6edefcbe6b7fcaadb6d76e99194d8cf1350 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNProjectDatabases.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNProjectDatabases.java @@ -171,13 +171,27 @@ public class DBNProjectDatabases extends DBNNode implements DBNContainer, DBPEve @Override public void dropNodes(Collection nodes) throws DBException { + Set registryToRefresh = new LinkedHashSet<>(); for (DBNNode node : nodes) { if (node instanceof DBNDataSource) { - DBPDataSourceContainer dsContainer = ((DBNDataSource) node).getDataSourceContainer(); - dsContainer.getRegistry().removeDataSource(dsContainer); - dataSourceRegistry.addDataSource(dsContainer); + DBPDataSourceContainer oldContainer = ((DBNDataSource) node).getDataSourceContainer(); + if (oldContainer.getRegistry() == dataSourceRegistry) { + // the same registry + continue; + } + DBPDataSourceContainer newContainer = oldContainer.createCopy(dataSourceRegistry); + oldContainer.getRegistry().removeDataSource(oldContainer); + + dataSourceRegistry.addDataSource(newContainer); + + registryToRefresh.add(oldContainer.getRegistry()); + registryToRefresh.add(dataSourceRegistry); } } + + for (DBPDataSourceRegistry registy : registryToRefresh) { + registy.flushConfig(); + } } public void refreshChildren() diff --git a/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceDescriptor.java b/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceDescriptor.java index b3675963e4e86864e71d8905fd028973891787cb..21316241748f7b41b3811b226c5b46ba17aa74a1 100644 --- a/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceDescriptor.java +++ b/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceDescriptor.java @@ -195,7 +195,7 @@ public class DataSourceDescriptor public DataSourceDescriptor(@NotNull DataSourceDescriptor source, @NotNull DBPDataSourceRegistry registry) { this.registry = registry; - this.origin = source.origin; + this.origin = ((DataSourceRegistry)registry).getDefaultOrigin(); this.id = source.id; this.name = source.name; this.description = source.description; @@ -1429,6 +1429,13 @@ public class DataSourceDescriptor }; } + @Override + public DBPDataSourceContainer createCopy(DBPDataSourceRegistry forRegistry) { + DataSourceDescriptor copy = new DataSourceDescriptor(this, forRegistry); + copy.setId(DataSourceDescriptor.generateNewId(copy.getDriver())); + return copy; + } + public static boolean askForPassword(@NotNull final DataSourceDescriptor dataSourceContainer, @Nullable final DBWHandlerConfiguration networkHandler, final boolean passwordOnly) { final String prompt = networkHandler != null ? diff --git a/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceRegistry.java b/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceRegistry.java index d7f29a4fd1d224e11b89492d694aead16fb67550..ee2789f3319412d12514f4995f1c77517007fd43 100644 --- a/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceRegistry.java +++ b/plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceRegistry.java @@ -786,6 +786,11 @@ public class DataSourceRegistry implements DBPDataSourceRegistry { return project; } + @Override + public String toString() { + return project.getName() + " (" + getClass().getSimpleName() + ")"; + } + static class ParseResults { Set updatedDataSources = new LinkedHashSet<>(); Set addedDataSources = new LinkedHashSet<>();