Search in sources :

Example 6 with DBPDataSourceFolder

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

the class DataSourceDescriptorManager method createNewObject.

@Override
public DataSourceDescriptor createNewObject(DBRProgressMonitor monitor, DBECommandContext commandContext, Object container, Object copyFrom, Map<String, Object> options) {
    if (copyFrom != null) {
        DataSourceDescriptor dsTpl = (DataSourceDescriptor) copyFrom;
        DBPDataSourceRegistry registry;
        DBPDataSourceFolder folder = null;
        if (container instanceof DataSourceRegistry) {
            registry = (DBPDataSourceRegistry) container;
        } else if (container instanceof DBPProject) {
            registry = ((DBPProject) container).getDataSourceRegistry();
        } else if (container instanceof DBPDataSourceFolder) {
            folder = (DBPDataSourceFolder) container;
            registry = folder.getDataSourceRegistry();
        } else {
            registry = dsTpl.getRegistry();
        }
        DataSourceDescriptor dataSource = new DataSourceDescriptor(registry, DataSourceDescriptor.generateNewId(dsTpl.getDriver()), dsTpl.getDriver(), new DBPConnectionConfiguration(dsTpl.getConnectionConfiguration()));
        dataSource.copyFrom(dsTpl);
        if (folder != null) {
            dataSource.setFolder(folder);
        } else if (dsTpl.getRegistry() == registry) {
            // Copy folder only if we copy in the same project
            dataSource.setFolder(dsTpl.getFolder());
        }
        // Generate new name
        String origName = dsTpl.getName();
        String newName = origName;
        for (int i = 0; ; i++) {
            if (registry.findDataSourceByName(newName) == null) {
                break;
            }
            newName = origName + " " + (i + 1);
        }
        dataSource.setName(newName);
        registry.addDataSource(dataSource);
    } else {
        UIUtils.asyncExec(() -> NewConnectionDialog.openNewConnectionDialog(UIUtils.getActiveWorkbenchWindow()));
    }
    return null;
}
Also used : DBPConnectionConfiguration(org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration) DBPDataSourceRegistry(org.jkiss.dbeaver.model.app.DBPDataSourceRegistry) DBPDataSourceFolder(org.jkiss.dbeaver.model.DBPDataSourceFolder) DBPProject(org.jkiss.dbeaver.model.app.DBPProject) DBPDataSourceRegistry(org.jkiss.dbeaver.model.app.DBPDataSourceRegistry)

Example 7 with DBPDataSourceFolder

use of org.jkiss.dbeaver.model.DBPDataSourceFolder in project dbeaver by dbeaver.

the class DataSourceDescriptorManager method createNewObject.

@Override
public DataSourceDescriptor createNewObject(DBRProgressMonitor monitor, DBECommandContext commandContext, Object container, Object copyFrom, Map<String, Object> options) {
    if (copyFrom != null) {
        DataSourceDescriptor dsTpl = (DataSourceDescriptor) copyFrom;
        DBPDataSourceRegistry registry;
        DBPDataSourceFolder folder = null;
        if (container instanceof DataSourceRegistry) {
            registry = (DBPDataSourceRegistry) container;
        } else if (container instanceof DBPProject) {
            registry = ((DBPProject) container).getDataSourceRegistry();
        } else if (container instanceof DBPDataSourceFolder) {
            folder = (DBPDataSourceFolder) container;
            registry = folder.getDataSourceRegistry();
        } else {
            registry = dsTpl.getRegistry();
        }
        DataSourceDescriptor dataSource = new DataSourceDescriptor(registry, DataSourceDescriptor.generateNewId(dsTpl.getDriver()), dsTpl.getDriver(), new DBPConnectionConfiguration(dsTpl.getConnectionConfiguration()));
        dataSource.copyFrom(dsTpl);
        if (folder != null) {
            dataSource.setFolder(folder);
        } else if (dsTpl.getRegistry() == registry) {
            // Copy folder only if we copy in the same project
            dataSource.setFolder(dsTpl.getFolder());
        }
        // Generate new name
        String origName = dsTpl.getName();
        String newName = origName;
        for (int i = 0; ; i++) {
            if (registry.findDataSourceByName(newName) == null) {
                break;
            }
            newName = origName + " " + (i + 1);
        }
        dataSource.setName(newName);
        registry.addDataSource(dataSource);
    } else {
        UIUtils.asyncExec(() -> NewConnectionDialog.openNewConnectionDialog(UIUtils.getActiveWorkbenchWindow()));
    }
    return null;
}
Also used : DBPConnectionConfiguration(org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration) DBPDataSourceRegistry(org.jkiss.dbeaver.model.app.DBPDataSourceRegistry) DBPDataSourceFolder(org.jkiss.dbeaver.model.DBPDataSourceFolder) DBPProject(org.jkiss.dbeaver.model.app.DBPProject) DBPDataSourceRegistry(org.jkiss.dbeaver.model.app.DBPDataSourceRegistry)

