ConfigBuilderImpl.java

package io.github.jonloucks.metalog.impl;

import io.github.jonloucks.contracts.api.Contracts;
import io.github.jonloucks.metalog.api.Metalog;
import io.github.jonloucks.metalog.api.MetalogFactory;

import java.time.Duration;

import static io.github.jonloucks.contracts.api.Checks.contractsCheck;
import static io.github.jonloucks.contracts.api.Checks.nullCheck;

final class ConfigBuilderImpl implements Metalog.Config.Builder {
    @Override
    public Builder useReflection(boolean useReflection) {
        this.useReflection = useReflection;
        return this;
    }
    
    @Override
    public Builder useServiceLoader(boolean useServiceLoader) {
        this.useServiceLoader = useServiceLoader;
        return this;
    }
    
    @Override
    public Builder contracts(Contracts contracts) {
        this.contracts = contractsCheck(contracts);
        return this;
    }
    
    @Override
    public Builder keyedQueueLimit(int keyedQueueLimit) {
        this.keyedQueueLimit = keyedQueueLimit;
        return this;
    }
    
    @Override
    public Builder unkeyedThreadCount(int unkeyedThreadCount) {
        this.unkeyedThreadCount = unkeyedThreadCount;
        return this;
    }
    
    @Override
    public Builder unkeyedFairness(boolean unkeyedFairness) {
        this.unkeyedFairness = unkeyedFairness;
        return this;
    }
    
    @Override
    public Builder shutdownTimeout(Duration shutdownTimeout) {
        this.shutdownTimeout = nullCheck(shutdownTimeout, "Shut down timeout must be present.");
        return this;
    }
 
    @Override
    public Builder reflectionClassName(String reflectionClassName) {
        this.reflectionClassName = nullCheck(reflectionClassName, "Reflection class name must be present.");
        return this;
    }
    
    @Override
    public Builder serviceLoaderClass(Class<? extends MetalogFactory> serviceLoaderClass) {
        this.serviceLoaderClass = nullCheck(serviceLoaderClass, "Service loader class must be present.");
        return this;
    }
    
    @Override
    public Builder keyedSubscription(boolean keyedSubscription) {
        this.keyedSubscription = keyedSubscription;
        return this;
    }
    
    @Override
    public boolean useReflection() {
        return useReflection;
    }
    
    @Override
    public String reflectionClassName() {
        return reflectionClassName;
    }
    
    @Override
    public boolean useServiceLoader() {
        return useServiceLoader;
    }
    
    @Override
    public Class<? extends MetalogFactory> serviceLoaderClass() {
        return serviceLoaderClass;
    }
    
    @Override
    public Contracts contracts() {
        return contracts;
    }
    
    @Override
    public int keyedQueueLimit() {
        return keyedQueueLimit;
    }
    
    @Override
    public int unkeyedThreadCount() {
        return unkeyedThreadCount;
    }
    
    @Override
    public boolean unkeyedFairness() {
        return unkeyedFairness;
    }
    
    @Override
    public Duration shutdownTimeout() {
        return shutdownTimeout;
    }
    
    @Override
    public boolean keyedSubscription() {
        return keyedSubscription;
    }
 
    ConfigBuilderImpl() {
    
    }
    
    private boolean useReflection = DEFAULT.useReflection();
    private boolean useServiceLoader = DEFAULT.useServiceLoader();
    private Contracts contracts = DEFAULT.contracts();
    private int keyedQueueLimit = DEFAULT.keyedQueueLimit();
    private int unkeyedThreadCount = DEFAULT.unkeyedThreadCount();
    private boolean unkeyedFairness = DEFAULT.unkeyedFairness();
    private Duration shutdownTimeout = DEFAULT.shutdownTimeout();
    private String reflectionClassName = DEFAULT.reflectionClassName();
    private Class<? extends MetalogFactory> serviceLoaderClass = DEFAULT.serviceLoaderClass();
    private boolean keyedSubscription = DEFAULT.keyedSubscription();
}