/* * Copyright (c) 2018, salesforce.com, inc. * All rights reserved. * SPDX-License-Identifier: BSD-3-Clause * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause * */ package com.salesforce.mirus.config; import java.util.*; import org.apache.kafka.connect.storage.Converter; import org.apache.kafka.connect.storage.ConverterType; import org.apache.kafka.connect.storage.HeaderConverter; import org.apache.kafka.connect.storage.StringConverterConfig; import org.apache.kafka.connect.transforms.util.SimpleConfig; /** * Internal task-level configuration sent by {@link com.salesforce.mirus.MirusSourceConnector} to * {@link com.salesforce.mirus.MirusSourceTask} instances. */ public class TaskConfig { private final SimpleConfig simpleConfig; public TaskConfig(Map<String, String> properties) { this.simpleConfig = new SimpleConfig(TaskConfigDefinition.configDef(), properties); } private static Set<String> keys() { return TaskConfigDefinition.configDef().names(); } /** * Filter to remove any properties not used by TaskConfig * * @param properties the incoming Source configuration properties * @return the properties accepted by TaskConfig */ public static Map<String, String> filterProperties(Map<String, String> properties) { Map<String, String> result = new HashMap<>(); Set<String> taskKeys = keys(); properties .entrySet() .stream() .filter(e -> taskKeys.contains(e.getKey()) || e.getKey().startsWith("consumer.")) .forEach(e -> result.put(e.getKey(), e.getValue())); return result; } public Map<String, Object> getConsumerProperties() { return simpleConfig.originalsWithPrefix("consumer."); } public long getConsumerPollTimeout() { return simpleConfig.getLong(SourceConfigDefinition.POLL_TIMEOUT_MS.key); } public String getDestinationTopicNamePrefix() { return simpleConfig.getString(SourceConfigDefinition.DESTINATION_TOPIC_NAME_PREFIX.key); } public String getDestinationTopicNameSuffix() { return simpleConfig.getString(SourceConfigDefinition.DESTINATION_TOPIC_NAME_SUFFIX.key); } public String getInternalTaskPartitions() { return simpleConfig.getString(TaskConfigDefinition.PARTITION_LIST); } public boolean getEnablePartitionMatching() { return simpleConfig.getBoolean(SourceConfigDefinition.ENABLE_PARTITION_MATCHING.key); } public Converter getKeyConverter() { Map<String, Object> conf = simpleConfig.originals(); conf.put(StringConverterConfig.TYPE_CONFIG, ConverterType.KEY.getName()); SimpleConfig config = new SimpleConfig(TaskConfigDefinition.configDef(), conf); return config.getConfiguredInstance( SourceConfigDefinition.SOURCE_KEY_CONVERTER.key, Converter.class); } public Converter getValueConverter() { Map<String, Object> conf = simpleConfig.originals(); conf.put(StringConverterConfig.TYPE_CONFIG, ConverterType.VALUE.getName()); SimpleConfig config = new SimpleConfig(TaskConfigDefinition.configDef(), conf); return config.getConfiguredInstance( SourceConfigDefinition.SOURCE_VALUE_CONVERTER.key, Converter.class); } public HeaderConverter getHeaderConverter() { Map<String, Object> conf = simpleConfig.originals(); conf.put(StringConverterConfig.TYPE_CONFIG, ConverterType.HEADER.getName()); SimpleConfig config = new SimpleConfig(TaskConfigDefinition.configDef(), conf); return config.getConfiguredInstance( SourceConfigDefinition.SOURCE_HEADER_CONVERTER.key, HeaderConverter.class); } }