Example 8 with DBPDataSourceFolder

use of org.jkiss.dbeaver.model.DBPDataSourceFolder in project dbeaver by dbeaver.

the class SQLEditorUtils method createNewScript.

public static IFile createNewScript(DBPProject project, @Nullable IFolder folder, @NotNull SQLNavigatorContext navigatorContext) throws CoreException {
    final IProgressMonitor progressMonitor = new NullProgressMonitor();
    // Get folder
    final IFolder scriptsRootFolder = getScriptsFolder(project, true);
    IFolder scriptsFolder = folder;
    if (scriptsFolder == null) {
        scriptsFolder = scriptsRootFolder;
    }
    if (!scriptsFolder.exists()) {
        scriptsFolder.create(true, true, new NullProgressMonitor());
    }
    if (CommonUtils.equalObjects(scriptsRootFolder, scriptsFolder)) {
        // We are in the root folder
        DBPDataSourceContainer dataSourceContainer = navigatorContext.getDataSourceContainer();
        if (dataSourceContainer != null) {
            if (dataSourceContainer.getPreferenceStore().getBoolean(SQLPreferenceConstants.SCRIPT_CREATE_CONNECTION_FOLDERS)) {
                // Create script folders according to connection folders
                DBPDataSourceFolder conFolder = dataSourceContainer.getFolder();
                if (conFolder != null) {
                    List<DBPDataSourceFolder> conFolders = new ArrayList<>();
                    for (DBPDataSourceFolder f = conFolder; f != null; f = f.getParent()) {
                        conFolders.add(0, f);
                    }
                    for (DBPDataSourceFolder f : conFolders) {
                        IFolder dbFolder = scriptsFolder.getFolder(CommonUtils.escapeFileName(f.getName()));
                        if (dbFolder != null) {
                            if (!dbFolder.exists()) {
                                dbFolder.create(true, true, progressMonitor);
                            }
                            scriptsFolder = dbFolder;
                        }
                    }
                }
            }
            if (dataSourceContainer.getPreferenceStore().getBoolean(SQLPreferenceConstants.SCRIPT_AUTO_FOLDERS)) {
                // Create special folder for connection
                IFolder dbFolder = scriptsFolder.getFolder(CommonUtils.escapeFileName(dataSourceContainer.getName()));
                if (dbFolder != null) {
                    if (!dbFolder.exists()) {
                        dbFolder.create(true, true, progressMonitor);
                    }
                    scriptsFolder = dbFolder;
                }
            }
        }
    }
    // Make new script file
    IFile tempFile = ContentUtils.getUniqueFile(scriptsFolder, "Script", SCRIPT_FILE_EXTENSION);
    tempFile.create(new ByteArrayInputStream(new byte[] {}), true, progressMonitor);
    // Save ds container reference
    if (navigatorContext.getDataSourceContainer() != null) {
        EditorUtils.setFileDataSource(tempFile, navigatorContext);
    }
    return tempFile;
}
Also used : IFile(org.eclipse.core.resources.IFile) ByteArrayInputStream(java.io.ByteArrayInputStream) DBPDataSourceFolder(org.jkiss.dbeaver.model.DBPDataSourceFolder) ArrayList(java.util.ArrayList) DBPDataSourceContainer(org.jkiss.dbeaver.model.DBPDataSourceContainer) IFolder(org.eclipse.core.resources.IFolder)

Example 9 with DBPDataSourceFolder

use of org.jkiss.dbeaver.model.DBPDataSourceFolder in project dbeaver by dbeaver.

the class NavigatorHandlerLocalFolderCreate method createFolder.

