1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.di.impl;
20
21 import java.util.Collection;
22 import java.util.List;
23 import java.util.Set;
24 import java.util.function.Consumer;
25 import java.util.function.Function;
26 import java.util.function.Supplier;
27
28 import static java.util.stream.Collectors.toSet;
29
30 public abstract class BindingInitializer<T> {
31
32 private final Set<Dependency<?>> dependencies;
33
34 protected BindingInitializer(Set<Dependency<?>> dependencies) {
35 this.dependencies = dependencies;
36 }
37
38 public Set<Dependency<?>> getDependencies() {
39 return dependencies;
40 }
41
42 public abstract Consumer<T> compile(Function<Dependency<?>, Supplier<?>> compiler);
43
44 public static <T> BindingInitializer<T> combine(List<BindingInitializer<T>> bindingInitializers) {
45 Set<Dependency<?>> deps = bindingInitializers.stream()
46 .map(BindingInitializer::getDependencies)
47 .flatMap(Collection::stream)
48 .collect(toSet());
49 return new BindingInitializer<>(deps) {
50 @Override
51 public Consumer<T> compile(Function<Dependency<?>, Supplier<?>> compiler) {
52 return instance -> bindingInitializers.stream()
53 .map(bindingInitializer -> bindingInitializer.compile(compiler))
54 .forEach(i -> i.accept(instance));
55 }
56 };
57 }
58 }