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 org.apache.maven.di.Key;
29
30 import static java.util.stream.Collectors.toSet;
31
32 public abstract class BindingInitializer<T> {
33
34 private final Set<Key<?>> dependencies;
35
36 protected BindingInitializer(Set<Key<?>> dependencies) {
37 this.dependencies = dependencies;
38 }
39
40 public Set<Key<?>> getDependencies() {
41 return dependencies;
42 }
43
44 public abstract Consumer<T> compile(Function<Key<?>, Supplier<?>> compiler);
45
46 public static <T> BindingInitializer<T> combine(List<BindingInitializer<T>> bindingInitializers) {
47 Set<Key<?>> deps = bindingInitializers.stream()
48 .map(BindingInitializer::getDependencies)
49 .flatMap(Collection::stream)
50 .collect(toSet());
51 return new BindingInitializer<T>(deps) {
52 @Override
53 public Consumer<T> compile(Function<Key<?>, Supplier<?>> compiler) {
54 return instance -> bindingInitializers.stream()
55 .map(bindingInitializer -> bindingInitializer.compile(compiler))
56 .forEach(i -> i.accept(instance));
57 }
58 };
59 }
60 }