提交 6495f5c3 编写于 作者: S Serge Rider

#6745 model refactoring + datasource variables resolver enhancement

上级 04138b60
......@@ -39,6 +39,7 @@ import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl;
import org.jkiss.dbeaver.model.impl.local.LocalResultSet;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.runtime.IVariableResolver;
import org.jkiss.dbeaver.runtime.jobs.DataSourceJob;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.editors.sql.dialogs.GenerateMultiSQLDialog;
......@@ -73,7 +74,7 @@ public abstract class ExasolBaseTableToolDialog
protected String replaceVars(String input, final ExasolTableBase table)
{
String outString = GeneralUtils.replaceVariables(input, new GeneralUtils.IVariableResolver() {
String outString = GeneralUtils.replaceVariables(input, new IVariableResolver() {
@Override
public String get(String name) {
switch (name) {
......
......@@ -26,13 +26,14 @@ import org.eclipse.ui.IWorkbench;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.ext.mysql.MySQLConstants;
import org.jkiss.dbeaver.ext.mysql.MySQLDataSourceProvider;
import org.jkiss.dbeaver.ext.mysql.ui.internal.MySQLUIMessages;
import org.jkiss.dbeaver.ext.mysql.MySQLServerHome;
import org.jkiss.dbeaver.ext.mysql.model.MySQLTableBase;
import org.jkiss.dbeaver.ext.mysql.ui.internal.MySQLUIMessages;
import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.runtime.IVariableResolver;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.dialogs.DialogUtils;
import org.jkiss.dbeaver.ui.dialogs.tools.AbstractImportExportWizard;
......@@ -252,7 +253,7 @@ class MySQLExportWizard extends AbstractImportExportWizard<MySQLDatabaseExportIn
{
super.startProcessHandler(monitor, arg, processBuilder, process);
String outFileName = GeneralUtils.replaceVariables(outputFilePattern, new GeneralUtils.IVariableResolver() {
String outFileName = GeneralUtils.replaceVariables(outputFilePattern, new IVariableResolver() {
@Override
public String get(String name) {
switch (name) {
......
......@@ -157,7 +157,7 @@ class PostgreFDWConfigWizardPageConfig extends ActiveWizardPage<PostgreFDWConfig
PostgreFDWConfigWizard.FDWInfo selectedFDW = getWizard().getSelectedFDW();
PropertySourceCustom propertySource = getWizard().getFdwPropertySource();
propertySource.setDefValueResolver(targetDataSource.getVariablesResolver());
propertySource.setDefValueResolver(targetDataSource.getVariablesResolver(false));
propertySource.removeAll();
if (selectedFDW != null && selectedFDW.fdwDescriptor != null) {
propertySource.addProperties(selectedFDW.fdwDescriptor.getProperties());
......
......@@ -34,7 +34,7 @@ import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.model.struct.DBSObjectFilter;
import org.jkiss.dbeaver.model.virtual.DBVModel;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.dbeaver.runtime.IVariableResolver;
import java.util.Collection;
import java.util.Date;
......@@ -202,7 +202,11 @@ public interface DBPDataSourceContainer extends DBSObject, DBDPreferences, DBPNa
Date getConnectTime();
GeneralUtils.IVariableResolver getVariablesResolver();
/**
* Make variable resolver for datasource properties.
* @param actualConfig if true then actual connection config will be used (e.g. with preprocessed host/port values).
*/
IVariableResolver getVariablesResolver(boolean actualConfig);
DBPDataSourceContainer createCopy(DBPDataSourceRegistry forRegistry);
......
......@@ -196,7 +196,7 @@ public final class DBUtils {
}
@NotNull
public static String getFullQualifiedName(@NotNull DBPDataSource dataSource, @NotNull DBPNamedObject ... path)
public static String getFullQualifiedName(@Nullable DBPDataSource dataSource, @NotNull DBPNamedObject ... path)
{
StringBuilder name = new StringBuilder(20 * path.length);
if (!(dataSource instanceof SQLDataSource)) {
......@@ -1812,7 +1812,7 @@ public final class DBUtils {
public static String getClientApplicationName(DBPDataSourceContainer container, String purpose) {
if (container.getPreferenceStore().getBoolean(ModelPreferences.META_CLIENT_NAME_OVERRIDE)) {
String appName = container.getPreferenceStore().getString(ModelPreferences.META_CLIENT_NAME_VALUE);
return GeneralUtils.replaceVariables(appName, container.getVariablesResolver());
return GeneralUtils.replaceVariables(appName, container.getVariablesResolver(false));
}
final String productTitle = GeneralUtils.getProductTitle();
return purpose == null ? productTitle : productTitle + " - " + purpose;
......
......@@ -18,9 +18,8 @@ package org.jkiss.dbeaver.model.impl;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.connection.DBPConnectionBootstrap;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBPNamedObject;
import org.jkiss.dbeaver.model.connection.DBPConnectionBootstrap;
import org.jkiss.dbeaver.model.exec.*;
import org.jkiss.dbeaver.model.qm.QMUtils;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
......@@ -91,7 +90,7 @@ public abstract class AbstractExecutionContext<DATASOURCE extends DBPDataSource>
try (DBCSession session = openSession(monitor, DBCExecutionPurpose.UTIL, "Run bootstrap queries")) {
for (String query : initQueries) {
// Replace variables
query = GeneralUtils.replaceVariables(query, getDataSource().getContainer().getVariablesResolver());
query = GeneralUtils.replaceVariables(query, getDataSource().getContainer().getVariablesResolver(true));
try {
try (DBCStatement dbStat = session.prepareStatement(DBCStatementType.SCRIPT, query, false, false, false)) {
dbStat.executeStatement();
......
......@@ -18,6 +18,7 @@
package org.jkiss.dbeaver.model.runtime;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.runtime.IVariableResolver;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.CommonUtils;
import org.jkiss.utils.IOUtils;
......@@ -43,7 +44,7 @@ public class DBRProcessDescriptor
this(command, null);
}
public DBRProcessDescriptor(final DBRShellCommand command, final GeneralUtils.IVariableResolver variablesResolver)
public DBRProcessDescriptor(final DBRShellCommand command, final IVariableResolver variablesResolver)
{
this.command = command;
String commandLine = variablesResolver == null ?
......
......@@ -17,13 +17,13 @@
package org.jkiss.dbeaver.model.sql.eval;
import org.jkiss.dbeaver.model.sql.SQLScriptContext;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.dbeaver.runtime.IVariableResolver;
import org.jkiss.utils.CommonUtils;
/**
* ScriptVariablesResolver
*/
public class ScriptVariablesResolver implements GeneralUtils.IVariableResolver {
public class ScriptVariablesResolver implements IVariableResolver {
private final SQLScriptContext scriptContext;
......
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2019 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jkiss.dbeaver.runtime;
/**
* Resolves variable value
*/
@FunctionalInterface
public interface IVariableResolver {
String get(String name);
}
......@@ -20,6 +20,7 @@ import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.model.preferences.DBPPropertyDescriptor;
import org.jkiss.dbeaver.model.preferences.DBPPropertySource;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.runtime.IVariableResolver;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.CommonUtils;
......@@ -35,7 +36,7 @@ public class PropertySourceCustom implements DBPPropertySource {
private Map<Object, Object> originalValues = new TreeMap<>();
private Map<Object, Object> propValues = new TreeMap<>();
private Map<Object,Object> defaultValues = new TreeMap<>();
private GeneralUtils.IVariableResolver defValueResolver = null;
private IVariableResolver defValueResolver = null;
public PropertySourceCustom()
{
......@@ -53,7 +54,7 @@ public class PropertySourceCustom implements DBPPropertySource {
setValues(values);
}
public void setDefValueResolver(GeneralUtils.IVariableResolver defValueResolver) {
public void setDefValueResolver(IVariableResolver defValueResolver) {
this.defValueResolver = defValueResolver;
}
......
......@@ -25,6 +25,7 @@ import org.jkiss.dbeaver.ModelPreferences;
import org.jkiss.dbeaver.bundle.ModelActivator;
import org.jkiss.dbeaver.model.impl.app.ApplicationDescriptor;
import org.jkiss.dbeaver.model.impl.app.ApplicationRegistry;
import org.jkiss.dbeaver.runtime.IVariableResolver;
import org.jkiss.utils.Base64;
import org.jkiss.utils.CommonUtils;
import org.jkiss.utils.StandardConstants;
......@@ -377,10 +378,6 @@ public class GeneralUtils {
return divPos == -1 ? message : message.substring(divPos + 1);
}
public interface IVariableResolver {
String get(String name);
}
public interface IParameterHandler {
boolean setParameter(String name, String value);
}
......
......@@ -18,11 +18,11 @@
package org.jkiss.dbeaver.utils;
import org.eclipse.core.runtime.Platform;
import org.jkiss.dbeaver.runtime.IVariableResolver;
import org.jkiss.utils.StandardConstants;
import java.io.File;
import java.net.InetAddress;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.Locale;
......@@ -30,7 +30,7 @@ import java.util.Locale;
/**
* SystemVariablesResolver
*/
public class SystemVariablesResolver implements GeneralUtils.IVariableResolver {
public class SystemVariablesResolver implements IVariableResolver {
public static SystemVariablesResolver INSTANCE = new SystemVariablesResolver();
......
......@@ -53,9 +53,9 @@ import org.jkiss.dbeaver.registry.driver.DriverDescriptor;
import org.jkiss.dbeaver.registry.formatter.DataFormatterProfile;
import org.jkiss.dbeaver.registry.internal.RegistryMessages;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.runtime.IVariableResolver;
import org.jkiss.dbeaver.runtime.TasksJob;
import org.jkiss.dbeaver.runtime.properties.PropertyCollector;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.dbeaver.utils.SystemVariablesResolver;
import org.jkiss.utils.CommonUtils;
......@@ -946,7 +946,7 @@ public class DataSourceDescriptor
DBPConnectionConfiguration info = getActualConnectionConfiguration();
DBRShellCommand command = info.getEvent(eventType);
if (command != null && command.isEnabled()) {
final DBRProcessDescriptor processDescriptor = new DBRProcessDescriptor(command, getVariablesResolver());
final DBRProcessDescriptor processDescriptor = new DBRProcessDescriptor(command, getVariablesResolver(true));
monitor.subTask("Execute process " + processDescriptor.getName());
DBWorkbench.getPlatformUI().executeProcess(processDescriptor);
......@@ -1421,22 +1421,23 @@ public class DataSourceDescriptor
}
@Override
public GeneralUtils.IVariableResolver getVariablesResolver() {
public IVariableResolver getVariablesResolver(boolean actualConfig) {
return name -> {
String propValue = getActualConnectionConfiguration().getProperties().get(name);
DBPConnectionConfiguration configuration = actualConfig ? getActualConnectionConfiguration() : getConnectionConfiguration();
String propValue = configuration.getProperties().get(name);
if (propValue != null) {
return propValue;
}
name = name.toLowerCase(Locale.ENGLISH);
switch (name) {
case DBPConnectionConfiguration.VARIABLE_HOST: return getActualConnectionConfiguration().getHostName();
case DBPConnectionConfiguration.VARIABLE_PORT: return getActualConnectionConfiguration().getHostPort();
case DBPConnectionConfiguration.VARIABLE_SERVER: return getActualConnectionConfiguration().getServerName();
case DBPConnectionConfiguration.VARIABLE_DATABASE: return getActualConnectionConfiguration().getDatabaseName();
case DBPConnectionConfiguration.VARIABLE_USER: return getActualConnectionConfiguration().getUserName();
case DBPConnectionConfiguration.VARIABLE_PASSWORD: return getActualConnectionConfiguration().getUserPassword();
case DBPConnectionConfiguration.VARIABLE_URL: return getActualConnectionConfiguration().getUrl();
case DBPConnectionConfiguration.VARIABLE_HOST: return configuration.getHostName();
case DBPConnectionConfiguration.VARIABLE_PORT: return configuration.getHostPort();
case DBPConnectionConfiguration.VARIABLE_SERVER: return configuration.getServerName();
case DBPConnectionConfiguration.VARIABLE_DATABASE: return configuration.getDatabaseName();
case DBPConnectionConfiguration.VARIABLE_USER: return configuration.getUserName();
case DBPConnectionConfiguration.VARIABLE_PASSWORD: return configuration.getUserPassword();
case DBPConnectionConfiguration.VARIABLE_URL: return configuration.getUrl();
default: return SystemVariablesResolver.INSTANCE.get(name);
}
};
......
......@@ -20,6 +20,7 @@ import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.runtime.IVariableResolver;
import org.jkiss.dbeaver.runtime.WebUtils;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.dbeaver.utils.RuntimeUtils;
......@@ -59,7 +60,7 @@ public class MavenArtifactVersion implements IMavenIdentifier {
private final List<MavenProfile> profiles = new ArrayList<>();
private final List<MavenRepository> repositories = new ArrayList<>();
private GeneralUtils.IVariableResolver propertyResolver = new GeneralUtils.IVariableResolver() {
private IVariableResolver propertyResolver = new IVariableResolver() {
@Override
public String get(String name) {
switch (name) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册