提交 9f1754db 编写于 作者: S Serge Rider

#1776 Advanced copy: quote character config


Former-commit-id: dd712105
上级 e7461f3b
......@@ -281,7 +281,7 @@ public class ResultSetCommandHandler extends AbstractHandler {
case IWorkbenchCommandConstants.EDIT_COPY:
ResultSetUtils.copyToClipboard(
presentation.copySelectionToString(
new ResultSetCopySettings(false, false, false, true, null, null, DBDDisplayFormat.EDIT)));
new ResultSetCopySettings(false, false, false, true, null, null, null, DBDDisplayFormat.EDIT)));
break;
case IWorkbenchCommandConstants.EDIT_PASTE:
case CoreCommands.CMD_PASTE_SPECIAL:
......@@ -292,7 +292,7 @@ public class ResultSetCommandHandler extends AbstractHandler {
case IWorkbenchCommandConstants.EDIT_CUT:
ResultSetUtils.copyToClipboard(
presentation.copySelectionToString(
new ResultSetCopySettings(false, false, true, true, null, null, DBDDisplayFormat.EDIT))
new ResultSetCopySettings(false, false, true, true, null, null, null, DBDDisplayFormat.EDIT))
);
break;
case IWorkbenchCommandConstants.FILE_PRINT:
......
......@@ -28,18 +28,20 @@ public class ResultSetCopySettings {
private boolean quoteCells;
private String columnDelimiter;
private String rowDelimiter;
private String quoteString;
private DBDDisplayFormat format;
public ResultSetCopySettings() {
}
public ResultSetCopySettings(boolean copyHeader, boolean copyRowNumbers, boolean cut, boolean quoteCells, String columnDelimiter, String rowDelimiter, DBDDisplayFormat format) {
public ResultSetCopySettings(boolean copyHeader, boolean copyRowNumbers, boolean cut, boolean quoteCells, String columnDelimiter, String rowDelimiter, String quoteString, DBDDisplayFormat format) {
this.copyHeader = copyHeader;
this.copyRowNumbers = copyRowNumbers;
this.cut = cut;
this.quoteCells = quoteCells;
this.columnDelimiter = columnDelimiter;
this.rowDelimiter = rowDelimiter;
this.quoteString = quoteString == null ? "\"" : quoteString;
this.format = format;
}
......@@ -91,6 +93,14 @@ public class ResultSetCopySettings {
this.rowDelimiter = rowDelimiter;
}
public String getQuoteString() {
return quoteString;
}
public void setQuoteString(String quoteString) {
this.quoteString = quoteString;
}
public DBDDisplayFormat getFormat() {
return format;
}
......
......@@ -77,6 +77,7 @@ public class ResultSetCopySpecialHandler extends ResultSetCommandHandler impleme
static final String PARAM_FORMAT = "format";
static final String PARAM_COL_DELIMITER = "delimiter";
static final String PARAM_ROW_DELIMITER = "rowDelimiter";
static final String PARAM_QUOTE_STRING = "quoteString";
private final IDialogSettings settings;
......@@ -86,6 +87,7 @@ public class ResultSetCopySpecialHandler extends ResultSetCommandHandler impleme
private ValueFormatSelector formatSelector;
private Combo colDelimCombo;
private Combo rowDelimCombo;
private Combo quoteStringCombo;
private ResultSetCopySettings copySettings;
......@@ -100,6 +102,7 @@ public class ResultSetCopySpecialHandler extends ResultSetCommandHandler impleme
copySettings.setFormat(DBDDisplayFormat.UI);
copySettings.setColumnDelimiter("\t");
copySettings.setRowDelimiter("\n");
copySettings.setQuoteString("\"");
if (settings.get(PARAM_COPY_HEADER) != null) {
copySettings.setCopyHeader(settings.getBoolean(PARAM_COPY_HEADER));
}
......@@ -118,6 +121,9 @@ public class ResultSetCopySpecialHandler extends ResultSetCommandHandler impleme
if (settings.get(PARAM_ROW_DELIMITER) != null) {
copySettings.setRowDelimiter(settings.get(PARAM_ROW_DELIMITER));
}
if (settings.get(PARAM_QUOTE_STRING) != null) {
copySettings.setQuoteString(settings.get(PARAM_QUOTE_STRING));
}
}
@Override
......@@ -141,6 +147,7 @@ public class ResultSetCopySpecialHandler extends ResultSetCommandHandler impleme
colDelimCombo = createDelimiterCombo(group, "Column Delimiter", new String[] {"\t", ";", ","}, copySettings.getColumnDelimiter());
rowDelimCombo = createDelimiterCombo(group, "Row Delimiter", new String[] {"\n", "|", "^"}, copySettings.getRowDelimiter());
quoteStringCombo = createDelimiterCombo(group, "Quote Character", new String[] {"\"", "'"}, copySettings.getQuoteString());
return group;
}
......@@ -175,6 +182,7 @@ public class ResultSetCopySpecialHandler extends ResultSetCommandHandler impleme
copySettings.setFormat(formatSelector.getSelection());
copySettings.setColumnDelimiter(CommonUtils.unescapeDisplayString(colDelimCombo.getText()));
copySettings.setRowDelimiter(CommonUtils.unescapeDisplayString(rowDelimCombo.getText()));
copySettings.setQuoteString(CommonUtils.unescapeDisplayString(quoteStringCombo.getText()));
settings.put(PARAM_COPY_HEADER, copySettings.isCopyHeader());
settings.put(PARAM_COPY_ROWS, copySettings.isCopyRowNumbers());
......@@ -182,6 +190,7 @@ public class ResultSetCopySpecialHandler extends ResultSetCommandHandler impleme
settings.put(PARAM_FORMAT, copySettings.getFormat().name());
settings.put(PARAM_COL_DELIMITER, copySettings.getColumnDelimiter());
settings.put(PARAM_ROW_DELIMITER, copySettings.getRowDelimiter());
settings.put(PARAM_QUOTE_STRING, copySettings.getQuoteString());
super.okPressed();
}
}
......
......@@ -386,6 +386,10 @@ public class SpreadsheetPresentation extends AbstractPresentation implements IRe
if (rowDelimiter == null) {
rowDelimiter = GeneralUtils.getDefaultLineSeparator();
}
String quoteString = settings.getQuoteString();
if ((CommonUtils.isEmpty(quoteString))) {
quoteString = "\"";
}
List<Object> selectedColumns = spreadsheet.getColumnSelection();
IGridLabelProvider labelProvider = spreadsheet.getLabelProvider();
StringBuilder tdt = new StringBuilder();
......@@ -439,9 +443,9 @@ public class SpreadsheetPresentation extends AbstractPresentation implements IRe
column.getAttribute(),
value,
settings.getFormat());
if (quoteCells && cellText != null) {
if (quoteCells && !CommonUtils.isEmpty(cellText)) {
if (cellText.contains(columnDelimiter) || cellText.contains(rowDelimiter)) {
cellText = '"' + cellText + '"';
cellText = quoteString + cellText + quoteString;
}
}
tdt.append(cellText);
......
......@@ -592,6 +592,12 @@ public final class SQLUtils {
int precision = column.getPrecision();
if (precision == 0) {
precision = (int) column.getMaxLength();
if (precision > 0) {
// FIXME: max length is actually length in character.
// FIXME: On Oracle it returns bigger values than maximum (#1767)
// FIXME: in other DBs it equals to precision in most cases
//precision--; // One character for sign?
}
}
if (scale >= 0 && precision >= 0 && !(scale == 0 && precision == 0)) {
return "(" + precision + ',' + scale + ')';
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册