Search in sources :

Example 1 with MonitorRunnableContext

use of org.jkiss.dbeaver.model.runtime.MonitorRunnableContext in project dbeaver by serge-rider.

the class DataTransferSettings method loadSettings.

public void loadSettings(DBRProgressMonitor monitor, Map<String, Object> config) {
    this.setMaxJobCount(CommonUtils.toInt(config.get("maxJobCount"), DataTransferSettings.DEFAULT_THREADS_NUM));
    this.setShowFinalMessage(CommonUtils.getBoolean(config.get("showFinalMessage"), this.isShowFinalMessage()));
    DataTransferNodeDescriptor savedConsumer = null, savedProducer = null, processorNode = null;
    {
        // Restore consumer/producer from saved configuration
        // Do this only if consumer/producer weren't set explicitly
        {
            String consumerId = CommonUtils.toString(config.get("consumer"));
            if (!CommonUtils.isEmpty(consumerId)) {
                DataTransferNodeDescriptor consumerNode = DataTransferRegistry.getInstance().getNodeById(consumerId);
                // Check that this consumer is allowed
                if (!CommonUtils.isEmpty(initObjects)) {
                    if (!DataTransferRegistry.getInstance().getAvailableConsumers(initObjects).contains(consumerNode)) {
                        consumerNode = null;
                    }
                }
                if (consumerNode != null) {
                    if (this.consumer == null) {
                        savedConsumer = consumerNode;
                        this.setConsumer(consumerNode);
                    } else {
                        savedConsumer = this.consumer;
                    }
                    if (consumerNode.hasProcessors()) {
                        processorNode = consumerNode;
                    }
                }
            }
        }
        {
            String producerId = CommonUtils.toString(config.get("producer"));
            if (!CommonUtils.isEmpty(producerId)) {
                DataTransferNodeDescriptor producerNode = DataTransferRegistry.getInstance().getNodeById(producerId);
                // Check that this producer is allowed
                if (!CommonUtils.isEmpty(initObjects)) {
                    if (!DataTransferRegistry.getInstance().getAvailableProducers(initObjects).contains(producerNode)) {
                        producerNode = null;
                    }
                }
                if (producerNode != null) {
                    if (this.producer == null) {
                        savedProducer = producerNode;
                        this.setProducer(producerNode);
                    } else {
                        savedProducer = this.producer;
                    }
                    if (producerNode.hasProcessors()) {
                        processorNode = producerNode;
                    }
                }
            }
        }
    }
    DataTransferProcessorDescriptor savedProcessor = null;
    if (processorNode != null) {
        String processorId = CommonUtils.toString(config.get("processor"));
        if (!CommonUtils.isEmpty(processorId)) {
            savedProcessor = processorNode.getProcessor(processorId);
            if (savedProcessor == null) {
                state.addError(new DBException("Processor '" + processorId + "' not found in '" + processorNode.getName() + "'"));
            }
        }
    }
    if (this.consumerOptional && savedConsumer != null) {
        this.selectConsumer(savedConsumer, savedProcessor, false);
    }
    if (this.producerOptional && savedProducer != null) {
        this.selectProducer(savedProducer, savedProcessor, false);
    }
    if (processorNode == producer) {
        producerProcessor = true;
    } else if (processorNode == consumer) {
        producerProcessor = false;
    }
    // Load processor properties
    Map<String, Object> processorsSection = JSONUtils.getObject(config, "processors");
    {
        for (Map.Entry<String, Object> procIter : processorsSection.entrySet()) {
            Map<String, Object> procSection = (Map<String, Object>) procIter.getValue();
            String processorId = procIter.getKey();
            String nodeId = CommonUtils.toString(procSection.get("@node"));
            if (CommonUtils.isEmpty(nodeId)) {
                // Legacy code support
                int divPos = processorId.indexOf(':');
                if (divPos != -1) {
                    nodeId = processorId.substring(0, divPos);
                    processorId = processorId.substring(divPos + 1);
                }
            }
            String propNamesId = CommonUtils.toString(procSection.get("@propNames"));
            DataTransferNodeDescriptor node = DataTransferRegistry.getInstance().getNodeById(nodeId);
            if (node != null) {
                Map<String, Object> props = new HashMap<>();
                DataTransferProcessorDescriptor nodeProcessor = node.getProcessor(processorId);
                if (nodeProcessor != null) {
                    for (String prop : CommonUtils.splitString(propNamesId, ',')) {
                        props.put(prop, procSection.get(prop));
                    }
                    processorPropsHistory.put(nodeProcessor, props);
                }
            }
        }
    }
    // Load nodes' settings (key is impl class simple name, value is descriptor)
    Map<String, DataTransferNodeDescriptor> nodeNames = new LinkedHashMap<>();
    if (producer != null) {
        nodeNames.put(producer.getNodeClass().getSimpleName(), producer);
    }
    if (consumer != null) {
        nodeNames.put(consumer.getNodeClass().getSimpleName(), consumer);
    }
    MonitorRunnableContext runnableContext = new MonitorRunnableContext(monitor);
    for (Map.Entry<String, DataTransferNodeDescriptor> node : nodeNames.entrySet()) {
        Map<String, Object> nodeSection = JSONUtils.getObject(config, node.getKey());
        IDataTransferSettings nodeSettings = this.getNodeSettings(node.getValue());
        if (nodeSettings != null) {
            nodeSettings.loadSettings(runnableContext, this, nodeSection);
        }
    }
    // Initialize pipes with loaded settings
    for (int i = 0; i < dataPipes.size(); i++) {
        DataTransferPipe pipe = dataPipes.get(i);
        if (pipe.getProducer() != null && pipe.getConsumer() != null) {
            try {
                pipe.initPipe(this, i, dataPipes.size());
            } catch (Exception e) {
                state.addError(e);
            }
        }
    }
}
Also used : DBException(org.jkiss.dbeaver.DBException) MonitorRunnableContext(org.jkiss.dbeaver.model.runtime.MonitorRunnableContext) DataTransferProcessorDescriptor(org.jkiss.dbeaver.tools.transfer.registry.DataTransferProcessorDescriptor) DBCException(org.jkiss.dbeaver.model.exec.DBCException) DBException(org.jkiss.dbeaver.DBException) DataTransferNodeDescriptor(org.jkiss.dbeaver.tools.transfer.registry.DataTransferNodeDescriptor) DBSObject(org.jkiss.dbeaver.model.struct.DBSObject) DBPObject(org.jkiss.dbeaver.model.DBPObject)

Example 2 with MonitorRunnableContext

use of org.jkiss.dbeaver.model.runtime.MonitorRunnableContext in project dbeaver by serge-rider.

the class DataTransferSettings method getNodesFromLocation.

public static <T> List<T> getNodesFromLocation(@NotNull DBRProgressMonitor monitor, DBTTask task, DataTransferState state, Log taskLog, String nodeType, Class<T> nodeClass) {
    Map<String, Object> config = task.getProperties();
    List<T> result = new ArrayList<>();
    Object nodeList = config.get(nodeType);
    if (nodeList instanceof Collection) {
        MonitorRunnableContext runnableContext = new MonitorRunnableContext(monitor);
        for (Object nodeObj : (Collection) nodeList) {
            if (nodeObj instanceof Map) {
                try {
                    Object node = JSONUtils.deserializeObject(runnableContext, task, (Map<String, Object>) nodeObj);
                    if (nodeClass.isInstance(node)) {
                        result.add(nodeClass.cast(node));
                    }
                } catch (DBCException e) {
                    state.addError(e);
                    taskLog.error(e);
                }
            }
        }
    }
    return result;
}
Also used : MonitorRunnableContext(org.jkiss.dbeaver.model.runtime.MonitorRunnableContext) DBSObject(org.jkiss.dbeaver.model.struct.DBSObject) DBPObject(org.jkiss.dbeaver.model.DBPObject) DBCException(org.jkiss.dbeaver.model.exec.DBCException)

Example 3 with MonitorRunnableContext

use of org.jkiss.dbeaver.model.runtime.MonitorRunnableContext in project dbeaver by dbeaver.

the class DataTransferSettings method getNodesFromLocation.

