Merge pull request #7158 from fburato/app-wiring-refactor

Application wiring refactor and externalise configuration path for server
This commit is contained in:
Oleg Agafonov 2020-12-26 07:42:46 +01:00 committed by GitHub
commit 81e0cc6403
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
59 changed files with 2367 additions and 779 deletions

View file

@ -0,0 +1,41 @@
package mage.utils;
import java.util.ArrayList;
import java.util.function.Consumer;
import java.util.function.Supplier;
/**
* A base class for fluent, immutable, composable builders.
*
* @see <a href="https://github.com/fburato/functionalutils/blob/master/utils/src/main/java/com/github/fburato/functionalutils/utils/Builder.java">Builder</a>
*/
public abstract class FluentBuilder<ToBuild, RealBuilder extends FluentBuilder<ToBuild, RealBuilder>> {
final ArrayList<Consumer<RealBuilder>> buildSequence;
private final Supplier<RealBuilder> newReference;
protected FluentBuilder(Supplier<RealBuilder> newReference) {
this.buildSequence = new ArrayList<>();
this.newReference = newReference;
}
private RealBuilder copy() {
final RealBuilder realBuilder = newReference.get();
realBuilder.buildSequence.addAll(buildSequence);
return realBuilder;
}
protected abstract ToBuild makeValue();
public RealBuilder with(Consumer<RealBuilder> consumer) {
final RealBuilder nextBuilder = this.copy();
nextBuilder.buildSequence.add(consumer);
return nextBuilder;
}
public ToBuild build() {
final RealBuilder instance = this.copy();
instance.buildSequence.forEach(c -> c.accept(instance));
return instance.makeValue();
}
}