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