1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.ui.framework.ioc;
35
36 import info.magnolia.objectfactory.ParameterResolver;
37 import info.magnolia.ui.framework.datasource.definition.DatasourceDefinition;
38
39 import java.util.stream.Stream;
40
41
42
43
44
45
46
47 public class ViewComponentProvider extends UiContextBoundComponentProvider {
48
49 private final UiContextReference viewContextReference;
50 private final DatasourceDefinition datasourceDefinition;
51
52 public ViewComponentProvider(UiContextReference viewContextReference, DatasourceDefinition datasourceDefinition) {
53 super(viewContextReference);
54 this.datasourceDefinition = datasourceDefinition;
55 this.viewContextReference = viewContextReference;
56 }
57
58 public ViewComponentProvider(UiContextReference viewContextReference) {
59 super(viewContextReference);
60 this.viewContextReference = viewContextReference;
61 this.datasourceDefinition = super.getComponent(DatasourceDefinition.class);
62 }
63
64 @Override
65 protected Stream<UiContextReference> getReachableUiContextReferences() {
66 Stream<UiContextReference> reachableUiContextReferences = super.getReachableUiContextReferences();
67
68 if (datasourceDefinition != null) {
69 Stream<UiContextReference> datasourceComponentKey = Stream.of(UiContextReference.ofDatasourceComponent(datasourceDefinition.getName()));
70 return Stream.concat(reachableUiContextReferences, datasourceComponentKey);
71 }
72
73 return reachableUiContextReferences;
74 }
75
76 @Override
77 public <T> T newInstanceWithParameterResolvers(Class<T> type, ParameterResolver... parameters) {
78 ParameterResolver[] combinedParameters = new ParameterResolver[parameters.length + 1];
79 combinedParameters[parameters.length] = new ViewContextParameterResolver(viewContextReference);
80 System.arraycopy(parameters, 0, combinedParameters, 0, parameters.length);
81 return super.newInstanceWithParameterResolvers(type, combinedParameters);
82 }
83 }