mirror of
https://github.com/magefree/mage.git
synced 2025-12-23 12:02:01 -08:00
Merge pull request #7158 from fburato/app-wiring-refactor
Application wiring refactor and externalise configuration path for server
This commit is contained in:
commit
81e0cc6403
59 changed files with 2367 additions and 779 deletions
41
Mage.Common/src/main/java/mage/utils/FluentBuilder.java
Normal file
41
Mage.Common/src/main/java/mage/utils/FluentBuilder.java
Normal 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();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue