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.virtualuri;
35
36 import info.magnolia.config.registry.AbstractRegistry;
37 import info.magnolia.config.registry.DefinitionMetadataBuilder;
38 import info.magnolia.config.registry.DefinitionProvider;
39 import info.magnolia.config.registry.DefinitionProviderProblemLogger;
40 import info.magnolia.config.registry.DefinitionProviderWrapper;
41 import info.magnolia.config.registry.DefinitionType;
42 import info.magnolia.module.ModuleRegistry;
43 import info.magnolia.virtualuri.compatibility.VirtualUriMappingAdapter;
44
45 import javax.inject.Inject;
46 import javax.inject.Singleton;
47
48 import org.slf4j.Logger;
49 import org.slf4j.LoggerFactory;
50
51
52
53
54 @Singleton
55 public class VirtualUriRegistry extends AbstractRegistry<VirtualUriMapping> {
56 private static final Logger log = LoggerFactory.getLogger(VirtualUriRegistry.class);
57
58 static final DefinitionType TYPE = new DefinitionType() {
59 @Override
60 public String name() {
61 return "virtualUriMapping";
62 }
63
64 @Override
65 public Class baseClass() {
66 return VirtualUriMapping.class;
67 }
68 };
69
70 @Inject
71 public VirtualUriRegistry(ModuleRegistry moduleRegistry) {
72 super(moduleRegistry);
73 }
74
75 @Override
76 public DefinitionType type() {
77 return TYPE;
78 }
79
80 @Override
81 public DefinitionMetadataBuilder newMetadataBuilder() {
82 return DefinitionMetadataBuilder.usingModuleAndRelativePathAsId();
83 }
84
85 @Override
86 protected DefinitionProvider<VirtualUriMapping> onRegister(DefinitionProvider<VirtualUriMapping> provider) {
87 return super.onRegister(newVirtualMappingProvider(provider));
88 }
89
90 private DefinitionProvider<VirtualUriMapping> newVirtualMappingProvider(DefinitionProvider<VirtualUriMapping> provider) {
91
92 if (provider.isValid()) {
93 if (provider.get() instanceof info.magnolia.cms.beans.config.VirtualURIMapping) {
94 provider = new VirtualUriMappingCompatibilityProvider(provider);
95 }
96
97 VirtualUriMappingProvider validatingProvider = new VirtualUriMappingProvider(provider);
98
99
100 if (!validatingProvider.isValid()) {
101
102 provider.getProblems().add(
103 DefinitionProvider.Problem
104 .minor()
105 .withDetails(String.format("Config for %s is incomplete, mapping is disabled.", provider.get()))
106 .withType(DefinitionProvider.Problem.DefaultTypes.SEMANTIC)
107 .withTitle("VirtualUriMapping problem")
108 .build());
109
110 DefinitionProviderProblemLogger
111 .withLoggingContext(log, true)
112 .logProblems(provider);
113 }
114 }
115
116 return provider;
117 }
118
119
120
121
122
123 static class VirtualUriMappingCompatibilityProvider extends DefinitionProviderWrapper<VirtualUriMapping> {
124
125 VirtualUriMappingCompatibilityProvider(DefinitionProvider oldProvider) {
126 super(oldProvider);
127 }
128
129 @Override
130 public VirtualUriMapping get() throws InvalidDefinitionException {
131 return new VirtualUriMappingAdapter((info.magnolia.cms.beans.config.VirtualURIMapping) super.get());
132 }
133 }
134
135
136
137
138 static class VirtualUriMappingProvider extends DefinitionProviderWrapper<VirtualUriMapping> {
139
140 protected VirtualUriMappingProvider(DefinitionProvider<VirtualUriMapping> delegate) {
141 super(delegate);
142 }
143
144 @Override
145 public boolean isValid() {
146 return super.isValid() && get().isValid();
147 }
148 }
149 }