public static <T> List<T> getNodesFromLocation(@NotNull DBRProgressMonitor monitor, DBTTask task, DataTransferState state, Log taskLog, String nodeType, Class<T> nodeClass) {
    Map<String, Object> config = task.getProperties();
    List<T> result = new ArrayList<>();
    Object nodeList = config.get(nodeType);
    if (nodeList instanceof Collection) {
        MonitorRunnableContext runnableContext = new MonitorRunnableContext(monitor);
        for (Object nodeObj : (Collection) nodeList) {
            if (nodeObj instanceof Map) {
                try {
                    Object node = JSONUtils.deserializeObject(runnableContext, task, (Map<String, Object>) nodeObj);
                    if (nodeClass.isInstance(node)) {
                        result.add(nodeClass.cast(node));
                    }
                } catch (DBCException e) {
                    state.addError(e);
                    taskLog.error(e);
                }
            }
        }
    }
    return result;
}
Also used : MonitorRunnableContext(org.jkiss.dbeaver.model.runtime.MonitorRunnableContext) DBSObject(org.jkiss.dbeaver.model.struct.DBSObject) DBPObject(org.jkiss.dbeaver.model.DBPObject) DBCException(org.jkiss.dbeaver.model.exec.DBCException)

Example 4 with MonitorRunnableContext

use of org.jkiss.dbeaver.model.runtime.MonitorRunnableContext in project dbeaver by dbeaver.

the class DataTransferSettings method loadSettings.

