org.apache.kafka.streams.kstream.internals.WrappingNullableUtils Maven / Gradle / Ivy
The 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.streams.kstream.internals;
import org.apache.kafka.common.serialization.Deserializer;
import org.apache.kafka.common.serialization.Serde;
import org.apache.kafka.common.serialization.Serializer;
import org.apache.kafka.streams.processor.api.ProcessorContext;
import org.apache.kafka.streams.processor.internals.SerdeGetter;
/**
* If a component's serdes are Wrapping serdes, then they require a little extra setup
* to be fully initialized at run time.
*/
public class WrappingNullableUtils {
@SuppressWarnings("unchecked")
private static Deserializer prepareDeserializer(final Deserializer specificDeserializer, final ProcessorContext context, final boolean isKey, final String name) {
final Deserializer deserializerToUse;
if (specificDeserializer == null) {
deserializerToUse = (Deserializer) (isKey ? context.keySerde().deserializer() : context.valueSerde().deserializer());
} else {
deserializerToUse = specificDeserializer;
initNullableDeserializer(deserializerToUse, new SerdeGetter(context));
}
return deserializerToUse;
}
@SuppressWarnings("unchecked")
private static Serializer prepareSerializer(final Serializer specificSerializer, final ProcessorContext context, final boolean isKey, final String name) {
final Serializer serializerToUse;
if (specificSerializer == null) {
serializerToUse = (Serializer) (isKey ? context.keySerde().serializer() : context.valueSerde().serializer());
} else {
serializerToUse = specificSerializer;
initNullableSerializer(serializerToUse, new SerdeGetter(context));
}
return serializerToUse;
}
@SuppressWarnings({"rawtypes", "unchecked"})
private static Serde prepareSerde(final Serde specificSerde, final SerdeGetter getter, final boolean isKey) {
final Serde serdeToUse;
if (specificSerde == null) {
serdeToUse = (Serde) (isKey ? getter.keySerde() : getter.valueSerde());
} else {
serdeToUse = specificSerde;
}
if (serdeToUse instanceof WrappingNullableSerde) {
((WrappingNullableSerde) serdeToUse).setIfUnset(getter);
}
return serdeToUse;
}
public static Deserializer prepareKeyDeserializer(final Deserializer specificDeserializer, final ProcessorContext context, final String name) {
return prepareDeserializer(specificDeserializer, context, true, name);
}
public static Deserializer prepareValueDeserializer(final Deserializer specificDeserializer, final ProcessorContext context, final String name) {
return prepareDeserializer(specificDeserializer, context, false, name);
}
public static Serializer prepareKeySerializer(final Serializer specificSerializer, final ProcessorContext context, final String name) {
return prepareSerializer(specificSerializer, context, true, name);
}
public static Serializer prepareValueSerializer(final Serializer specificSerializer, final ProcessorContext context, final String name) {
return prepareSerializer(specificSerializer, context, false, name);
}
public static Serde prepareKeySerde(final Serde specificSerde, final SerdeGetter getter) {
return prepareSerde(specificSerde, getter, true);
}
public static Serde prepareValueSerde(final Serde specificSerde, final SerdeGetter getter) {
return prepareSerde(specificSerde, getter, false);
}
@SuppressWarnings({"rawtypes", "unchecked"})
public static void initNullableSerializer(final Serializer specificSerializer, final SerdeGetter getter) {
if (specificSerializer instanceof WrappingNullableSerializer) {
((WrappingNullableSerializer) specificSerializer).setIfUnset(getter);
}
}
@SuppressWarnings({"rawtypes", "unchecked"})
public static void initNullableDeserializer(final Deserializer specificDeserializer, final SerdeGetter getter) {
if (specificDeserializer instanceof WrappingNullableDeserializer) {
((WrappingNullableDeserializer) specificDeserializer).setIfUnset(getter);
}
}
}