public static boolean createFolder(IWorkbenchWindow workbenchWindow, IWorkbenchPart activePart, DBNProjectDatabases databases, final DBNLocalFolder parentFolder, final Collection<DBNDataSource> nodes, String newName) {
    if (newName == null) {
        newName = EnterNameDialog.chooseName(workbenchWindow.getShell(), "Folder name");
    }
    if (CommonUtils.isEmpty(newName)) {
        return false;
    }
    // Create folder and refresh databases root
    // DS container will reload folders on refresh
    final DBPDataSourceRegistry dsRegistry = databases.getDataSourceRegistry();
    DBPDataSourceFolder folder = dsRegistry.addFolder(parentFolder == null ? null : parentFolder.getFolder(), newName);
    for (DBNDataSource node : nodes) {
        node.setFolder(folder);
    }
    if (parentFolder != null && activePart instanceof NavigatorViewBase) {
        final TreeViewer viewer = ((NavigatorViewBase) activePart).getNavigatorViewer();
        if (viewer != null) {
            UIUtils.asyncExec(() -> viewer.expandToLevel(parentFolder, 1));
        }
    }
    DBNModel.updateConfigAndRefreshDatabases(databases);
    return true;
}
Also used : DBNDataSource(org.jkiss.dbeaver.model.navigator.DBNDataSource) TreeViewer(org.eclipse.jface.viewers.TreeViewer) DBPDataSourceFolder(org.jkiss.dbeaver.model.DBPDataSourceFolder) NavigatorViewBase(org.jkiss.dbeaver.ui.navigator.database.NavigatorViewBase) DBPDataSourceRegistry(org.jkiss.dbeaver.model.app.DBPDataSourceRegistry)

Example 10 with DBPDataSourceFolder

use of org.jkiss.dbeaver.model.DBPDataSourceFolder in project dbeaver by dbeaver.

the class DataSourceUtils method getDataSourceBySpec.

public static DBPDataSourceContainer getDataSourceBySpec(@NotNull DBPProject project, @NotNull String connectionSpec, @Nullable GeneralUtils.IParameterHandler parameterHandler, boolean searchByParameters, boolean createNewDataSource) {
    String driverName = null, url = null, host = null, port = null, server = null, database = null, user = null, password = null, authModelId = null;
    boolean showSystemObjects = false, showUtilityObjects = false, showOnlyEntities = false, hideFolders = false, hideSchemas = false, mergeEntities = false, savePassword = true;
    Boolean autoCommit = null;
    Map<String, String> conProperties = new HashMap<>();
    Map<String, Map<String, String>> handlerProps = new HashMap<>();
    Map<String, String> authProperties = new HashMap<>();
    DBPDataSourceFolder folder = null;
    String dsId = null, dsName = null;
    DBPDataSourceRegistry dsRegistry = project == null ? null : project.getDataSourceRegistry();
    if (dsRegistry == null) {
        log.debug("No datasource registry for project '" + project.getName() + "'");
        return null;
    }
    String[] conParams = connectionSpec.split("\\|");
    for (String cp : conParams) {
        int divPos = cp.indexOf('=');
        if (divPos == -1) {
            continue;
        }
        String paramName = cp.substring(0, divPos);
        String paramValue = cp.substring(divPos + 1);
        switch(paramName) {
            case PARAM_ID:
                dsId = paramValue;
                break;
            case PARAM_DRIVER:
                driverName = paramValue;
                break;
            case PARAM_NAME:
                dsName = paramValue;
                break;
            case PARAM_URL:
                url = paramValue;
                break;
            case PARAM_HOST:
                host = paramValue;
                break;
            case PARAM_PORT:
                port = paramValue;
                break;
            case PARAM_SERVER:
                server = paramValue;
                break;
            case PARAM_DATABASE:
                database = paramValue;
                break;
            case PARAM_USER:
                user = paramValue;
                break;
            case PARAM_PASSWORD:
                password = paramValue;
                break;
            case PARAM_AUTH_MODEL:
                authModelId = paramValue;
                break;
            case PARAM_SAVE_PASSWORD:
                savePassword = CommonUtils.toBoolean(paramValue);
                break;
            case PARAM_SHOW_SYSTEM_OBJECTS:
                showSystemObjects = CommonUtils.toBoolean(paramValue);
                break;
            case PARAM_SHOW_UTILITY_OBJECTS:
                showUtilityObjects = CommonUtils.toBoolean(paramValue);
                break;
            case PARAM_SHOW_ONLY_ENTITIES:
                showOnlyEntities = CommonUtils.toBoolean(paramValue);
                break;
            case PARAM_HIDE_FOLDERS:
                hideFolders = CommonUtils.toBoolean(paramValue);
                break;
            case PARAM_HIDE_SCHEMAS:
                hideSchemas = CommonUtils.toBoolean(paramValue);
                break;
            case PARAM_MERGE_ENTITIES:
                mergeEntities = CommonUtils.toBoolean(paramValue);
                break;
            case PARAM_FOLDER:
                folder = dsRegistry.getFolder(paramValue);
                break;
            case PARAM_AUTO_COMMIT:
                autoCommit = CommonUtils.toBoolean(paramValue);
                break;
            default:
                boolean handled = false;
                if (paramName.length() > PREFIX_PROP.length() && paramName.startsWith(PREFIX_PROP)) {
                    paramName = paramName.substring(PREFIX_PROP.length());
                    conProperties.put(paramName, paramValue);
                    handled = true;
                } else if (paramName.length() > PREFIX_AUTH_PROP.length() && paramName.startsWith(PREFIX_AUTH_PROP)) {
                    paramName = paramName.substring(PREFIX_AUTH_PROP.length());
                    authProperties.put(paramName, paramValue);
                    handled = true;
                } else if (paramName.length() > PREFIX_HANDLER.length() && paramName.startsWith(PREFIX_HANDLER)) {
                    // network handler prop
                    paramName = paramName.substring(PREFIX_HANDLER.length());
                    divPos = paramName.indexOf('.');
                    if (divPos == -1) {
                        log.debug("Wrong handler parameter: '" + paramName + "'");
                        continue;
                    }
                    String handlerId = paramName.substring(0, divPos);
                    paramName = paramName.substring(divPos + 1);
                    Map<String, String> handlerPopMap = handlerProps.computeIfAbsent(handlerId, k -> new HashMap<>());
                    handlerPopMap.put(paramName, paramValue);
                    handled = true;
                } else if (parameterHandler != null) {
                    handled = parameterHandler.setParameter(paramName, paramValue);
                }
                if (!handled) {
                    log.debug("Unknown connection parameter '" + paramName + "'");
                }
        }
    }
    DBPDataSourceContainer dataSource = null;
    if (dsId != null) {
        dataSource = dsRegistry.getDataSource(dsId);
    }
    if (dsName != null) {
        dataSource = dsRegistry.findDataSourceByName(dsName);
    }
    if (dataSource != null) {
        DBPConnectionConfiguration connConfig = dataSource.getConnectionConfiguration();
        if (!CommonUtils.isEmpty(database))
            connConfig.setDatabaseName(database);
        if (!CommonUtils.isEmpty(user))
            connConfig.setUserName(user);
        if (!CommonUtils.isEmpty(password))
            connConfig.setUserPassword(password);
        if (!CommonUtils.isEmpty(conProperties))
            connConfig.setProperties(conProperties);
        if (!CommonUtils.isEmpty(authProperties))
            connConfig.setAuthProperties(authProperties);
        if (!CommonUtils.isEmpty(authModelId))
            connConfig.setAuthModelId(authModelId);
        return dataSource;
    }
    if (searchByParameters) {
        // Try to find by parameters / handler props
        if (url != null) {
            for (DBPDataSourceContainer ds : dsRegistry.getDataSources()) {
                if (url.equals(ds.getConnectionConfiguration().getUrl())) {
                    if (user == null || user.equals(ds.getConnectionConfiguration().getUserName())) {
                        return ds;
                    }
                }
            }
        } else {
            for (DBPDataSourceContainer ds : dsRegistry.getDataSources()) {
                DBPConnectionConfiguration cfg = ds.getConnectionConfiguration();
                if (server != null && !server.equals(cfg.getServerName()) || host != null && !host.equals(cfg.getHostName()) || port != null && !port.equals(cfg.getHostPort()) || database != null && !database.equals(cfg.getDatabaseName()) || user != null && !user.equals(cfg.getUserName())) {
                    continue;
                }
                boolean matched = true;
                if (!conProperties.isEmpty()) {
                    for (Map.Entry<String, String> prop : conProperties.entrySet()) {
                        if (!CommonUtils.equalObjects(cfg.getProperty(prop.getKey()), prop.getValue())) {
                            matched = false;
                            break;
                        }
                    }
                    if (!matched) {
                        continue;
                    }
                }
                if (!handlerProps.isEmpty()) {
                    for (Map.Entry<String, Map<String, String>> handlerProp : handlerProps.entrySet()) {
                        DBWHandlerConfiguration handler = cfg.getHandler(handlerProp.getKey());
                        if (handler == null) {
                            matched = false;
                            break;
                        }
                        for (Map.Entry<String, String> prop : handlerProp.getValue().entrySet()) {
                            if (!CommonUtils.equalObjects(handler.getProperty(prop.getKey()), prop.getValue())) {
                                matched = false;
                                break;
                            }
                        }
                        if (!matched) {
                            break;
                        }
                    }
                    if (!matched) {
                        continue;
                    }
                }
                return ds;
            }
        }
    }
    if (!createNewDataSource) {
        return null;
    }
    if (driverName == null) {
        log.error("Driver name not specified - can't create new datasource");
        return null;
    }
    DBPDriver driver = DBWorkbench.getPlatform().getDataSourceProviderRegistry().findDriver(driverName);
    if (driver == null) {
        log.error("Driver '" + driverName + "' not found");
        return null;
    }
    // Create new datasource with specified parameters
    if (dsName == null) {
        dsName = "Ext: " + driver.getName();
        if (database != null) {
            dsName += " - " + database;
        } else if (server != null) {
            dsName += " - " + server;
        }
    }
    DBPConnectionConfiguration connConfig = new DBPConnectionConfiguration();
    connConfig.setUrl(url);
    connConfig.setHostName(host);
    connConfig.setHostPort(port);
    connConfig.setServerName(server);
    connConfig.setDatabaseName(database);
    connConfig.setUserName(user);
    connConfig.setUserPassword(password);
    connConfig.setProperties(conProperties);
    if (!CommonUtils.isEmpty(authProperties)) {
        connConfig.setAuthProperties(authProperties);
    }
    if (!CommonUtils.isEmpty(authModelId)) {
        connConfig.setAuthModelId(authModelId);
    }
    if (autoCommit != null) {
        connConfig.getBootstrap().setDefaultAutoCommit(autoCommit);
    }
    DBPDataSourceContainer newDS = dsRegistry.createDataSource(driver, connConfig);
    newDS.setName(dsName);
    ((DataSourceDescriptor) newDS).setTemporary(true);
    if (savePassword) {
        newDS.setSavePassword(true);
    }
    if (folder != null) {
        newDS.setFolder(folder);
    }
    DataSourceNavigatorSettings navSettings = ((DataSourceDescriptor) newDS).getNavigatorSettings();
    navSettings.setShowSystemObjects(showSystemObjects);
    navSettings.setShowUtilityObjects(showUtilityObjects);
    navSettings.setShowOnlyEntities(showOnlyEntities);
    navSettings.setHideSchemas(hideSchemas);
    navSettings.setHideFolders(hideFolders);
    navSettings.setMergeEntities(mergeEntities);
    // ds.set
    dsRegistry.addDataSource(newDS);
    return newDS;
}
Also used : HashMap(java.util.HashMap) DBPConnectionConfiguration(org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration) DBWHandlerConfiguration(org.jkiss.dbeaver.model.net.DBWHandlerConfiguration) DBPDriver(org.jkiss.dbeaver.model.connection.DBPDriver) DBPDataSourceFolder(org.jkiss.dbeaver.model.DBPDataSourceFolder) DBPDataSourceRegistry(org.jkiss.dbeaver.model.app.DBPDataSourceRegistry) HashMap(java.util.HashMap) Map(java.util.Map) DBPDataSourceContainer(org.jkiss.dbeaver.model.DBPDataSourceContainer)

