Search in sources :

Example 11 with DBWHandlerConfiguration

use of org.jkiss.dbeaver.model.net.DBWHandlerConfiguration in project dbeaver by serge-rider.

the class DataSourceSerializerModern method saveDataSources.

@Override
public void saveDataSources(DBRProgressMonitor monitor, DBPDataSourceConfigurationStorage configurationStorage, List<DataSourceDescriptor> localDataSources, File configFile) throws DBException {
    ByteArrayOutputStream dsConfigBuffer = new ByteArrayOutputStream(10000);
    try (OutputStreamWriter osw = new OutputStreamWriter(dsConfigBuffer, StandardCharsets.UTF_8)) {
        try (JsonWriter jsonWriter = CONFIG_GSON.newJsonWriter(osw)) {
            jsonWriter.setIndent("\t");
            jsonWriter.beginObject();
            // Save folders
            if (configurationStorage.isDefault()) {
                jsonWriter.name("folders");
                jsonWriter.beginObject();
                // Folders (only for default storage)
                for (DataSourceFolder folder : registry.getAllFolders()) {
                    saveFolder(jsonWriter, folder);
                }
                jsonWriter.endObject();
            }
            Map<String, DBVModel> virtualModels = new LinkedHashMap<>();
            Map<String, DBPConnectionType> connectionTypes = new LinkedHashMap<>();
            Map<String, Map<String, DBPDriver>> drivers = new LinkedHashMap<>();
            {
                // Save connections
                jsonWriter.name("connections");
                jsonWriter.beginObject();
                for (DataSourceDescriptor dataSource : localDataSources) {
                    // Skip temporary
                    if (!dataSource.isDetached()) {
                        saveDataSource(jsonWriter, dataSource);
                        if (dataSource.getVirtualModel().hasValuableData()) {
                            virtualModels.put(dataSource.getVirtualModel().getId(), dataSource.getVirtualModel());
                        }
                        DBPConnectionType connectionType = dataSource.getConnectionConfiguration().getConnectionType();
                        /*if (!connectionType.isPredefined()) */
                        {
                            connectionTypes.put(connectionType.getId(), connectionType);
                        }
                        DBPDriver driver = dataSource.getDriver();
                        if (driver.isCustom() && !driver.getProviderDescriptor().isTemporary()) {
                            Map<String, DBPDriver> driverMap = drivers.computeIfAbsent(driver.getProviderId(), s -> new LinkedHashMap<>());
                            driverMap.put(driver.getId(), driver);
                        }
                    }
                }
                jsonWriter.endObject();
            }
            if (configurationStorage.isDefault()) {
                if (!virtualModels.isEmpty()) {
                    // Save virtual models
                    jsonWriter.name("virtual-models");
                    jsonWriter.beginObject();
                    for (DBVModel model : virtualModels.values()) {
                        model.serialize(monitor, jsonWriter);
                    }
                    jsonWriter.endObject();
                }
                // Network profiles
                List<DBWNetworkProfile> profiles = registry.getNetworkProfiles();
                if (!CommonUtils.isEmpty(profiles)) {
                    jsonWriter.name("network-profiles");
                    jsonWriter.beginObject();
                    for (DBWNetworkProfile np : profiles) {
                        jsonWriter.name(np.getProfileId());
                        jsonWriter.beginObject();
                        JSONUtils.fieldNE(jsonWriter, RegistryConstants.ATTR_NAME, np.getProfileName());
                        JSONUtils.fieldNE(jsonWriter, RegistryConstants.ATTR_DESCRIPTION, np.getProfileDescription());
                        jsonWriter.name("handlers");
                        jsonWriter.beginObject();
                        for (DBWHandlerConfiguration configuration : np.getConfigurations()) {
                            if (configuration.hasValuableInfo()) {
                                saveNetworkHandlerConfiguration(jsonWriter, null, np, configuration);
                            }
                        }
                        jsonWriter.endObject();
                        jsonWriter.endObject();
                    }
                    jsonWriter.endObject();
                }
                // Auth profiles
                List<DBAAuthProfile> authProfiles = registry.getAllAuthProfiles();
                if (!CommonUtils.isEmpty(authProfiles)) {
                    jsonWriter.name("auth-profiles");
                    jsonWriter.beginObject();
                    for (DBAAuthProfile authProfile : authProfiles) {
                        jsonWriter.name(authProfile.getProfileId());
                        jsonWriter.beginObject();
                        JSONUtils.fieldNE(jsonWriter, RegistryConstants.ATTR_NAME, authProfile.getProfileName());
                        JSONUtils.fieldNE(jsonWriter, RegistryConstants.ATTR_DESCRIPTION, authProfile.getProfileDescription());
                        JSONUtils.fieldNE(jsonWriter, RegistryConstants.ATTR_AUTH_MODEL, authProfile.getAuthModelId());
                        if (authProfile.isSavePassword()) {
                            JSONUtils.field(jsonWriter, RegistryConstants.ATTR_SAVE_PASSWORD, authProfile.isSavePassword());
                        }
                        // Save all auth properties in secure storage
                        saveSecuredCredentials(null, authProfile, null, new SecureCredentials(authProfile));
                        jsonWriter.endObject();
                    }
                    jsonWriter.endObject();
                }
                // Filters
                List<DBSObjectFilter> savedFilters = registry.getSavedFilters();
                if (!CommonUtils.isEmpty(savedFilters)) {
                    jsonWriter.name("saved-filters");
                    jsonWriter.beginArray();
                    for (DBSObjectFilter cf : savedFilters) {
                        if (!cf.isEmpty()) {
                            saveObjectFiler(jsonWriter, null, null, cf);
                        }
                    }
                    jsonWriter.endArray();
                }
                // Connection types
                if (!CommonUtils.isEmpty(connectionTypes)) {
                    jsonWriter.name("connection-types");
                    jsonWriter.beginObject();
                    for (DBPConnectionType ct : connectionTypes.values()) {
                        jsonWriter.name(ct.getId());
                        jsonWriter.beginObject();
                        JSONUtils.fieldNE(jsonWriter, RegistryConstants.ATTR_NAME, ct.getName());
                        JSONUtils.fieldNE(jsonWriter, RegistryConstants.ATTR_COLOR, ct.getColor());
                        JSONUtils.fieldNE(jsonWriter, RegistryConstants.ATTR_DESCRIPTION, ct.getDescription());
                        JSONUtils.field(jsonWriter, "auto-commit", ct.isAutocommit());
                        JSONUtils.field(jsonWriter, "confirm-execute", ct.isConfirmExecute());
                        JSONUtils.field(jsonWriter, "confirm-data-change", ct.isConfirmDataChange());
                        serializeModifyPermissions(jsonWriter, ct);
                        jsonWriter.endObject();
                    }
                    jsonWriter.endObject();
                }
                // Drivers
                if (!CommonUtils.isEmpty(drivers)) {
                    jsonWriter.name("drivers");
                    jsonWriter.beginObject();
                    for (Map.Entry<String, Map<String, DBPDriver>> dmap : drivers.entrySet()) {
                        jsonWriter.name(dmap.getKey());
                        jsonWriter.beginObject();
                        for (DBPDriver driver : dmap.getValue().values()) {
                            ((DriverDescriptor) driver).serialize(jsonWriter, true);
                        }
                        jsonWriter.endObject();
                    }
                    jsonWriter.endObject();
                }
            }
            jsonWriter.endObject();
            jsonWriter.flush();
        }
    } catch (IOException e) {
        log.error("IO error while saving datasources json", e);
    }
    String jsonString = new String(dsConfigBuffer.toByteArray(), StandardCharsets.UTF_8);
    boolean encryptProject = CommonUtils.toBoolean(registry.getProject().getProjectProperty(DBPProject.PROP_SECURE_PROJECT));
    saveConfigFile(configFile, jsonString, false, encryptProject);
    {
        saveSecureCredentialsFile(monitor.getNestedMonitor(), configFile.getParentFile(), configurationStorage);
    }
}
Also used : DBWorkbench(org.jkiss.dbeaver.runtime.DBWorkbench) DBPDataSourceConfigurationStorage(org.jkiss.dbeaver.model.DBPDataSourceConfigurationStorage) java.util(java.util) TypeToken(com.google.gson.reflect.TypeToken) DBPDataSourceOrigin(org.jkiss.dbeaver.model.DBPDataSourceOrigin) Nullable(org.jkiss.code.Nullable) GsonBuilder(com.google.gson.GsonBuilder) NotNull(org.jkiss.code.NotNull) DBAAuthProfile(org.jkiss.dbeaver.model.access.DBAAuthProfile) DBWHandlerConfiguration(org.jkiss.dbeaver.model.net.DBWHandlerConfiguration) NetworkHandlerDescriptor(org.jkiss.dbeaver.registry.network.NetworkHandlerDescriptor) DBPDataSourcePermission(org.jkiss.dbeaver.model.DBPDataSourcePermission) Gson(com.google.gson.Gson) DBWNetworkProfile(org.jkiss.dbeaver.model.net.DBWNetworkProfile) DBASecureStorage(org.jkiss.dbeaver.model.app.DBASecureStorage) IOUtils(org.jkiss.utils.IOUtils) Log(org.jkiss.dbeaver.Log) DBRProgressMonitor(org.jkiss.dbeaver.model.runtime.DBRProgressMonitor) ContentEncrypter(org.jkiss.dbeaver.runtime.encode.ContentEncrypter) DBPProject(org.jkiss.dbeaver.model.app.DBPProject) DBVModel(org.jkiss.dbeaver.model.virtual.DBVModel) JsonWriter(com.google.gson.stream.JsonWriter) JSONUtils(org.jkiss.dbeaver.model.data.json.JSONUtils) DBRShellCommand(org.jkiss.dbeaver.model.runtime.DBRShellCommand) NetworkHandlerRegistry(org.jkiss.dbeaver.registry.network.NetworkHandlerRegistry) CommonUtils(org.jkiss.utils.CommonUtils) SimplePreferenceStore(org.jkiss.dbeaver.model.impl.preferences.SimplePreferenceStore) DBSObjectFilter(org.jkiss.dbeaver.model.struct.DBSObjectFilter) ContentUtils(org.jkiss.dbeaver.utils.ContentUtils) DBPDataSourcePermissionOwner(org.jkiss.dbeaver.model.DBPDataSourcePermissionOwner) ArrayUtils(org.jkiss.utils.ArrayUtils) DriverDescriptor(org.jkiss.dbeaver.registry.driver.DriverDescriptor) StandardCharsets(java.nio.charset.StandardCharsets) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) java.io(java.io) DBException(org.jkiss.dbeaver.DBException) org.jkiss.dbeaver.model.connection(org.jkiss.dbeaver.model.connection) DBPDataSourceRegistry(org.jkiss.dbeaver.model.app.DBPDataSourceRegistry) ISecurePreferences(org.eclipse.equinox.security.storage.ISecurePreferences) DBWNetworkProfile(org.jkiss.dbeaver.model.net.DBWNetworkProfile) DBSObjectFilter(org.jkiss.dbeaver.model.struct.DBSObjectFilter) DriverDescriptor(org.jkiss.dbeaver.registry.driver.DriverDescriptor) DBVModel(org.jkiss.dbeaver.model.virtual.DBVModel) JsonWriter(com.google.gson.stream.JsonWriter) DBAAuthProfile(org.jkiss.dbeaver.model.access.DBAAuthProfile) DBWHandlerConfiguration(org.jkiss.dbeaver.model.net.DBWHandlerConfiguration)

