package org.jtwig.resource.config;
import org.apache.commons.lang3.builder.Builder;
import org.jtwig.resource.loader.TypedResourceLoader;
import org.jtwig.resource.reference.ResourceReferenceExtractor;
import org.jtwig.resource.resolver.RelativeResourceResolver;
import org.jtwig.util.builder.ListBuilder;
import java.nio.charset.Charset;
public class ResourceConfigurationBuilder<B extends ResourceConfigurationBuilder> implements Builder<ResourceConfiguration> {
private final ListBuilder<B, RelativeResourceResolver> resourceResolvers;
private final ListBuilder<B, TypedResourceLoader> resourceLoaders;
private final ListBuilder<B, String> absoluteResourceTypes;
private ResourceReferenceExtractor resourceReferenceExtractor;
private Charset defaultInputCharset;
public ResourceConfigurationBuilder() {
this.resourceResolvers = new ListBuilder<>(self());
this.resourceLoaders = new ListBuilder<>(self());
this.absoluteResourceTypes = new ListBuilder<>(self());
}
public ResourceConfigurationBuilder(ResourceConfiguration prototype) {
this.resourceResolvers = new ListBuilder<>(self(), prototype.getRelativeResourceResolvers());
this.resourceLoaders = new ListBuilder<>(self(), prototype.getResourceLoaders());
this.absoluteResourceTypes = new ListBuilder<>(self(), prototype.getAbsoluteResourceTypes());
this.defaultInputCharset = prototype.getDefaultCharset();
this.resourceReferenceExtractor = prototype.getResourceReferenceExtractor();
}
public B withDefaultInputCharset(Charset defaultInputCharset) {
this.defaultInputCharset = defaultInputCharset;
return self();
}
public B withResourceReferenceExtractor(ResourceReferenceExtractor extractor) {
this.resourceReferenceExtractor = extractor;
return self();
}
public ListBuilder<B, RelativeResourceResolver> relativeResourceResolvers() {
return resourceResolvers;
}
public ListBuilder<B, TypedResourceLoader> resourceLoaders () {
return resourceLoaders;
}
public ListBuilder<B, String> absoluteResourceTypes() {
return absoluteResourceTypes;
}
private B self() {
return (B) this;
}
@Override
public ResourceConfiguration build() {
return new ResourceConfiguration(resourceResolvers.build(),
absoluteResourceTypes.build(),
resourceLoaders.build(),
resourceReferenceExtractor,
defaultInputCharset);
}
}