Aggregations

DBPDataSourceFolder (org.jkiss.dbeaver.model.DBPDataSourceFolder)16 DBPDataSourceRegistry (org.jkiss.dbeaver.model.app.DBPDataSourceRegistry)10 DBPConnectionConfiguration (org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration)7 TreeViewer (org.eclipse.jface.viewers.TreeViewer)4 DBPDataSourceContainer (org.jkiss.dbeaver.model.DBPDataSourceContainer)4 DBNDataSource (org.jkiss.dbeaver.model.navigator.DBNDataSource)4 NavigatorViewBase (org.jkiss.dbeaver.ui.navigator.database.NavigatorViewBase)4 ByteArrayInputStream (java.io.ByteArrayInputStream)3 ArrayList (java.util.ArrayList)3 HashMap (java.util.HashMap)3 IFile (org.eclipse.core.resources.IFile)3 IFolder (org.eclipse.core.resources.IFolder)3 Map (java.util.Map)2 SelectionAdapter (org.eclipse.swt.events.SelectionAdapter)2 SelectionEvent (org.eclipse.swt.events.SelectionEvent)2 Point (org.eclipse.swt.graphics.Point)2 GridData (org.eclipse.swt.layout.GridData)2 DBPProject (org.jkiss.dbeaver.model.app.DBPProject)2 DBPDriver (org.jkiss.dbeaver.model.connection.DBPDriver)2 DBWHandlerConfiguration (org.jkiss.dbeaver.model.net.DBWHandlerConfiguration)2