use of org.jkiss.dbeaver.tools.transfer.registry.DataTransferRegistry in project dbeaver by dbeaver.
the class DataTransferSettings method initializePipes.
private void initializePipes(@Nullable Collection<IDataTransferProducer> producers, @Nullable Collection<IDataTransferConsumer> consumers, boolean isExport) {
this.initProducers = producers == null ? null : producers.toArray(new IDataTransferProducer[0]);
this.initConsumers = consumers == null ? null : consumers.toArray(new IDataTransferConsumer[0]);
this.dataPipes = new ArrayList<>();
this.initObjects.clear();
this.consumerOptional = false;
this.producerOptional = false;
DataTransferRegistry registry = DataTransferRegistry.getInstance();
if (!ArrayUtils.isEmpty(initProducers) && !ArrayUtils.isEmpty(initConsumers)) {
// Processor belongs to non-database nodes anyway
if (initProducers.length != initConsumers.length) {
throw new IllegalArgumentException("Producers number must match consumers number");
}
// Make pipes
for (int i = 0; i < initProducers.length; i++) {
if (initProducers[i].getDatabaseObject() != null)
initObjects.add(initProducers[i].getDatabaseObject());
dataPipes.add(new DataTransferPipe(initProducers[i], initConsumers[i]));
}
// initProducers[0] instanceof IDataTransferNodePrimary;
consumerOptional = isExport;
// initConsumers[0] instanceof IDataTransferNodePrimary;
producerOptional = !isExport;
if (producerOptional && consumerOptional) {
// Both producer and consumer set are primary
// This may happen when task was saved for db-> settings
// Leave only optional consumer then
producerOptional = false;
}
} else if (!ArrayUtils.isEmpty(initProducers)) {
// Make pipes
for (IDataTransferProducer source : initProducers) {
if (source.getDatabaseObject() != null)
initObjects.add(source.getDatabaseObject());
dataPipes.add(new DataTransferPipe(source, null));
}
// Set default producer
Class<? extends IDataTransferProducer> producerType = dataPipes.get(0).getProducer().getClass();
DataTransferNodeDescriptor producerDesc = registry.getNodeByType(producerType);
if (producerDesc != null) {
selectProducer(producerDesc);
consumerOptional = true;
} else {
DBWorkbench.getPlatformUI().showError(DTMessages.data_transfer_settings_title_find_producer, DTMessages.data_transfer_settings_message_find_data_producer);
}
} else if (!ArrayUtils.isEmpty(initConsumers)) {
// Make pipes
for (IDataTransferConsumer target : initConsumers) {
if (target.getDatabaseObject() != null)
initObjects.add(target.getDatabaseObject());
dataPipes.add(new DataTransferPipe(null, target));
}
// Set default consumer
Class<? extends IDataTransferConsumer> consumerType = dataPipes.get(0).getConsumer().getClass();
DataTransferNodeDescriptor consumerDesc = registry.getNodeByType(consumerType);
if (consumerDesc != null) {
selectConsumer(consumerDesc, null, false);
consumerOptional = false;
} else {
DBWorkbench.getPlatformUI().showError(DTMessages.data_transfer_settings_title_find_consumer, DTMessages.data_transfer_settings_message_find_data_consumer);
}
producerOptional = true;
} else {
consumerOptional = true;
producerOptional = true;
}
if (!ArrayUtils.isEmpty(initConsumers)) {
for (IDataTransferConsumer target : initConsumers) {
DataTransferNodeDescriptor node = registry.getNodeByType(target.getClass());
if (node != null) {
this.consumer = node;
}
}
}
}
Aggregations