1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.mycore.lod;
20
21 import java.lang.reflect.Method;
22 import java.util.List;
23 import java.util.stream.Collectors;
24 import java.util.stream.Stream;
25
26 import org.mycore.common.config.MCRConfiguration2;
27 import org.mycore.frontend.jersey.feature.MCRJerseyDefaultFeature;
28 import org.mycore.restapi.MCREnableTransactionFilter;
29 import org.mycore.restapi.annotations.MCRRequireTransaction;
30
31 import jakarta.ws.rs.container.ResourceInfo;
32 import jakarta.ws.rs.core.FeatureContext;
33 import jakarta.ws.rs.ext.Provider;
34
35
36
37
38
39
40
41
42
43 @Provider
44 public class MCRLodFeature extends MCRJerseyDefaultFeature {
45 @Override
46 public void configure(ResourceInfo resourceInfo, FeatureContext context) {
47 Class<?> resourceClass = resourceInfo.getResourceClass();
48 Method resourceMethod = resourceInfo.getResourceMethod();
49 if (requiresTransaction(resourceClass, resourceMethod)) {
50 context.register(MCREnableTransactionFilter.class);
51 }
52 super.configure(resourceInfo, context);
53 }
54
55
56
57
58
59
60
61
62 protected boolean requiresTransaction(Class<?> resourceClass, Method resourceMethod) {
63 return resourceClass.getAnnotation(MCRRequireTransaction.class) != null
64 || resourceMethod.getAnnotation(MCRRequireTransaction.class) != null;
65 }
66
67 @Override
68 protected List<String> getPackages() {
69 return MCRConfiguration2.getString("MCR.LOD.Resource.Packages").map(MCRConfiguration2::splitValue)
70 .orElse(Stream.empty())
71 .collect(Collectors.toList());
72 }
73
74 @Override
75 protected void registerSessionHookFilter(FeatureContext context) {
76
77 }
78
79 @Override
80 protected void registerTransactionFilter(FeatureContext context) {
81
82 }
83
84 @Override
85 protected void registerAccessFilter(FeatureContext context, Class<?> resourceClass, Method resourceMethod) {
86
87
88 super.registerAccessFilter(context, resourceClass, resourceMethod);
89 }
90
91 }