From 1e08c70a3b6327dc5e5f84d05a4ad387b9486464 Mon Sep 17 00:00:00 2001 From: serega6531 Date: Sun, 12 May 2019 02:11:07 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D1=8C=20=D0=B4=D0=B5=D0=BB=D0=B0=D1=82=D1=8C=20?= =?UTF-8?q?=D0=BF=D0=B0=D1=82=D1=82=D0=B5=D1=80=D0=BD=D1=8B=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B3=D1=83=D0=BB=D1=8F=D1=80=D0=BA=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ru/serega6531/packmate/model/Pattern.java | 2 ++ .../packmate/service/PatternService.java | 20 +++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/serega6531/packmate/model/Pattern.java b/src/main/java/ru/serega6531/packmate/model/Pattern.java index dfdec7d..e122e6c 100644 --- a/src/main/java/ru/serega6531/packmate/model/Pattern.java +++ b/src/main/java/ru/serega6531/packmate/model/Pattern.java @@ -30,6 +30,8 @@ public class Pattern { private String color; // для вставки в css + private boolean isRegex; + @ManyToMany(mappedBy = "foundPatterns", cascade = CascadeType.ALL) @JsonIgnore private List matchedStreams; diff --git a/src/main/java/ru/serega6531/packmate/service/PatternService.java b/src/main/java/ru/serega6531/packmate/service/PatternService.java index 63c66c9..1488555 100644 --- a/src/main/java/ru/serega6531/packmate/service/PatternService.java +++ b/src/main/java/ru/serega6531/packmate/service/PatternService.java @@ -7,8 +7,9 @@ import org.springframework.stereotype.Service; import ru.serega6531.packmate.model.Pattern; import ru.serega6531.packmate.repository.PatternRepository; -import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; @Service @@ -17,6 +18,8 @@ public class PatternService { private final PatternRepository repository; + private Map compiledPatterns = new HashMap<>(); + @Autowired public PatternService(PatternRepository repository) { this.repository = repository; @@ -30,10 +33,19 @@ public class PatternService { String content = new String(bytes); return findAll().stream() - .filter(pattern -> StringUtils.containsIgnoreCase(content, pattern.getValue())) + .filter(pattern -> matches(pattern, content)) .collect(Collectors.toList()); } + private boolean matches(Pattern pattern, String content) { + if(pattern.isRegex()) { + final java.util.regex.Pattern regex = compilePattern(pattern); + return regex.matcher(content).find(); + } else { + return StringUtils.containsIgnoreCase(content, pattern.getValue()); + } + } + public void deleteById(int id) { repository.deleteById(id); } @@ -43,4 +55,8 @@ public class PatternService { return repository.save(pattern); } + public java.util.regex.Pattern compilePattern(Pattern pattern) { + return compiledPatterns.computeIfAbsent(pattern.getValue(), java.util.regex.Pattern::compile); + } + }