From a73495026b8aeeea6e24e57343242fbf524da588 Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Sat, 5 Dec 2020 12:30:42 -0500 Subject: [PATCH] use lazyGet instead of lombok due to cross-class call --- .../rule/social/block/UserBlockerConfig.java | 8 +++++++- .../rule/social/block/UserBlockerStreamFilter.java | 14 +++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/bubble-server/src/main/java/bubble/rule/social/block/UserBlockerConfig.java b/bubble-server/src/main/java/bubble/rule/social/block/UserBlockerConfig.java index 7b31c0e0..dfd6facd 100644 --- a/bubble-server/src/main/java/bubble/rule/social/block/UserBlockerConfig.java +++ b/bubble-server/src/main/java/bubble/rule/social/block/UserBlockerConfig.java @@ -15,11 +15,17 @@ import org.cobbzilla.util.handlebars.HasHandlebars; import org.cobbzilla.util.io.regex.RegexChunkConfig; import org.cobbzilla.util.javascript.StandardJsEngine; +import java.util.concurrent.atomic.AtomicReference; + +import static org.cobbzilla.util.daemon.ZillaRuntime.lazyGet; import static org.cobbzilla.util.reflect.ReflectionUtil.instantiate; public class UserBlockerConfig extends RegexChunkConfig implements RuleConfig { - public static final StandardJsEngine STANDARD_JS_ENGINE = new StandardJsEngine(); + private static final AtomicReference standardJsEngine = new AtomicReference<>(); + public static StandardJsEngine getStandardJsEngine () { + return lazyGet(standardJsEngine, StandardJsEngine::new, () -> null); + } @Getter @Setter private String blockedCommentCheck; @Getter @Setter private String blockedCommentReplacement; diff --git a/bubble-server/src/main/java/bubble/rule/social/block/UserBlockerStreamFilter.java b/bubble-server/src/main/java/bubble/rule/social/block/UserBlockerStreamFilter.java index f01dbb9f..3226cf73 100644 --- a/bubble-server/src/main/java/bubble/rule/social/block/UserBlockerStreamFilter.java +++ b/bubble-server/src/main/java/bubble/rule/social/block/UserBlockerStreamFilter.java @@ -26,7 +26,7 @@ import java.util.regex.Matcher; import static bubble.ApiConstants.*; import static bubble.rule.AbstractAppRuleDriver.getDataId; -import static bubble.rule.social.block.UserBlockerConfig.STANDARD_JS_ENGINE; +import static bubble.rule.social.block.UserBlockerConfig.getStandardJsEngine; import static java.util.concurrent.TimeUnit.MINUTES; import static org.cobbzilla.util.json.JsonUtil.COMPACT_MAPPER; import static org.cobbzilla.util.json.JsonUtil.json; @@ -41,10 +41,10 @@ public class UserBlockerStreamFilter implements RegexStreamFilter { public static final String PROP_UNBLOCK_URL = "unblockUrl"; public static final String PROP_CHUNK_START_REGEX = "chunkStartRegex"; - private String requestId; - private AppMatcher matcher; - private AppRule rule; - private String apiBase; + private final String requestId; + private final AppMatcher matcher; + private final AppRule rule; + private final String apiBase; @Setter private AppDataDAO dataDAO; public UserBlockerStreamFilter(String requestId, AppMatcher matcher, AppRule rule, String apiBase) { @@ -151,7 +151,7 @@ public class UserBlockerStreamFilter implements RegexStreamFilter { return HandlebarsUtil.apply(config.getHandlebars(), config.getBlockedCommentReplacement(), ctx); } - private Map blockCache = new ExpirationMap<>(MINUTES.toMillis(1), ExpirationEvictionPolicy.atime); + private final Map blockCache = new ExpirationMap<>(MINUTES.toMillis(1), ExpirationEvictionPolicy.atime); protected boolean isUserBlocked(String requestId, String userId) { return blockCache.computeIfAbsent(requestId+":"+userId, k -> { if (userId == null) return false; @@ -171,7 +171,7 @@ public class UserBlockerStreamFilter implements RegexStreamFilter { ctx.put("blocked", blockedComment.getProperties()); ctx.put("current", candidateComment.getProperties()); try { - return STANDARD_JS_ENGINE.evaluateBoolean(config.getBlockedCommentCheck(), ctx); + return getStandardJsEngine().evaluateBoolean(config.getBlockedCommentCheck(), ctx); } catch (Exception e) { log.error("isCommentBlocked: error evaluating "+config.getBlockedCommentCheck()+" with ctx="+ctx+": "+e); return false;