Example 12 with DBWHandlerConfiguration

use of org.jkiss.dbeaver.model.net.DBWHandlerConfiguration in project dbeaver by serge-rider.

the class SSHTunnelConfiguratorUI method testTunnelConnection.

private void testTunnelConnection() {
    DBWHandlerConfiguration configuration = new DBWHandlerConfiguration(savedConfiguration);
    configuration.setProperties(Collections.emptyMap());
    saveSettings(configuration);
    DBPDataSourceContainer dataSource = configuration.getDataSource();
    if (dataSource != null) {
        configuration.resolveDynamicVariables(new DataSourceVariableResolver(dataSource, dataSource.getConnectionConfiguration()));
    } else {
        configuration.resolveDynamicVariables(SystemVariablesResolver.INSTANCE);
    }
    try {
        final String[] tunnelVersions = new String[2];
        UIUtils.runInProgressDialog(monitor -> {
            monitor.beginTask("Instantiate SSH tunnel", 2);
            SSHTunnelImpl tunnel = new SSHTunnelImpl();
            DBPConnectionConfiguration connectionConfig = new DBPConnectionConfiguration();
            connectionConfig.setHostName("localhost");
            connectionConfig.setHostPort(configuration.getStringProperty(DBWHandlerConfiguration.PROP_PORT));
            try {
                monitor.subTask("Initialize tunnel");
                tunnel.initializeHandler(monitor, DBWorkbench.getPlatform(), configuration, connectionConfig);
                monitor.worked(1);
                // Get info
                tunnelVersions[0] = tunnel.getImplementation().getClientVersion();
                tunnelVersions[1] = tunnel.getImplementation().getServerVersion();
                // Close it
                monitor.subTask("Close tunnel");
                tunnel.closeTunnel(monitor);
                monitor.worked(1);
            } catch (Exception e) {
                throw new InvocationTargetException(e);
            }
            monitor.done();
        });
        MessageDialog.openInformation(hostText.getShell(), ModelMessages.dialog_connection_wizard_start_connection_monitor_success, "Connected!\n\nClient version: " + tunnelVersions[0] + "\nServer version: " + tunnelVersions[1]);
    } catch (InvocationTargetException ex) {
        DBWorkbench.getPlatformUI().showError(CoreMessages.dialog_connection_wizard_start_dialog_error_title, null, GeneralUtils.makeExceptionStatus(ex.getTargetException()));
    }
}
Also used : DBPConnectionConfiguration(org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration) SSHTunnelImpl(org.jkiss.dbeaver.model.net.ssh.SSHTunnelImpl) DBWHandlerConfiguration(org.jkiss.dbeaver.model.net.DBWHandlerConfiguration) DBPDataSourceContainer(org.jkiss.dbeaver.model.DBPDataSourceContainer) DataSourceVariableResolver(org.jkiss.dbeaver.model.connection.DataSourceVariableResolver) InvocationTargetException(java.lang.reflect.InvocationTargetException) InvocationTargetException(java.lang.reflect.InvocationTargetException)

