Move update of rules out of controller.
This commit is contained in:
parent
74e5bc0635
commit
cc0d585c0b
@ -24,9 +24,6 @@ public interface RedactionResource {
|
|||||||
@PostMapping(value = "/debug/htmlTables", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
|
@PostMapping(value = "/debug/htmlTables", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
|
||||||
RedactionResult htmlTables(@RequestBody RedactionRequest redactionRequest);
|
RedactionResult htmlTables(@RequestBody RedactionRequest redactionRequest);
|
||||||
|
|
||||||
@GetMapping(value = "/rules", produces = MediaType.APPLICATION_JSON_VALUE)
|
|
||||||
String getRules();
|
|
||||||
|
|
||||||
@PostMapping(value = "/rules/update", consumes = MediaType.APPLICATION_JSON_VALUE)
|
@PostMapping(value = "/rules/update", consumes = MediaType.APPLICATION_JSON_VALUE)
|
||||||
void updateRules(@RequestBody String rules);
|
void updateRules(@RequestBody String rules);
|
||||||
|
|
||||||
|
|||||||
@ -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.resources.RedactionResource;
|
||||||
import com.iqser.red.service.redaction.v1.server.classification.model.Document;
|
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.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.exception.RedactionException;
|
||||||
import com.iqser.red.service.redaction.v1.server.redaction.service.DroolsExecutionService;
|
import com.iqser.red.service.redaction.v1.server.redaction.service.DroolsExecutionService;
|
||||||
import com.iqser.red.service.redaction.v1.server.redaction.service.EntityRedactionService;
|
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 EntityRedactionService entityRedactionService;
|
||||||
private final PdfFlattenService pdfFlattenService;
|
private final PdfFlattenService pdfFlattenService;
|
||||||
private final DroolsExecutionService droolsExecutionService;
|
private final DroolsExecutionService droolsExecutionService;
|
||||||
private final RulesClient rulesClient;
|
|
||||||
|
|
||||||
private long rulesVersion = -1;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RedactionResult redact(@RequestBody RedactionRequest redactionRequest) {
|
public RedactionResult redact(@RequestBody RedactionRequest redactionRequest) {
|
||||||
|
|
||||||
try (PDDocument pdDocument = PDDocument.load(new ByteArrayInputStream(redactionRequest.getDocument()))) {
|
try (PDDocument pdDocument = PDDocument.load(new ByteArrayInputStream(redactionRequest.getDocument()))) {
|
||||||
updateRules();
|
|
||||||
pdDocument.setAllSecurityToBeRemoved(true);
|
pdDocument.setAllSecurityToBeRemoved(true);
|
||||||
|
|
||||||
Document classifiedDoc = pdfSegmentationService.parseDocument(pdDocument);
|
Document classifiedDoc = pdfSegmentationService.parseDocument(pdDocument);
|
||||||
@ -68,7 +63,6 @@ public class RedactionController implements RedactionResource {
|
|||||||
public RedactionResult classify(@RequestBody RedactionRequest pdfSegmentationRequest) {
|
public RedactionResult classify(@RequestBody RedactionRequest pdfSegmentationRequest) {
|
||||||
|
|
||||||
try (PDDocument pdDocument = PDDocument.load(new ByteArrayInputStream(pdfSegmentationRequest.getDocument()))) {
|
try (PDDocument pdDocument = PDDocument.load(new ByteArrayInputStream(pdfSegmentationRequest.getDocument()))) {
|
||||||
updateRules();
|
|
||||||
pdDocument.setAllSecurityToBeRemoved(true);
|
pdDocument.setAllSecurityToBeRemoved(true);
|
||||||
|
|
||||||
Document classifiedDoc = pdfSegmentationService.parseDocument(pdDocument);
|
Document classifiedDoc = pdfSegmentationService.parseDocument(pdDocument);
|
||||||
@ -86,7 +80,6 @@ public class RedactionController implements RedactionResource {
|
|||||||
public RedactionResult sections(@RequestBody RedactionRequest redactionRequest) {
|
public RedactionResult sections(@RequestBody RedactionRequest redactionRequest) {
|
||||||
|
|
||||||
try (PDDocument pdDocument = PDDocument.load(new ByteArrayInputStream(redactionRequest.getDocument()))) {
|
try (PDDocument pdDocument = PDDocument.load(new ByteArrayInputStream(redactionRequest.getDocument()))) {
|
||||||
updateRules();
|
|
||||||
pdDocument.setAllSecurityToBeRemoved(true);
|
pdDocument.setAllSecurityToBeRemoved(true);
|
||||||
|
|
||||||
Document classifiedDoc = pdfSegmentationService.parseDocument(pdDocument);
|
Document classifiedDoc = pdfSegmentationService.parseDocument(pdDocument);
|
||||||
@ -104,7 +97,6 @@ public class RedactionController implements RedactionResource {
|
|||||||
public RedactionResult htmlTables(@RequestBody RedactionRequest redactionRequest) {
|
public RedactionResult htmlTables(@RequestBody RedactionRequest redactionRequest) {
|
||||||
|
|
||||||
try (PDDocument pdDocument = PDDocument.load(new ByteArrayInputStream(redactionRequest.getDocument()))) {
|
try (PDDocument pdDocument = PDDocument.load(new ByteArrayInputStream(redactionRequest.getDocument()))) {
|
||||||
updateRules();
|
|
||||||
pdDocument.setAllSecurityToBeRemoved(true);
|
pdDocument.setAllSecurityToBeRemoved(true);
|
||||||
|
|
||||||
Document classifiedDoc = pdfSegmentationService.parseDocument(pdDocument);
|
Document classifiedDoc = pdfSegmentationService.parseDocument(pdDocument);
|
||||||
@ -127,11 +119,6 @@ public class RedactionController implements RedactionResource {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getRules() {
|
|
||||||
return droolsExecutionService.getRules();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateRules(@RequestBody String rules) {
|
public void updateRules(@RequestBody String rules) {
|
||||||
droolsExecutionService.updateRules(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());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -4,8 +4,6 @@ import java.io.ByteArrayInputStream;
|
|||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.kie.api.KieServices;
|
import org.kie.api.KieServices;
|
||||||
import org.kie.api.builder.KieBuilder;
|
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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
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.exception.RulesValidationException;
|
||||||
import com.iqser.red.service.redaction.v1.server.redaction.model.Section;
|
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
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
public class DroolsExecutionService {
|
public class DroolsExecutionService {
|
||||||
|
|
||||||
|
private final RulesClient rulesClient;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private KieContainer kieContainer;
|
private KieContainer kieContainer;
|
||||||
|
|
||||||
private String currentDrlRules;
|
private String currentDrlRules;
|
||||||
|
|
||||||
@PostConstruct
|
private long rulesVersion = -1;
|
||||||
public void init() {
|
|
||||||
currentDrlRules = ResourceLoader.loadAsString("drools/rules.drl");
|
|
||||||
}
|
|
||||||
|
|
||||||
public Section executeRules(Section section) {
|
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) {
|
public void updateRules(String drlAsString) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -54,7 +64,8 @@ public class DroolsExecutionService {
|
|||||||
KieServices kieServices = KieServices.Factory.get();
|
KieServices kieServices = KieServices.Factory.get();
|
||||||
InputStream input = new ByteArrayInputStream(drlAsString.getBytes(StandardCharsets.UTF_8));
|
InputStream input = new ByteArrayInputStream(drlAsString.getBytes(StandardCharsets.UTF_8));
|
||||||
KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
|
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 kieBuilder = kieServices.newKieBuilder(kieFileSystem);
|
||||||
kieBuilder.buildAll();
|
kieBuilder.buildAll();
|
||||||
KieModule kieModule = kieBuilder.getKieModule();
|
KieModule kieModule = kieBuilder.getKieModule();
|
||||||
@ -67,6 +78,7 @@ public class DroolsExecutionService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getRules() {
|
public String getRules() {
|
||||||
|
|
||||||
return currentDrlRules;
|
return currentDrlRules;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -27,10 +27,10 @@ public class EntityRedactionService {
|
|||||||
private final DictionaryService dictionaryService;
|
private final DictionaryService dictionaryService;
|
||||||
private final DroolsExecutionService droolsExecutionService;
|
private final DroolsExecutionService droolsExecutionService;
|
||||||
|
|
||||||
|
|
||||||
public void processDocument(Document classifiedDoc) {
|
public void processDocument(Document classifiedDoc) {
|
||||||
|
|
||||||
dictionaryService.updateDictionary();
|
dictionaryService.updateDictionary();
|
||||||
|
droolsExecutionService.updateRules();
|
||||||
|
|
||||||
Set<Entity> documentEntities = new HashSet<>();
|
Set<Entity> documentEntities = new HashSet<>();
|
||||||
for (Paragraph paragraph : classifiedDoc.getParagraphs()) {
|
for (Paragraph paragraph : classifiedDoc.getParagraphs()) {
|
||||||
@ -95,7 +95,6 @@ public class EntityRedactionService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private Set<Entity> findEntities(SearchableText searchableText) {
|
private Set<Entity> findEntities(SearchableText searchableText) {
|
||||||
|
|
||||||
String normalizedInputString = searchableText.toString();
|
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 == '’';
|
return Character.isWhitespace(c) || Pattern.matches("\\p{Punct}", String.valueOf(c)) || c == '\"' || c == '‘' || c == '’';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void removeEntitiesContainedInLarger(Set<Entity> entities) {
|
public void removeEntitiesContainedInLarger(Set<Entity> entities) {
|
||||||
List<Entity> wordsToRemove = new ArrayList<>();
|
List<Entity> wordsToRemove = new ArrayList<>();
|
||||||
for (Entity word : entities) {
|
for (Entity word : entities) {
|
||||||
@ -140,5 +138,4 @@ public class EntityRedactionService {
|
|||||||
entities.removeAll(wordsToRemove);
|
entities.removeAll(wordsToRemove);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user