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.pages.rendering.registry.validator;
35
36 import static info.magnolia.config.registry.DefinitionProvider.Problem.*;
37
38 import info.magnolia.config.registry.DefinitionMetadata;
39 import info.magnolia.config.registry.DefinitionProvider;
40 import info.magnolia.rendering.renderer.registry.RendererRegistry;
41 import info.magnolia.rendering.template.AreaDefinition;
42 import info.magnolia.rendering.template.TemplateDefinition;
43 import info.magnolia.rendering.template.registry.TemplateDefinitionRegistry;
44 import info.magnolia.rendering.template.registry.validator.TemplateDefinitionValidator;
45 import info.magnolia.resourceloader.ResourceOrigin;
46 import info.magnolia.ui.dialog.DialogDefinitionRegistry;
47 import info.magnolia.ui.dialog.registry.DefinitionTypes;
48 import info.magnolia.util.DeprecationUtil;
49
50 import java.util.Collection;
51 import java.util.Optional;
52
53 import javax.inject.Inject;
54 import javax.inject.Provider;
55
56
57
58
59 public class DialogAwareTemplateDefinitionValidator extends TemplateDefinitionValidator {
60
61 private final DialogDefinitionRegistry dialogDefinitionRegistry;
62
63 @Inject
64 public DialogAwareTemplateDefinitionValidator(Provider<TemplateDefinitionRegistry> templateDefinitionRegistryProvider, RendererRegistry rendererRegistry, ResourceOrigin resourceOrigin, DialogDefinitionRegistry dialogDefinitionRegistry) {
65 super(templateDefinitionRegistryProvider, rendererRegistry, resourceOrigin);
66 this.dialogDefinitionRegistry = dialogDefinitionRegistry;
67 }
68
69 @Override
70 protected void validateDefinition(Collection<DefinitionProvider.Problem> problems, DefinitionProvider<TemplateDefinition> definitionProvider) {
71 super.validateDefinition(problems, definitionProvider);
72 validateDialog(definitionProvider, problems, "", definitionProvider.get().getDialog());
73 }
74
75 @Override
76 protected void validateArea(DefinitionProvider<TemplateDefinition> definitionProvider, Collection<DefinitionProvider.Problem> problems, String rootPath, AreaDefinition areaDefinition) {
77 super.validateArea(definitionProvider, problems, rootPath, areaDefinition);
78 final String areaPath = rootPath + "areas/" + areaDefinition.getName() + "/";
79 validateDialog(definitionProvider, problems, areaPath, areaDefinition.getDialog());
80 }
81
82 private void validateDialog(DefinitionProvider definitionProvider, Collection<DefinitionProvider.Problem> problems, String rootPath, String dialog) {
83 if (dialog != null) {
84 Optional<DefinitionMetadata> definitionMetadataOptional = dialogDefinitionRegistry.getAllMetadata().stream().filter(metadata -> metadata.getReferenceId().equals(dialog)).findFirst();
85 if (!definitionMetadataOptional.isPresent()) {
86 problems.add(major()
87 .withType(DefinitionProvider.Problem.DefaultTypes.REFERENCES)
88 .withTitle("Template dialog definition problem")
89 .withDetails("Dialog {" + dialog + "} is not registered.")
90 .withLocation(rootPath + dialog)
91 .build());
92 } else if (definitionMetadataOptional.get().getDeprecation().isPresent() && !definitionProvider.getMetadata().getDeprecation().isPresent()) {
93 DefinitionMetadata definitionMetadata = definitionMetadataOptional.get();
94 definitionMetadata.getDeprecation().ifPresent(deprecation -> {
95 String deprecationMessage = DeprecationUtil.getDeprecationMessage(DefinitionTypes.DIALOG.getName(),
96 definitionMetadata.getName(), deprecation.since(), deprecation.description());
97
98 problems.add(deprecated()
99 .withTitle("Deprecated definition usage")
100 .withDetails(deprecationMessage)
101 .withLocation(rootPath + dialog)
102 .withType(DefinitionProvider.Problem.DefaultTypes.RESOLUTION)
103 .build());
104 });
105 }
106 }
107 }
108 }