package io.divolte.server.config;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableSet;
import javax.annotation.Nullable;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.Objects;
import java.util.Optional;
@ParametersAreNonnullByDefault
public class MappingConfiguration {
private static final String DEFAULT_DISCARD_CORRUPTED = "false";
private static final String DEFAULT_DISCARD_DUPLICATES = "false";
public final Optional<String> schemaFile;
public final Optional<String> mappingScriptFile;
public final ImmutableSet<String> sources;
public final ImmutableSet<String> sinks;
public final boolean discardCorrupted;
public final boolean discardDuplicates;
@JsonCreator
MappingConfiguration(final Optional<String> schemaFile,
final Optional<String> mappingScriptFile,
@JsonProperty(required = true)
final ImmutableSet<String> sources,
@JsonProperty(required = true)
final ImmutableSet<String> sinks,
@JsonProperty(defaultValue=DEFAULT_DISCARD_CORRUPTED)
@Nullable
final Boolean discardCorrupted,
@JsonProperty(defaultValue=DEFAULT_DISCARD_DUPLICATES)
@Nullable
final Boolean discardDuplicates) {
this.schemaFile = Objects.requireNonNull(schemaFile);
this.mappingScriptFile = Objects.requireNonNull(mappingScriptFile);
this.sources = Objects.requireNonNull(sources);
this.sinks = Objects.requireNonNull(sinks);
// TODO: register a custom deserializer with Jackson that uses the defaultValue property from the annotation to fix this
this.discardCorrupted = Optional.ofNullable(discardCorrupted).orElseGet(() -> Boolean.valueOf(DEFAULT_DISCARD_CORRUPTED));
this.discardDuplicates = Optional.ofNullable(discardDuplicates).orElseGet(() -> Boolean.valueOf(DEFAULT_DISCARD_DUPLICATES));
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("schemaFile", schemaFile)
.add("mappingScriptFile", mappingScriptFile)
.add("sources", sources)
.add("sinks", sinks)
.add("discardCorrupted", discardCorrupted)
.add("discardDuplicates", discardDuplicates)
.toString();
}
}