package io.github.azagniotov.stubby4j.stubs;
import io.github.azagniotov.stubby4j.yaml.ConfigurableYAMLProperty;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import static io.github.azagniotov.generics.TypeSafeConverter.as;
public abstract class AbstractBuilder<T extends ReflectableStub> {
final Map<ConfigurableYAMLProperty, Object> fieldNameAndValues;
AbstractBuilder() {
this.fieldNameAndValues = new HashMap<>();
}
<E> E getStaged(final Class<E> clazzor, final ConfigurableYAMLProperty property, E defaultValue) {
return fieldNameAndValues.containsKey(property) ? as(clazzor, fieldNameAndValues.get(property)) : defaultValue;
}
public void stage(final Optional<ConfigurableYAMLProperty> fieldNameOptional, final Optional<Object> fieldValueOptional) {
if (fieldNameOptional.isPresent() && fieldValueOptional.isPresent()) {
fieldNameAndValues.put(fieldNameOptional.get(), fieldValueOptional.get());
}
}
public abstract T build();
}