Example 13 with DBWHandlerConfiguration

use of org.jkiss.dbeaver.model.net.DBWHandlerConfiguration in project dbeaver by serge-rider.

the class NNAHDataSourceTunnel method getNodeActionToolTip.

@Override
public String getNodeActionToolTip(INavigatorModelView view, DBNNode node) {
    StringBuilder tip = new StringBuilder("Network handlers enabled:");
    for (DBWHandlerConfiguration handler : ((DBNDataSource) node).getDataSourceContainer().getConnectionConfiguration().getHandlers()) {
        if (handler.isEnabled()) {
            tip.append("\n  -").append(handler.getHandlerDescriptor().getLabel());
            String hostName = handler.getStringProperty(DBWHandlerConfiguration.PROP_HOST);
            if (!CommonUtils.isEmpty(hostName)) {
                tip.append(": ").append(hostName);
            }
        }
    }
    return tip.toString();
}
Also used : DBWHandlerConfiguration(org.jkiss.dbeaver.model.net.DBWHandlerConfiguration) DBNDataSource(org.jkiss.dbeaver.model.navigator.DBNDataSource)

Example 14 with DBWHandlerConfiguration

use of org.jkiss.dbeaver.model.net.DBWHandlerConfiguration in project dbeaver by serge-rider.

