package org.jtwig.property.configuration; import org.apache.commons.lang3.builder.Builder; import org.jtwig.property.selection.cache.SelectionPropertyResolverCache; import org.jtwig.property.strategy.PropertyResolverStrategy; import org.jtwig.util.builder.ListBuilder; public class PropertyResolverConfigurationBuilder<B extends PropertyResolverConfigurationBuilder> implements Builder<PropertyResolverConfiguration> { private SelectionPropertyResolverCache cache; private final ListBuilder<B, PropertyResolverStrategy> propertyResolverStrategies; public PropertyResolverConfigurationBuilder() { this.propertyResolverStrategies = new ListBuilder<>(self()); } public PropertyResolverConfigurationBuilder(PropertyResolverConfiguration prototype) { this.cache = prototype.getCache(); this.propertyResolverStrategies = new ListBuilder<>(self(), prototype.getPropertyResolverStrategies()); } public B withCache(SelectionPropertyResolverCache cache) { this.cache = cache; return self(); } public ListBuilder<B, PropertyResolverStrategy> propertyResolverStrategies() { return propertyResolverStrategies; } @Override public PropertyResolverConfiguration build() { return new PropertyResolverConfiguration( cache, propertyResolverStrategies.build() ); } protected B self () { return (B) this; } }