提交 2606e300 编写于 作者: S Serge Rider

#6867 Task wizard: data pipes config save fix


Former-commit-id: 204b9884
上级 3bdea301
......@@ -46,9 +46,7 @@ import org.jkiss.dbeaver.model.task.DBTTaskConfigurator;
import org.jkiss.dbeaver.model.task.DBTTaskType;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.runtime.ui.UIServiceSQL;
import org.jkiss.dbeaver.tools.transfer.DTConstants;
import org.jkiss.dbeaver.tools.transfer.DataTransferSettings;
import org.jkiss.dbeaver.tools.transfer.IDataTransferNode;
import org.jkiss.dbeaver.tools.transfer.*;
import org.jkiss.dbeaver.tools.transfer.database.DatabaseTransferConsumer;
import org.jkiss.dbeaver.tools.transfer.database.DatabaseTransferProducer;
import org.jkiss.dbeaver.ui.DBeaverIcons;
......@@ -258,30 +256,29 @@ public class DataTransferTaskConfigurator implements DBTTaskConfigurator {
if (objectsTable == null) {
return;
}
TableItem[] items = objectsTable.getItems();
boolean isExport = isExport();
dtWizard.getSettings().clearDataPipes();
List<IDataTransferProducer> producers = isExport ? new ArrayList<>() : null;
List<IDataTransferConsumer> consumers = isExport ? null : new ArrayList<>();
TableItem[] items = objectsTable.getItems();
for (TableItem item : items) {
DBSObject object = (DBSObject) item.getData();
if (object instanceof DBSDataContainer) {
addDataPipe(dtWizard.getSettings(), object, isExport);
if (isExport) {
producers.add(new DatabaseTransferProducer((DBSDataContainer) object));
} else {
if (object instanceof DBSDataManipulator) {
consumers.add(new DatabaseTransferConsumer((DBSDataManipulator) object));
}
}
}
}
dtWizard.getSettings().setDataPipes(producers, consumers);
dtWizard.loadSettings(dtWizard.getRunnableContext());
}
private void addDataPipe(DataTransferSettings settings, DBSObject object, boolean isExport) {
if (isExport) {
if (object instanceof DBSDataContainer) {
settings.addDataPipe(new DatabaseTransferProducer((DBSDataContainer) object), null);
}
} else {
if (object instanceof DBSDataManipulator) {
settings.addDataPipe(null, new DatabaseTransferConsumer((DBSDataManipulator) object));
}
}
}
@Override
public boolean isComplete() {
return objectsTable.getItemCount() > 0;
......
......@@ -467,19 +467,18 @@ public class DataTransferSettings {
initConsumers = new IDataTransferConsumer[0];
}
public void addDataPipe(IDataTransferProducer producer, IDataTransferConsumer consumer) {
List<IDataTransferProducer> producers = null;
List<IDataTransferConsumer> consumers = null;
if (producer != null) {
producers = new ArrayList<>();
if (initProducers != null) Collections.addAll(producers, initProducers);
producers.add(producer);
public void setDataPipes(List<IDataTransferProducer> producers, List<IDataTransferConsumer> consumers) {
boolean hasChanges = false;
if (producers != null) {
hasChanges = initProducers == null || !Arrays.equals(producers.toArray(), initProducers);
}
if (consumer != null) {
consumers = new ArrayList<>();
if (initConsumers != null) Collections.addAll(consumers, initConsumers);
consumers.add(consumer);
if (consumers != null && !hasChanges) {
hasChanges = initConsumers == null || !Arrays.equals(consumers.toArray(), initConsumers);
}
if (!hasChanges) {
return;
}
clearDataPipes();
initializePipes(producers, consumers);
}
......
......@@ -608,6 +608,13 @@ public class DatabaseTransferConsumer implements IDataTransferConsumer<DatabaseC
return null;
}
@Override
public boolean equals(Object obj) {
return obj instanceof DatabaseTransferConsumer &&
CommonUtils.equalObjects(targetObject, ((DatabaseTransferConsumer) obj).targetObject);
}
public static class ObjectSerializer implements DBPObjectSerializer<DBTTask, DatabaseTransferConsumer> {
@Override
......
......@@ -230,6 +230,14 @@ public class DatabaseTransferProducer implements IDataTransferProducer<DatabaseP
}
}
@Override
public boolean equals(Object obj) {
return obj instanceof DatabaseTransferProducer &&
CommonUtils.equalObjects(dataContainer, ((DatabaseTransferProducer) obj).dataContainer) &&
CommonUtils.equalObjects(dataFilter, ((DatabaseTransferProducer) obj).dataFilter);
}
public static class ObjectSerializer implements DBPObjectSerializer<DBTTask, DatabaseTransferProducer> {
@Override
......
......@@ -27,6 +27,7 @@ import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.sql.*;
import org.jkiss.dbeaver.model.struct.DBSDataContainer;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.utils.CommonUtils;
/**
* Data container for single SQL query.
......@@ -220,4 +221,10 @@ public class SQLQueryDataContainer implements DBSDataContainer, SQLQueryContaine
public DBPImage getObjectImage() {
return DBIcon.TREE_FILE;
}
@Override
public boolean equals(Object obj) {
return obj instanceof SQLQueryDataContainer &&
CommonUtils.equalObjects(query, ((SQLQueryDataContainer) obj).query);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册