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.config.source.yaml.construct;
35
36 import static info.magnolia.config.registry.DefinitionProvider.Problem.DefaultTypes.RESOLUTION;
37
38 import info.magnolia.config.registry.DefinitionProvider.Problem;
39 import info.magnolia.config.source.yaml.YamlReader;
40 import info.magnolia.config.source.yaml.dependency.YamlFileDependency;
41 import info.magnolia.resourceloader.ResourceOrigin;
42
43 import java.util.function.Consumer;
44
45 import org.yaml.snakeyaml.nodes.Node;
46 import org.yaml.snakeyaml.nodes.ScalarNode;
47
48
49
50
51
52
53 public final class IncludeYamlFile extends MgnlYamlConstruct {
54
55 public static final String TAG = "!include";
56
57 private final YamlReader yamlReader;
58 private final ResourceOrigin<?> resourceOrigin;
59
60 public IncludeYamlFile(YamlReader yamlReader, ResourceOrigin<?> resourceOrigin, Consumer<Problem> problemCollector) {
61 super(problemCollector);
62 this.yamlReader = yamlReader;
63 this.resourceOrigin = resourceOrigin;
64 }
65
66 @Override
67 public Object construct(Node node) {
68 if (!(node instanceof ScalarNode)) {
69 throw new IllegalArgumentException(String.format("Non-scalar %s: %s", TAG, node.toString()));
70 }
71
72 final ScalarNode scalarNode = (ScalarNode) node;
73 final String path = scalarNode.getValue();
74
75 reportProblem(
76 Problem.minor()
77 .withType(RESOLUTION)
78 .withTitle("Deprecated YAML construct usage")
79 .withDetails(String.format("Resource [%s] is included via deprecated syntax (!include <resource_path), use !include:<resource_path> syntax instead", path))
80 .build());
81
82
83 final YamlFileDependency dependency = new YamlFileDependency(resourceOrigin, path, yamlReader, getConstructor().getDependencyAggregator(), this::reportProblem);
84 getConstructor().getDependencyAggregator().addDependency(dependency);
85
86 return dependency.readData();
87 }
88 }