1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugins.enforcer.internal;
20
21 import javax.inject.Inject;
22 import javax.inject.Named;
23 import javax.inject.Provider;
24 import javax.inject.Singleton;
25
26 import java.util.ArrayList;
27 import java.util.HashMap;
28 import java.util.List;
29 import java.util.Map;
30
31 import org.apache.maven.enforcer.rule.api.AbstractEnforcerRule;
32 import org.apache.maven.execution.MavenSession;
33 import org.eclipse.aether.SessionData;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
36
37
38
39
40
41
42
43 @Named
44 @Singleton
45 public class EnforcerRuleCache {
46
47 private final Logger logger = LoggerFactory.getLogger(EnforcerRuleCache.class);
48
49 private final Provider<MavenSession> sessionProvider;
50
51 @Inject
52 EnforcerRuleCache(Provider<MavenSession> sessionProvider) {
53 this.sessionProvider = sessionProvider;
54 }
55
56 @SuppressWarnings("unchecked")
57 public boolean isCached(AbstractEnforcerRule rule) {
58
59 String cacheId = rule.getCacheId();
60
61 if (cacheId == null) {
62 return false;
63 }
64
65 Class<? extends AbstractEnforcerRule> ruleClass = rule.getClass();
66 logger.debug("Check cache for {} with id {}", ruleClass, cacheId);
67
68 SessionData sessionData = sessionProvider.get().getRepositorySession().getData();
69
70 synchronized (this) {
71
72
73 Map<Class<? extends AbstractEnforcerRule>, List<String>> cache =
74 (Map<Class<? extends AbstractEnforcerRule>, List<String>>) sessionData.get("enforcer-cache");
75
76 if (cache == null) {
77 cache = new HashMap<>();
78 sessionData.set("enforcer-cache", cache);
79 }
80
81 List<String> cacheIdList = cache.computeIfAbsent(ruleClass, k -> new ArrayList<>());
82 if (cacheIdList.contains(cacheId)) {
83 logger.debug("Already cached {} with id {}", ruleClass, cacheId);
84 return true;
85 }
86 logger.debug("Add cache {} with id {}", ruleClass, cacheId);
87 cacheIdList.add(cacheId);
88 }
89
90 return false;
91 }
92 }