public void loadSettings(DBRProgressMonitor monitor, Map<String, Object> config) {
    this.setMaxJobCount(CommonUtils.toInt(config.get("maxJobCount"), DataTransferSettings.DEFAULT_THREADS_NUM));
    this.setShowFinalMessage(CommonUtils.getBoolean(config.get("showFinalMessage"), this.isShowFinalMessage()));
    DataTransferNodeDescriptor savedConsumer = null, savedProducer = null, processorNode = null;
    {
        // Restore consumer/producer from saved configuration
        // Do this only if consumer/producer weren't set explicitly
        {
            String consumerId = CommonUtils.toString(config.get("consumer"));
            if (!CommonUtils.isEmpty(consumerId)) {
                DataTransferNodeDescriptor consumerNode = DataTransferRegistry.getInstance().getNodeById(consumerId);
                // Check that this consumer is allowed
                if (!CommonUtils.isEmpty(initObjects)) {
                    if (!DataTransferRegistry.getInstance().getAvailableConsumers(initObjects).contains(consumerNode)) {
                        consumerNode = null;
                    }
                }
                if (consumerNode != null) {
                    if (this.consumer == null) {
                        savedConsumer = consumerNode;
                        this.setConsumer(consumerNode);
                    } else {
                        savedConsumer = this.consumer;
                    }
                    if (consumerNode.hasProcessors()) {
                        processorNode = consumerNode;
                    }
                }
            }
        }
        {
            String producerId = CommonUtils.toString(config.get("producer"));
            if (!CommonUtils.isEmpty(producerId)) {
                DataTransferNodeDescriptor producerNode = DataTransferRegistry.getInstance().getNodeById(producerId);
                // Check that this producer is allowed
                if (!CommonUtils.isEmpty(initObjects)) {
                    if (!DataTransferRegistry.getInstance().getAvailableProducers(initObjects).contains(producerNode)) {
                        producerNode = null;
                    }
                }
                if (producerNode != null) {
                    if (this.producer == null) {
                        savedProducer = producerNode;
                        this.setProducer(producerNode);
                    } else {
                        savedProducer = this.producer;
                    }
                    if (producerNode.hasProcessors()) {
                        processorNode = producerNode;
                    }
                }
            }
        }
    }
    DataTransferProcessorDescriptor savedProcessor = null;
    if (processorNode != null) {
        String processorId = CommonUtils.toString(config.get("processor"));
        if (!CommonUtils.isEmpty(processorId)) {
            savedProcessor = processorNode.getProcessor(processorId);
            if (savedProcessor == null) {
                state.addError(new DBException("Processor '" + processorId + "' not found in '" + processorNode.getName() + "'"));
            }
        }
    }
    if (this.consumerOptional && savedConsumer != null) {
        this.selectConsumer(savedConsumer, savedProcessor, false);
    }
    if (this.producerOptional && savedProducer != null) {
        this.selectProducer(savedProducer, savedProcessor, false);
    }
    if (processorNode == producer) {
        producerProcessor = true;
    } else if (processorNode == consumer) {
        producerProcessor = false;
    }
    // Load processor properties
    Map<String, Object> processorsSection = JSONUtils.getObject(config, "processors");
    {
        for (Map.Entry<String, Object> procIter : processorsSection.entrySet()) {
            Map<String, Object> procSection = (Map<String, Object>) procIter.getValue();
            String processorId = procIter.getKey();
            String nodeId = CommonUtils.toString(procSection.get("@node"));
            if (CommonUtils.isEmpty(nodeId)) {
                // Legacy code support
                int divPos = processorId.indexOf(':');
                if (divPos != -1) {
                    nodeId = processorId.substring(0, divPos);
                    processorId = processorId.substring(divPos + 1);
                }
            }
            String propNamesId = CommonUtils.toString(procSection.get("@propNames"));
            DataTransferNodeDescriptor node = DataTransferRegistry.getInstance().getNodeById(nodeId);
            if (node != null) {
                Map<String, Object> props = new HashMap<>();
                DataTransferProcessorDescriptor nodeProcessor = node.getProcessor(processorId);
                if (nodeProcessor != null) {
                    for (String prop : CommonUtils.splitString(propNamesId, ',')) {
                        props.put(prop, procSection.get(prop));
                    }
                    processorPropsHistory.put(nodeProcessor, props);
                }
            }
        }
    }
    // Load nodes' settings (key is impl class simple name, value is descriptor)
    Map<String, DataTransferNodeDescriptor> nodeNames = new LinkedHashMap<>();
    if (producer != null) {
        nodeNames.put(producer.getNodeClass().getSimpleName(), producer);
    }
    if (consumer != null) {
        nodeNames.put(consumer.getNodeClass().getSimpleName(), consumer);
    }
    MonitorRunnableContext runnableContext = new MonitorRunnableContext(monitor);
    for (Map.Entry<String, DataTransferNodeDescriptor> node : nodeNames.entrySet()) {
        Map<String, Object> nodeSection = JSONUtils.getObject(config, node.getKey());
        IDataTransferSettings nodeSettings = this.getNodeSettings(node.getValue());
        if (nodeSettings != null) {
            nodeSettings.loadSettings(runnableContext, this, nodeSection);
        }
    }
    // Initialize pipes with loaded settings
    for (int i = 0; i < dataPipes.size(); i++) {
        DataTransferPipe pipe = dataPipes.get(i);
        if (pipe.getProducer() != null && pipe.getConsumer() != null) {
            try {
                pipe.initPipe(this, i, dataPipes.size());
            } catch (Exception e) {
                state.addError(e);
            }
        }
    }
}
Also used : DBException(org.jkiss.dbeaver.DBException) MonitorRunnableContext(org.jkiss.dbeaver.model.runtime.MonitorRunnableContext) DataTransferProcessorDescriptor(org.jkiss.dbeaver.tools.transfer.registry.DataTransferProcessorDescriptor) DBCException(org.jkiss.dbeaver.model.exec.DBCException) DBException(org.jkiss.dbeaver.DBException) DataTransferNodeDescriptor(org.jkiss.dbeaver.tools.transfer.registry.DataTransferNodeDescriptor) DBSObject(org.jkiss.dbeaver.model.struct.DBSObject) DBPObject(org.jkiss.dbeaver.model.DBPObject)

Aggregations

DBPObject (org.jkiss.dbeaver.model.DBPObject)4 DBCException (org.jkiss.dbeaver.model.exec.DBCException)4 MonitorRunnableContext (org.jkiss.dbeaver.model.runtime.MonitorRunnableContext)4 DBSObject (org.jkiss.dbeaver.model.struct.DBSObject)4 DBException (org.jkiss.dbeaver.DBException)2 DataTransferNodeDescriptor (org.jkiss.dbeaver.tools.transfer.registry.DataTransferNodeDescriptor)2 DataTransferProcessorDescriptor (org.jkiss.dbeaver.tools.transfer.registry.DataTransferProcessorDescriptor)2