the class ConnectionPageNetworkHandler method enableHandlerContent.

protected void enableHandlerContent() {
    DBWHandlerConfiguration profileConfig = activeProfile == null ? null : activeProfile.getConfiguration(handlerDescriptor);
    boolean hasProfileConfig = profileConfig != null && profileConfig.isEnabled();
    if (handlerConfiguration.isEnabled() && !hasProfileConfig) {
        if (blockEnableState != null) {
            blockEnableState.restore();
            blockEnableState = null;
        }
    } else if (blockEnableState == null) {
        blockEnableState = ControlEnableState.disable(handlerComposite);
    }
    useHandlerCheck.setEnabled(!hasProfileConfig);
}
Also used : DBWHandlerConfiguration(org.jkiss.dbeaver.model.net.DBWHandlerConfiguration)

Example 15 with DBWHandlerConfiguration

use of org.jkiss.dbeaver.model.net.DBWHandlerConfiguration in project dbeaver by serge-rider.

the class ConnectionPageNetworkHandler method setConnectionConfigProfile.

private void setConnectionConfigProfile(String profileName) {
    activeProfile = CommonUtils.isEmpty(profileName) ? null : site.getProject().getDataSourceRegistry().getNetworkProfile(profileName);
    DBPDataSourceContainer dataSource = site.getActiveDataSource();
    DBPConnectionConfiguration cfg = dataSource.getConnectionConfiguration();
    String oldProfileId = cfg.getConfigProfileName();
    saveSettings(site.getActiveDataSource());
    if (activeProfile != null) {
        cfg.setConfigProfile(activeProfile);
        handlerConfiguration = cfg.getHandler(handlerDescriptor.getId());
        if (handlerConfiguration == null) {
            handlerConfiguration = new DBWHandlerConfiguration(handlerDescriptor, dataSource);
        }
    } else {
        cfg.setConfigProfile(null);
    }
    site.firePropertyChange(this, PROP_CONFIG_PROFILE, oldProfileId, activeProfile == null ? null : activeProfile.getProfileName());
}
Also used : DBPConnectionConfiguration(org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration) DBWHandlerConfiguration(org.jkiss.dbeaver.model.net.DBWHandlerConfiguration) DBPDataSourceContainer(org.jkiss.dbeaver.model.DBPDataSourceContainer)

