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