From 026b696cb6463a3ab0ac46655b00f55726c92111 Mon Sep 17 00:00:00 2001 From: serge-rider Date: Tue, 21 May 2019 23:17:13 +0300 Subject: [PATCH] #5963 Data transfer/CopyAs: support HTML clipboard format Former-commit-id: 759e7f4eb4ed8317ea791f04174d8d27a62fee0e --- .../office/handlers/OpenSpreadsheetHandler.java | 2 +- .../org.jkiss.dbeaver.data.transfer/plugin.xml | 1 + .../tools/transfer/IDataTransferConsumer.java | 4 +++- .../DataTransferProcessorDescriptor.java | 6 ++++++ .../transfer/stream/StreamTransferConsumer.java | 17 ++++++++++++++--- .../transfer/wizard/DataTransferPageFinal.java | 3 ++- .../transfer/wizard/DataTransferSettings.java | 3 ++- .../resultset/ResultSetHandlerCopyAs.java | 2 +- .../resultset/ResultSetHandlerOpenWith.java | 2 +- 9 files changed, 31 insertions(+), 9 deletions(-) diff --git a/plugins/org.jkiss.dbeaver.data.office/src/org/jkiss/dbeaver/data/office/handlers/OpenSpreadsheetHandler.java b/plugins/org.jkiss.dbeaver.data.office/src/org/jkiss/dbeaver/data/office/handlers/OpenSpreadsheetHandler.java index dd8da3855f..235fbdea2b 100644 --- a/plugins/org.jkiss.dbeaver.data.office/src/org/jkiss/dbeaver/data/office/handlers/OpenSpreadsheetHandler.java +++ b/plugins/org.jkiss.dbeaver.data.office/src/org/jkiss/dbeaver/data/office/handlers/OpenSpreadsheetHandler.java @@ -111,7 +111,7 @@ public class OpenSpreadsheetHandler extends AbstractHandler settings.setOutputFilePattern(tempFile.getName()); Map properties = DataExporterXLSX.getDefaultProperties(); - consumer.initTransfer(dataContainer, settings, new IDataTransferConsumer.TransferParameters(true), exporter, properties); + consumer.initTransfer(dataContainer, settings, new IDataTransferConsumer.TransferParameters(true, false), exporter, properties); DBDDataFilter dataFilter = resultSet.getModel().getDataFilter(); DatabaseTransferProducer producer = new DatabaseTransferProducer(dataContainer, dataFilter); diff --git a/plugins/org.jkiss.dbeaver.data.transfer/plugin.xml b/plugins/org.jkiss.dbeaver.data.transfer/plugin.xml index 3dc76918a0..0de1064e8d 100644 --- a/plugins/org.jkiss.dbeaver.data.transfer/plugin.xml +++ b/plugins/org.jkiss.dbeaver.data.transfer/plugin.xml @@ -173,6 +173,7 @@ label="%dataTransfer.processor.html.name" appFileExtension="html" appName="%dataTransfer.processor.web.name" + html="true" order="20"> diff --git a/plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/IDataTransferConsumer.java b/plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/IDataTransferConsumer.java index ff0394d90f..7c00c757cb 100644 --- a/plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/IDataTransferConsumer.java +++ b/plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/IDataTransferConsumer.java @@ -33,12 +33,14 @@ public interface IDataTransferConsumer properties = new ArrayList<>(); private boolean isBinary; + private boolean isHTML; private transient ProgramInfo program; @@ -63,6 +64,7 @@ public class DataTransferProcessorDescriptor extends AbstractDescriptor implemen this.description = config.getAttribute("description"); this.icon = iconToImage(config.getAttribute("icon"), DBIcon.TYPE_UNKNOWN); this.isBinary = CommonUtils.getBoolean(config.getAttribute("binary"), false); + this.isHTML = CommonUtils.getBoolean(config.getAttribute("html"), false); this.appFileExtension = config.getAttribute("appFileExtension"); this.appName = config.getAttribute("appName"); this.order = CommonUtils.toInt(config.getAttribute("order")); @@ -169,6 +171,10 @@ public class DataTransferProcessorDescriptor extends AbstractDescriptor implemen return isBinary; } + public boolean isHTMLFormat() { + return isHTML; + } + public String getFullId() { return node.getId() + ":" + getId(); } diff --git a/plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/stream/StreamTransferConsumer.java b/plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/stream/StreamTransferConsumer.java index 2de0d4106e..554d6bd4a2 100644 --- a/plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/stream/StreamTransferConsumer.java +++ b/plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/stream/StreamTransferConsumer.java @@ -18,6 +18,7 @@ package org.jkiss.dbeaver.tools.transfer.stream; import org.eclipse.core.resources.IProject; import org.eclipse.swt.dnd.Clipboard; +import org.eclipse.swt.dnd.HTMLTransfer; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.graphics.Color; @@ -371,10 +372,20 @@ public class StreamTransferConsumer implements IDataTransferConsumer { + TextTransfer textTransfer = TextTransfer.getInstance(); - new Clipboard(UIUtils.getDisplay()).setContents( - new Object[]{outputBuffer.toString()}, - new Transfer[]{textTransfer}); + String strContents = outputBuffer.toString(); + Clipboard clipboard = new Clipboard(UIUtils.getDisplay()); + if (parameters.isHTML) { + HTMLTransfer htmlTransfer = HTMLTransfer.getInstance(); + clipboard.setContents( + new Object[]{strContents, strContents}, + new Transfer[]{textTransfer, htmlTransfer}); + } else { + clipboard.setContents( + new Object[]{strContents}, + new Transfer[]{textTransfer}); + } }); outputBuffer = null; } diff --git a/plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/wizard/DataTransferPageFinal.java b/plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/wizard/DataTransferPageFinal.java index d6a4fe16b4..c8e76a89b0 100644 --- a/plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/wizard/DataTransferPageFinal.java +++ b/plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/wizard/DataTransferPageFinal.java @@ -131,7 +131,8 @@ class DataTransferPageFinal extends ActiveWizardPage { } IDataTransferConsumer.TransferParameters parameters = new IDataTransferConsumer.TransferParameters( - processorDescriptor != null && processorDescriptor.isBinaryFormat()); + processorDescriptor != null && processorDescriptor.isBinaryFormat(), + processorDescriptor != null && processorDescriptor.isHTMLFormat()); parameters.orderNumber = i; parameters.totalConsumers = dataPipes.size(); consumer.initTransfer( diff --git a/plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/wizard/DataTransferSettings.java b/plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/wizard/DataTransferSettings.java index 879634ead9..810fe959df 100644 --- a/plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/wizard/DataTransferSettings.java +++ b/plugins/org.jkiss.dbeaver.data.transfer/src/org/jkiss/dbeaver/tools/transfer/wizard/DataTransferSettings.java @@ -341,7 +341,8 @@ public class DataTransferSettings { IDataTransferConsumer consumerNode = (IDataTransferConsumer) consumer.createNode(); if (pipe.getProducer() != null) { IDataTransferConsumer.TransferParameters parameters = new IDataTransferConsumer.TransferParameters( - processor != null && processor.isBinaryFormat()); + processor != null && processor.isBinaryFormat(), + processor != null && processor.isHTMLFormat()); parameters.orderNumber = i; parameters.totalConsumers = dataPipes.size(); diff --git a/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetHandlerCopyAs.java b/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetHandlerCopyAs.java index cdadb2e33c..b8d138e271 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetHandlerCopyAs.java +++ b/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetHandlerCopyAs.java @@ -149,7 +149,7 @@ public class ResultSetHandlerCopyAs extends AbstractHandler implements IElementU consumer.initTransfer( dataContainer, settings, - new IDataTransferConsumer.TransferParameters(processor.isBinaryFormat()), + new IDataTransferConsumer.TransferParameters(processor.isBinaryFormat(), processor.isHTMLFormat()), exporter, properties); diff --git a/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetHandlerOpenWith.java b/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetHandlerOpenWith.java index 1f877e7b3a..c9a04b24b9 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetHandlerOpenWith.java +++ b/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/controls/resultset/ResultSetHandlerOpenWith.java @@ -184,7 +184,7 @@ public class ResultSetHandlerOpenWith extends AbstractHandler implements IElemen consumer.initTransfer( dataContainer, settings, - new IDataTransferConsumer.TransferParameters(processor.isBinaryFormat()), + new IDataTransferConsumer.TransferParameters(processor.isBinaryFormat(), processor.isHTMLFormat()), exporter, properties); -- GitLab