All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.kafka.connect.transforms.SetSchemaMetadata Maven / Gradle / Ivy

There is a newer version: 0.10.2.0-bkbase.3
Show newest version
/**
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 * 

* http://www.apache.org/licenses/LICENSE-2.0 *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. **/ package org.apache.kafka.connect.transforms; import org.apache.kafka.common.config.ConfigDef; import org.apache.kafka.common.config.ConfigException; import org.apache.kafka.connect.connector.ConnectRecord; import org.apache.kafka.connect.data.ConnectSchema; import org.apache.kafka.connect.data.Schema; import org.apache.kafka.connect.transforms.util.SimpleConfig; import java.util.Map; import static org.apache.kafka.connect.transforms.util.Requirements.requireSchema; public abstract class SetSchemaMetadata> implements Transformation { public static final String OVERVIEW_DOC = "Set the schema name, version or both on the record's key (" + Key.class.getCanonicalName() + ")" + " or value (" + Value.class.getCanonicalName() + ") schema."; private interface ConfigName { String SCHEMA_NAME = "schema.name"; String SCHEMA_VERSION = "schema.version"; } public static final ConfigDef CONFIG_DEF = new ConfigDef() .define(ConfigName.SCHEMA_NAME, ConfigDef.Type.STRING, null, ConfigDef.Importance.HIGH, "Schema name to set.") .define(ConfigName.SCHEMA_VERSION, ConfigDef.Type.INT, null, ConfigDef.Importance.HIGH, "Schema version to set."); private String schemaName; private Integer schemaVersion; @Override public void configure(Map configs) { final SimpleConfig config = new SimpleConfig(CONFIG_DEF, configs); schemaName = config.getString(ConfigName.SCHEMA_NAME); schemaVersion = config.getInt(ConfigName.SCHEMA_VERSION); if (schemaName == null && schemaVersion == null) { throw new ConfigException("Neither schema name nor version configured"); } } @Override public R apply(R record) { final Schema schema = operatingSchema(record); requireSchema(schema, "updating schema metadata"); final boolean isArray = schema.type() == Schema.Type.ARRAY; final boolean isMap = schema.type() == Schema.Type.MAP; final Schema updatedSchema = new ConnectSchema( schema.type(), schema.isOptional(), schema.defaultValue(), schemaName != null ? schemaName : schema.name(), schemaVersion != null ? schemaVersion : schema.version(), schema.doc(), schema.parameters(), schema.fields(), isMap ? schema.keySchema() : null, isMap || isArray ? schema.valueSchema() : null ); return newRecord(record, updatedSchema); } @Override public ConfigDef config() { return CONFIG_DEF; } @Override public void close() { } protected abstract Schema operatingSchema(R record); protected abstract R newRecord(R record, Schema updatedSchema); /** * Set the schema name, version or both on the record's key schema. */ public static class Key> extends SetSchemaMetadata { @Override protected Schema operatingSchema(R record) { return record.keySchema(); } @Override protected R newRecord(R record, Schema updatedSchema) { return record.newRecord(record.topic(), record.kafkaPartition(), updatedSchema, record.key(), record.valueSchema(), record.value(), record.timestamp()); } } /** * Set the schema name, version or both on the record's value schema. */ public static class Value> extends SetSchemaMetadata { @Override protected Schema operatingSchema(R record) { return record.valueSchema(); } @Override protected R newRecord(R record, Schema updatedSchema) { return record.newRecord(record.topic(), record.kafkaPartition(), record.keySchema(), record.key(), updatedSchema, record.value(), record.timestamp()); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy