未验证 提交 c16995d3 编写于 作者: S ShadelessFox

#12389 Add time components variables for native tools + data transfer

上级 c93f31a1
......@@ -43,6 +43,7 @@ import org.jkiss.utils.CommonUtils;
import java.nio.charset.Charset;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
public class StreamConsumerPageOutput extends DataTransferPageNodeSettings {
......@@ -340,19 +341,9 @@ public class StreamConsumerPageOutput extends DataTransferPageNodeSettings {
@NotNull
private String[] getAvailableVariables() {
final Set<String> variables = new LinkedHashSet<>(Arrays.asList(
StreamTransferConsumer.VARIABLE_DATASOURCE,
StreamTransferConsumer.VARIABLE_CATALOG,
StreamTransferConsumer.VARIABLE_SCHEMA,
StreamTransferConsumer.VARIABLE_TABLE,
StreamTransferConsumer.VARIABLE_TIMESTAMP,
StreamTransferConsumer.VARIABLE_DATE,
StreamTransferConsumer.VARIABLE_INDEX,
StreamTransferConsumer.VARIABLE_PROJECT,
StreamTransferConsumer.VARIABLE_CONN_TYPE,
StreamTransferConsumer.VARIABLE_FILE,
StreamTransferConsumer.VARIABLE_SCRIPT_FILE
));
final Set<String> variables = Arrays.stream(StreamTransferConsumer.VARIABLES)
.map(x -> x[0])
.collect(Collectors.toCollection(LinkedHashSet::new));
final List<DataTransferPipe> pipes = getWizard().getSettings().getDataPipes();
if (pipes.size() == 1) {
......
......@@ -85,18 +85,29 @@ public class StreamTransferConsumer implements IDataTransferConsumer<StreamConsu
public static final String VARIABLE_FILE = "file";
public static final String VARIABLE_SCRIPT_FILE = "scriptFilename";
public static final String VARIABLE_YEAR = "year";
public static final String VARIABLE_MONTH = "month";
public static final String VARIABLE_DAY = "day";
public static final String VARIABLE_HOUR = "hour";
public static final String VARIABLE_MINUTE = "minute";
public static final String[][] VARIABLES = {
{VARIABLE_DATASOURCE, "source database datasource"},
{VARIABLE_CATALOG, "source database catalog"},
{VARIABLE_SCHEMA, "source database schema"},
{VARIABLE_TABLE, "source database table"},
{VARIABLE_TIMESTAMP, "current timestamp"},
{VARIABLE_DATE, "current date"},
{VARIABLE_INDEX, "index of current file (if split is used)"},
{VARIABLE_PROJECT, "source database project"},
{VARIABLE_CONN_TYPE, "source database connection type"},
{VARIABLE_FILE, "output file path"},
{VARIABLE_SCRIPT_FILE, "source script filename"}
{VARIABLE_SCRIPT_FILE, "source script filename"},
{VARIABLE_TIMESTAMP, "current timestamp"},
{VARIABLE_DATE, "current date"},
{VARIABLE_YEAR, "current year"},
{VARIABLE_MONTH, "current month"},
{VARIABLE_DAY, "current day"},
{VARIABLE_HOUR, "current hour"},
{VARIABLE_MINUTE, "current minute"},
};
public static final int OUT_FILE_BUFFER_SIZE = 100000;
......@@ -520,6 +531,14 @@ public class StreamTransferConsumer implements IDataTransferConsumer<StreamConsu
}
private String translatePattern(String pattern, final File targetFile) {
final Date ts;
if (parameters.startTimestamp != null) {
// Use saved timestamp (#7352)
ts = parameters.startTimestamp;
} else {
ts = new Date();
}
return GeneralUtils.replaceVariables(pattern, name -> {
switch (name) {
case VARIABLE_DATASOURCE: {
......@@ -558,13 +577,6 @@ public class StreamTransferConsumer implements IDataTransferConsumer<StreamConsu
return stripObjectName(tableName);
}
case VARIABLE_TIMESTAMP:
Date ts;
if (parameters.startTimestamp != null) {
// Use saved timestamp (#7352)
ts = parameters.startTimestamp;
} else {
ts = new Date();
}
try {
SimpleDateFormat sdf = new SimpleDateFormat(settings.getOutputTimestampPattern());
return sdf.format(ts);
......@@ -574,6 +586,16 @@ public class StreamTransferConsumer implements IDataTransferConsumer<StreamConsu
}
case VARIABLE_DATE:
return RuntimeUtils.getCurrentDate();
case VARIABLE_YEAR:
return new SimpleDateFormat("yyyy").format(ts);
case VARIABLE_MONTH:
return new SimpleDateFormat("MM").format(ts);
case VARIABLE_DAY:
return new SimpleDateFormat("dd").format(ts);
case VARIABLE_HOUR:
return new SimpleDateFormat("HH").format(ts);
case VARIABLE_MINUTE:
return new SimpleDateFormat("mm").format(ts);
case VARIABLE_INDEX:
return String.valueOf(parameters.orderNumber + 1);
case VARIABLE_PROJECT: {
......
......@@ -34,6 +34,7 @@ import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.CommonUtils;
import java.io.File;
import java.util.Arrays;
class MySQLExportWizardPageSettings extends MySQLWizardPageSettings<MySQLExportWizard> {
......@@ -111,23 +112,11 @@ class MySQLExportWizardPageSettings extends MySQLWizardPageSettings<MySQLExportW
Group outputGroup = UIUtils.createControlGroup(composite, MySQLUIMessages.tools_db_export_wizard_page_settings_group_output, 2, GridData.FILL_HORIZONTAL, 0);
outputFolderText = DialogUtils.createOutputFolderChooser(outputGroup, MySQLUIMessages.tools_db_export_wizard_page_settings_label_out_text, e -> updateState());
outputFileText = UIUtils.createLabelText(outputGroup, MySQLUIMessages.tools_db_export_wizard_page_settings_label_file_name_pattern_text, wizard.getSettings().getOutputFilePattern());
UIUtils.setContentProposalToolTip(outputFileText, MySQLUIMessages.tools_db_export_wizard_page_settings_label_file_name_pattern_tip,
NativeToolUtils.VARIABLE_HOST,
NativeToolUtils.VARIABLE_DATABASE,
NativeToolUtils.VARIABLE_TABLE,
NativeToolUtils.VARIABLE_DATE,
NativeToolUtils.VARIABLE_TIMESTAMP,
NativeToolUtils.VARIABLE_CONN_TYPE);
UIUtils.setContentProposalToolTip(outputFileText, MySQLUIMessages.tools_db_export_wizard_page_settings_label_file_name_pattern_tip, NativeToolUtils.ALL_VARIABLES);
ContentAssistUtils.installContentProposal(
outputFileText,
new SmartTextContentAdapter(),
new StringContentProposalProvider(
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_HOST),
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_DATABASE),
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_TABLE),
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_DATE),
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_TIMESTAMP),
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_CONN_TYPE)));
new StringContentProposalProvider(Arrays.stream(NativeToolUtils.ALL_VARIABLES).map(GeneralUtils::variablePattern).toArray(String[]::new)));
createExtraArgsInput(outputGroup);
......
......@@ -330,9 +330,8 @@ public class MySQLExportSettings extends AbstractImportExportSettings<DBSObject>
case NativeToolUtils.VARIABLE_DATE:
return RuntimeUtils.getCurrentDate();
default:
System.getProperty(name);
return NativeToolUtils.replaceVariables(name);
}
return null;
});
return new File(getOutputFolder(), outFileName);
}
......
......@@ -35,6 +35,7 @@ import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.CommonUtils;
import java.io.File;
import java.util.Arrays;
import java.util.Objects;
......@@ -146,23 +147,11 @@ class PostgreBackupWizardPageSettings extends PostgreToolWizardPageSettings<Post
outputGroup,
PostgreMessages.wizard_backup_page_setting_label_file_name_pattern,
wizard.getSettings().getOutputFilePattern());
UIUtils.setContentProposalToolTip(outputFileText, PostgreMessages.wizard_backup_page_setting_label_file_name_pattern_output,
NativeToolUtils.VARIABLE_HOST,
NativeToolUtils.VARIABLE_DATABASE,
NativeToolUtils.VARIABLE_TABLE,
NativeToolUtils.VARIABLE_DATE,
NativeToolUtils.VARIABLE_TIMESTAMP,
NativeToolUtils.VARIABLE_CONN_TYPE);
UIUtils.setContentProposalToolTip(outputFileText, PostgreMessages.wizard_backup_page_setting_label_file_name_pattern_output, NativeToolUtils.ALL_VARIABLES);
ContentAssistUtils.installContentProposal(
outputFileText,
new SmartTextContentAdapter(),
new StringContentProposalProvider(
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_HOST),
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_DATABASE),
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_TABLE),
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_DATE),
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_TIMESTAMP),
GeneralUtils.variablePattern(NativeToolUtils.VARIABLE_CONN_TYPE)));
new StringContentProposalProvider(Arrays.stream(NativeToolUtils.ALL_VARIABLES).map(GeneralUtils::variablePattern).toArray(String[]::new)));
outputFileText.addModifyListener(e -> wizard.getSettings().setOutputFilePattern(outputFileText.getText()));
fixOutputFileExtension();
......
......@@ -287,9 +287,8 @@ public class PostgreDatabaseBackupSettings extends PostgreBackupRestoreSettings
case NativeToolUtils.VARIABLE_DATE:
return RuntimeUtils.getCurrentDate();
default:
System.getProperty(name);
return NativeToolUtils.replaceVariables(name);
}
return null;
});
return new File(getOutputFolder(), outputFileName);
}
......
......@@ -16,8 +16,13 @@
*/
package org.jkiss.dbeaver.tasks.nativetool;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.utils.RuntimeUtils;
import org.jkiss.utils.CommonUtils;
import java.text.SimpleDateFormat;
import java.util.Date;
public abstract class NativeToolUtils {
public static final String VARIABLE_HOST = "host";
......@@ -25,8 +30,27 @@ public abstract class NativeToolUtils {
public static final String VARIABLE_TABLE = "table";
public static final String VARIABLE_DATE = "date";
public static final String VARIABLE_TIMESTAMP = "timestamp";
public static final String VARIABLE_YEAR = "year";
public static final String VARIABLE_MONTH = "month";
public static final String VARIABLE_DAY = "day";
public static final String VARIABLE_HOUR = "hour";
public static final String VARIABLE_MINUTE = "minute";
public static final String VARIABLE_CONN_TYPE = "connectionType";
public static final String[] ALL_VARIABLES = {
VARIABLE_HOST,
VARIABLE_DATABASE,
VARIABLE_TABLE,
VARIABLE_DATE,
VARIABLE_TIMESTAMP,
VARIABLE_YEAR,
VARIABLE_MONTH,
VARIABLE_DAY,
VARIABLE_HOUR,
VARIABLE_MINUTE,
VARIABLE_CONN_TYPE
};
public static boolean isSecureString(AbstractNativeToolSettings settings, String string) {
String userPassword = settings.getDataSourceContainer().getActualConnectionConfiguration().getUserPassword();
String toolUserPassword = settings.getToolUserPassword();
......@@ -34,4 +58,23 @@ public abstract class NativeToolUtils {
!CommonUtils.isEmpty(userPassword) && string.endsWith(userPassword);
}
@NotNull
public static String replaceVariables(@NotNull String name) {
switch (name) {
case NativeToolUtils.VARIABLE_DATE:
return RuntimeUtils.getCurrentDate();
case NativeToolUtils.VARIABLE_YEAR:
return new SimpleDateFormat("yyyy").format(new Date());
case NativeToolUtils.VARIABLE_MONTH:
return new SimpleDateFormat("MM").format(new Date());
case NativeToolUtils.VARIABLE_DAY:
return new SimpleDateFormat("dd").format(new Date());
case NativeToolUtils.VARIABLE_HOUR:
return new SimpleDateFormat("HH").format(new Date());
case NativeToolUtils.VARIABLE_MINUTE:
return new SimpleDateFormat("mm").format(new Date());
default:
return System.getProperty(name);
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册