Aggregations

DBWHandlerConfiguration (org.jkiss.dbeaver.model.net.DBWHandlerConfiguration)64 DBException (org.jkiss.dbeaver.DBException)20 DBPDataSourceContainer (org.jkiss.dbeaver.model.DBPDataSourceContainer)12 DBPConnectionConfiguration (org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration)12 NetworkHandlerDescriptor (org.jkiss.dbeaver.registry.network.NetworkHandlerDescriptor)12 SQLException (java.sql.SQLException)8 DBWNetworkProfile (org.jkiss.dbeaver.model.net.DBWNetworkProfile)8 DBRShellCommand (org.jkiss.dbeaver.model.runtime.DBRShellCommand)8 SelectionAdapter (org.eclipse.swt.events.SelectionAdapter)6 SelectionEvent (org.eclipse.swt.events.SelectionEvent)6 GridData (org.eclipse.swt.layout.GridData)6 GridLayout (org.eclipse.swt.layout.GridLayout)6 Nullable (org.jkiss.code.Nullable)6 DBPDataSourceOrigin (org.jkiss.dbeaver.model.DBPDataSourceOrigin)6 DBPDriver (org.jkiss.dbeaver.model.connection.DBPDriver)6 SimplePreferenceStore (org.jkiss.dbeaver.model.impl.preferences.SimplePreferenceStore)6 UIPropertyConfiguratorDescriptor (org.jkiss.dbeaver.registry.configurator.UIPropertyConfiguratorDescriptor)6 TypeToken (com.google.gson.reflect.TypeToken)4 MalformedURLException (java.net.MalformedURLException)4 ArrayList (java.util.ArrayList)4