From cc0d585c0b2bb916ae8d05af2fdc030d497d1b86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thierry=20G=C3=B6ckel?= Date: Thu, 16 Jul 2020 10:19:12 +0200 Subject: [PATCH] Move update of rules out of controller. --- .../v1/resources/RedactionResource.java | 3 -- .../controller/RedactionController.java | 23 --------------- .../service/DroolsExecutionService.java | 28 +++++++++++++------ .../service/EntityRedactionService.java | 7 ++--- 4 files changed, 22 insertions(+), 39 deletions(-) diff --git a/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/resources/RedactionResource.java b/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/resources/RedactionResource.java index 464b5799..5f6eb9cb 100644 --- a/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/resources/RedactionResource.java +++ b/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/resources/RedactionResource.java @@ -24,9 +24,6 @@ public interface RedactionResource { @PostMapping(value = "/debug/htmlTables", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) RedactionResult htmlTables(@RequestBody RedactionRequest redactionRequest); - @GetMapping(value = "/rules", produces = MediaType.APPLICATION_JSON_VALUE) - String getRules(); - @PostMapping(value = "/rules/update", consumes = MediaType.APPLICATION_JSON_VALUE) void updateRules(@RequestBody String rules); diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/controller/RedactionController.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/controller/RedactionController.java index f46a600a..0927e8cc 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/controller/RedactionController.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/controller/RedactionController.java @@ -13,7 +13,6 @@ import com.iqser.red.service.redaction.v1.model.RedactionResult; import com.iqser.red.service.redaction.v1.resources.RedactionResource; import com.iqser.red.service.redaction.v1.server.classification.model.Document; import com.iqser.red.service.redaction.v1.server.classification.model.Page; -import com.iqser.red.service.redaction.v1.server.client.RulesClient; import com.iqser.red.service.redaction.v1.server.exception.RedactionException; import com.iqser.red.service.redaction.v1.server.redaction.service.DroolsExecutionService; import com.iqser.red.service.redaction.v1.server.redaction.service.EntityRedactionService; @@ -36,15 +35,11 @@ public class RedactionController implements RedactionResource { private final EntityRedactionService entityRedactionService; private final PdfFlattenService pdfFlattenService; private final DroolsExecutionService droolsExecutionService; - private final RulesClient rulesClient; - - private long rulesVersion = -1; @Override public RedactionResult redact(@RequestBody RedactionRequest redactionRequest) { try (PDDocument pdDocument = PDDocument.load(new ByteArrayInputStream(redactionRequest.getDocument()))) { - updateRules(); pdDocument.setAllSecurityToBeRemoved(true); Document classifiedDoc = pdfSegmentationService.parseDocument(pdDocument); @@ -68,7 +63,6 @@ public class RedactionController implements RedactionResource { public RedactionResult classify(@RequestBody RedactionRequest pdfSegmentationRequest) { try (PDDocument pdDocument = PDDocument.load(new ByteArrayInputStream(pdfSegmentationRequest.getDocument()))) { - updateRules(); pdDocument.setAllSecurityToBeRemoved(true); Document classifiedDoc = pdfSegmentationService.parseDocument(pdDocument); @@ -86,7 +80,6 @@ public class RedactionController implements RedactionResource { public RedactionResult sections(@RequestBody RedactionRequest redactionRequest) { try (PDDocument pdDocument = PDDocument.load(new ByteArrayInputStream(redactionRequest.getDocument()))) { - updateRules(); pdDocument.setAllSecurityToBeRemoved(true); Document classifiedDoc = pdfSegmentationService.parseDocument(pdDocument); @@ -104,7 +97,6 @@ public class RedactionController implements RedactionResource { public RedactionResult htmlTables(@RequestBody RedactionRequest redactionRequest) { try (PDDocument pdDocument = PDDocument.load(new ByteArrayInputStream(redactionRequest.getDocument()))) { - updateRules(); pdDocument.setAllSecurityToBeRemoved(true); Document classifiedDoc = pdfSegmentationService.parseDocument(pdDocument); @@ -127,11 +119,6 @@ public class RedactionController implements RedactionResource { } - @Override - public String getRules() { - return droolsExecutionService.getRules(); - } - @Override public void updateRules(@RequestBody String rules) { droolsExecutionService.updateRules(rules); @@ -149,14 +136,4 @@ public class RedactionController implements RedactionResource { } - private void updateRules() { - - long version = rulesClient.getVersion(); - if (version > rulesVersion) { - rulesVersion = version; - updateRules(rulesClient.getRules().getRules()); - } - - } - } \ No newline at end of file diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DroolsExecutionService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DroolsExecutionService.java index adf4af13..95b4036b 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DroolsExecutionService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DroolsExecutionService.java @@ -4,8 +4,6 @@ import java.io.ByteArrayInputStream; import java.io.InputStream; import java.nio.charset.StandardCharsets; -import javax.annotation.PostConstruct; - import org.apache.commons.lang3.StringUtils; import org.kie.api.KieServices; import org.kie.api.builder.KieBuilder; @@ -16,22 +14,24 @@ import org.kie.api.runtime.KieSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import com.iqser.red.service.redaction.v1.server.client.RulesClient; import com.iqser.red.service.redaction.v1.server.exception.RulesValidationException; import com.iqser.red.service.redaction.v1.server.redaction.model.Section; -import com.iqser.red.service.redaction.v1.server.redaction.utils.ResourceLoader; + +import lombok.RequiredArgsConstructor; @Service +@RequiredArgsConstructor public class DroolsExecutionService { + private final RulesClient rulesClient; + @Autowired private KieContainer kieContainer; private String currentDrlRules; - @PostConstruct - public void init() { - currentDrlRules = ResourceLoader.loadAsString("drools/rules.drl"); - } + private long rulesVersion = -1; public Section executeRules(Section section) { @@ -45,6 +45,16 @@ public class DroolsExecutionService { } + public void updateRules() { + + long version = rulesClient.getVersion(); + if (version > rulesVersion) { + rulesVersion = version; + updateRules(rulesClient.getRules().getRules()); + } + + } + public void updateRules(String drlAsString) { try { @@ -54,7 +64,8 @@ public class DroolsExecutionService { KieServices kieServices = KieServices.Factory.get(); InputStream input = new ByteArrayInputStream(drlAsString.getBytes(StandardCharsets.UTF_8)); KieFileSystem kieFileSystem = kieServices.newKieFileSystem(); - kieFileSystem.write("src/main/resources/drools/rules.drl", kieServices.getResources().newInputStreamResource(input)); + kieFileSystem.write("src/main/resources/drools/rules.drl", kieServices.getResources() + .newInputStreamResource(input)); KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem); kieBuilder.buildAll(); KieModule kieModule = kieBuilder.getKieModule(); @@ -67,6 +78,7 @@ public class DroolsExecutionService { } public String getRules() { + return currentDrlRules; } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionService.java index f2f65df5..a76d775e 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionService.java @@ -27,10 +27,10 @@ public class EntityRedactionService { private final DictionaryService dictionaryService; private final DroolsExecutionService droolsExecutionService; - public void processDocument(Document classifiedDoc) { dictionaryService.updateDictionary(); + droolsExecutionService.updateRules(); Set documentEntities = new HashSet<>(); for (Paragraph paragraph : classifiedDoc.getParagraphs()) { @@ -95,7 +95,6 @@ public class EntityRedactionService { }); } - private Set findEntities(SearchableText searchableText) { String normalizedInputString = searchableText.toString(); @@ -127,7 +126,6 @@ public class EntityRedactionService { return Character.isWhitespace(c) || Pattern.matches("\\p{Punct}", String.valueOf(c)) || c == '\"' || c == '‘' || c == '’'; } - public void removeEntitiesContainedInLarger(Set entities) { List wordsToRemove = new ArrayList<>(); for (Entity word : entities) { @@ -140,5 +138,4 @@ public class EntityRedactionService { entities.removeAll(wordsToRemove); } - -} +} \ No newline at end of file