package io.divolte.server.config; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.MoreObjects; import io.divolte.server.hdfs.HdfsFlushingPool; import javax.annotation.ParametersAreNonnullByDefault; import javax.annotation.ParametersAreNullableByDefault; import java.util.Optional; @ParametersAreNonnullByDefault public class HdfsSinkConfiguration extends SinkConfiguration { private static final String DEFAULT_REPLICATION = "3"; public final short replication; public final FileStrategyConfiguration fileStrategy; @JsonCreator @ParametersAreNullableByDefault HdfsSinkConfiguration(@JsonProperty(defaultValue=DEFAULT_REPLICATION) final Short replication, final FileStrategyConfiguration fileStrategy) { // TODO: register a custom deserializer with Jackson that uses the defaultValue property from the annotation to fix this this.replication = Optional.ofNullable(replication).orElseGet(() -> Short.valueOf(DEFAULT_REPLICATION)); this.fileStrategy = Optional.ofNullable(fileStrategy).orElse(FileStrategyConfiguration.DEFAULT_FILE_STRATEGY_CONFIGURATION); } @Override protected MoreObjects.ToStringHelper toStringHelper() { return super.toStringHelper() .add("replication", replication) .add("fileStrategy", fileStrategy); } @Override public SinkFactory getFactory() { return HdfsFlushingPool::new; } }