package io.divolte.server.config; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.google.common.base.MoreObjects; import io.divolte.server.AvroRecordBuffer; import io.divolte.server.SchemaRegistry; import io.divolte.server.processing.ProcessingPool; import javax.annotation.OverridingMethodsMustInvokeSuper; import javax.annotation.ParametersAreNonnullByDefault; @JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property = "type") @JsonSubTypes({ @JsonSubTypes.Type(value=HdfsSinkConfiguration.class, name = "hdfs"), @JsonSubTypes.Type(value=KafkaSinkConfiguration.class, name = "kafka"), }) @ParametersAreNonnullByDefault public abstract class SinkConfiguration { @OverridingMethodsMustInvokeSuper protected MoreObjects.ToStringHelper toStringHelper() { return MoreObjects.toStringHelper(this); } @Override @OverridingMethodsMustInvokeSuper public final String toString() { return toStringHelper().toString(); } @JsonIgnore public abstract SinkFactory getFactory(); @FunctionalInterface public interface SinkFactory { ProcessingPool<?, AvroRecordBuffer> create(ValidatedConfiguration configuration, String sinkName, SchemaRegistry schemaRegistry); } }