org.apache.kafka.streams.kstream.internals.graph.BaseRepartitionNode Maven / Gradle / Ivy
/*
* 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.graph;
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.StreamPartitioner;
import org.apache.kafka.streams.processor.internals.InternalTopicProperties;
public abstract class BaseRepartitionNode extends GraphNode {
protected final Serde keySerde;
protected final Serde valueSerde;
protected final String sinkName;
protected final String sourceName;
protected final String repartitionTopic;
protected final StreamPartitioner partitioner;
protected final InternalTopicProperties internalTopicProperties;
protected ProcessorParameters processorParameters;
BaseRepartitionNode(final String nodeName,
final String sourceName,
final ProcessorParameters processorParameters,
final Serde keySerde,
final Serde valueSerde,
final String sinkName,
final String repartitionTopic,
final StreamPartitioner partitioner,
final InternalTopicProperties internalTopicProperties) {
super(nodeName);
this.keySerde = keySerde;
this.valueSerde = valueSerde;
this.sinkName = sinkName;
this.sourceName = sourceName;
this.repartitionTopic = repartitionTopic;
this.processorParameters = processorParameters;
this.partitioner = partitioner;
this.internalTopicProperties = internalTopicProperties;
}
Serializer valueSerializer() {
return valueSerde != null ? valueSerde.serializer() : null;
}
Deserializer valueDeserializer() {
return valueSerde != null ? valueSerde.deserializer() : null;
}
Serializer keySerializer() {
return keySerde != null ? keySerde.serializer() : null;
}
Deserializer keyDeserializer() {
return keySerde != null ? keySerde.deserializer() : null;
}
public void setProcessorParameters(final ProcessorParameters processorParameters) {
this.processorParameters = processorParameters;
}
public ProcessorParameters getProcessorParameters() {
return processorParameters;
}
@Override
public String toString() {
return "BaseRepartitionNode{" +
"keySerde=" + keySerde +
", valueSerde=" + valueSerde +
", sinkName='" + sinkName + '\'' +
", sourceName='" + sourceName + '\'' +
", repartitionTopic='" + repartitionTopic + '\'' +
", processorParameters=" + processorParameters + '\'' +
", partitioner=" + partitioner +
", internalTopicProperties=" + internalTopicProperties +
"} " + super.toString();
}
public abstract static class BaseRepartitionNodeBuilder> {
protected String nodeName;
protected ProcessorParameters processorParameters;
protected Serde keySerde;
protected Serde valueSerde;
protected String sinkName;
protected String sourceName;
protected String repartitionTopic;
protected StreamPartitioner partitioner;
protected InternalTopicProperties internalTopicProperties = InternalTopicProperties.empty();
public BaseRepartitionNodeBuilder withProcessorParameters(final ProcessorParameters processorParameters) {
this.processorParameters = processorParameters;
return this;
}
public BaseRepartitionNodeBuilder withKeySerde(final Serde keySerde) {
this.keySerde = keySerde;
return this;
}
public BaseRepartitionNodeBuilder withValueSerde(final Serde valueSerde) {
this.valueSerde = valueSerde;
return this;
}
public BaseRepartitionNodeBuilder withSinkName(final String sinkName) {
this.sinkName = sinkName;
return this;
}
public BaseRepartitionNodeBuilder withSourceName(final String sourceName) {
this.sourceName = sourceName;
return this;
}
public BaseRepartitionNodeBuilder withRepartitionTopic(final String repartitionTopic) {
this.repartitionTopic = repartitionTopic;
return this;
}
public BaseRepartitionNodeBuilder withStreamPartitioner(final StreamPartitioner partitioner) {
this.partitioner = partitioner;
return this;
}
public BaseRepartitionNodeBuilder withNodeName(final String nodeName) {
this.nodeName = nodeName;
return this;
}
public BaseRepartitionNodeBuilder withInternalTopicProperties(final InternalTopicProperties internalTopicProperties) {
this.internalTopicProperties = internalTopicProperties;
return this;
}
public abstract T build();
}
}