DM-285: Change component log #134

Merged
kilian.schuettler1 merged 1 commits from DM-285 into master 2023-09-22 10:58:00 +02:00
6 changed files with 53 additions and 67 deletions

View File

@ -1,7 +1,6 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_REDACTION_LOG;
import static com.iqser.red.service.persistence.management.v1.processor.service.FeignExceptionHandler.processFeignException;
import java.util.List;
@ -18,7 +17,6 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLog;
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.FilteredEntityLogRequest;
import feign.FeignException;
import lombok.RequiredArgsConstructor;
@RestController
@ -36,11 +34,7 @@ public class AnalysisLogController implements AnalysisLogResource {
@RequestParam(value = "withManualRedactions", required = false, defaultValue = "true") boolean withManualRedactions,
@RequestParam(value = "includeFalsePositives", required = false, defaultValue = "false") boolean includeFalsePositives) {
try {
return entityLogService.getEntityLog(dossierId, fileId, excludedTypes);
} catch (FeignException e) {
throw processFeignException(e);
}
return entityLogService.getEntityLog(dossierId, fileId, excludedTypes);
}
@ -49,23 +43,14 @@ public class AnalysisLogController implements AnalysisLogResource {
@PathVariable(FILE_ID) String fileId,
@RequestBody FilteredEntityLogRequest filteredEntityLogRequest) {
try {
return entityLogService.getFilteredEntityLog(dossierId, fileId, filteredEntityLogRequest);
} catch (FeignException e) {
throw processFeignException(e);
}
return entityLogService.getFilteredEntityLog(dossierId, fileId, filteredEntityLogRequest);
}
@Override
public ComponentLog getComponentLog(String dossierId, String fileId) {
try {
return componentLogService.getComponentLog(dossierId, fileId);
} catch (FeignException e) {
throw processFeignException(e);
}
return componentLogService.getComponentLog(dossierId, fileId);
}
}

View File

@ -1,29 +1,34 @@
package com.iqser.red.persistence.service.v2.external.api.impl.controller;
import static com.iqser.red.service.persistence.service.v2.api.external.resource.DossierResource.DOSSIER_ID_PARAM;
import static com.iqser.red.service.persistence.service.v2.api.external.resource.DossierTemplateResource.DOSSIER_TEMPLATE_ID_PARAM;
import static com.iqser.red.service.persistence.service.v2.api.external.resource.FileResource.FILE_ID_PARAM;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.iqser.red.persistence.service.v1.external.api.impl.controller.AnalysisLogController;
import com.iqser.red.persistence.service.v1.external.api.impl.controller.DossierTemplateController;
import com.iqser.red.persistence.service.v1.external.api.impl.controller.StatusController;
import com.iqser.red.service.persistence.management.v1.processor.service.ComponentOverrideService;
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.componentlog.ComponentEntityReference;
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.componentlog.ComponentLogCategory;
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.componentlog.ComponentLogEntry;
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.componentlog.Component;
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.componentlog.ComponentValue;
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.componentlog.EntityReference;
import com.iqser.red.service.persistence.service.v1.api.shared.model.component.ComponentsOverrides;
import com.iqser.red.service.persistence.service.v2.api.external.model.Component;
import com.iqser.red.service.persistence.service.v2.api.external.model.Entity;
import com.iqser.red.service.persistence.service.v2.api.external.model.FileComponents;
import com.iqser.red.service.persistence.service.v2.api.external.model.FileComponentsList;
import com.iqser.red.service.persistence.service.v2.api.external.resource.ComponentResource;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
import static com.iqser.red.service.persistence.service.v2.api.external.resource.DossierResource.DOSSIER_ID_PARAM;
import static com.iqser.red.service.persistence.service.v2.api.external.resource.DossierTemplateResource.DOSSIER_TEMPLATE_ID_PARAM;
import static com.iqser.red.service.persistence.service.v2.api.external.resource.FileResource.FILE_ID_PARAM;
@RestController
@RequiredArgsConstructor
@ -48,47 +53,48 @@ public class ComponentControllerV2 implements ComponentResource {
var overrides = componentOverrideService.getOverrides(dossierId, fileId);
Map<String, List<String>> components = new HashMap<>();
List<ComponentLogCategory> componentLogCategories = componentLog.getComponentLogCategories();
List<Component> componentLogCategories = componentLog.getComponents();
if (componentLogCategories != null && !componentLogCategories.isEmpty()) {
componentLogCategories.forEach(c -> {
if (overrides.getComponentOverrides() != null && overrides.getComponentOverrides().containsKey(c.getCategory())) {
components.computeIfAbsent(c.getCategory(), (x) -> new ArrayList<>()).add(overrides.getComponentOverrides().get(c.getCategory()));
if (overrides.getComponentOverrides() != null && overrides.getComponentOverrides().containsKey(c.getName())) {
components.computeIfAbsent(c.getName(), (x) -> new ArrayList<>()).add(overrides.getComponentOverrides().get(c.getName()));
} else {
components.computeIfAbsent(c.getCategory(), (x) -> new ArrayList<>()).addAll(c.getComponentLogEntries().stream().map(ComponentLogEntry::getValue).toList());
components.computeIfAbsent(c.getName(), (x) -> new ArrayList<>()).addAll(c.getComponentValues().stream().map(ComponentValue::getValue).toList());
}
});
}
Map<String, List<Component>> componentsDetails = new HashMap<>();
Map<String, List<com.iqser.red.service.persistence.service.v2.api.external.model.Component>> componentsDetails = new HashMap<>();
if (includeDetails) {
componentLog.getComponentLogCategories().forEach(c -> {
componentsDetails.computeIfAbsent(c.getCategory(), (x) -> new ArrayList<>()).addAll(c.getComponentLogEntries().stream().map(entry -> convert(entry, overrides, c.getCategory())).toList());
componentLog.getComponents().forEach(c -> {
componentsDetails.computeIfAbsent(c.getName(), (x) -> new ArrayList<>())
.addAll(c.getComponentValues().stream().map(entry -> convert(entry, overrides, c.getName())).toList());
});
}
return FileComponents.builder().dossierTemplateId(dossierTemplateId).dossierId(dossierId).fileId(fileId).components(components).componentDetails(componentsDetails).build();
}
private Component convert(ComponentLogEntry componentLogEntry, ComponentsOverrides overrides, String category) {
return Component.builder()
.componentRule(componentLogEntry.getMatchedRule())
.entityReferences(componentLogEntry.getComponentEntityReferences().stream().map(this::convertComponentEntityReference).toList())
.originalValues(List.of(componentLogEntry.getValue()))
.values(overrides.getComponentOverrides().containsKey(category) ? List.of(overrides.getComponentOverrides().get(category)) : List.of(componentLogEntry.getValue()))
private com.iqser.red.service.persistence.service.v2.api.external.model.Component convert(ComponentValue componentValue, ComponentsOverrides overrides, String category) {
return com.iqser.red.service.persistence.service.v2.api.external.model.Component.builder()
.componentRule(componentValue.getComponentRuleId())
.entityReferences(componentValue.getEntityReferences().stream().map(this::convertComponentEntityReference).toList())
.originalValues(List.of(componentValue.getValue()))
.values(overrides.getComponentOverrides().containsKey(category) ? List.of(overrides.getComponentOverrides().get(category)) : List.of(componentValue.getValue()))
.build();
}
private Entity convertComponentEntityReference(ComponentEntityReference componentEntityReference) {
private Entity convertComponentEntityReference(EntityReference entityReference) {
return Entity.builder()
.id(componentEntityReference.getId())
.entityRule(componentEntityReference.getRuleIdentifier())
.type(componentEntityReference.getType())
.pages(Set.of(componentEntityReference.getPage()))
.value(componentEntityReference.getValue())
.id(entityReference.getId())
.entityRule(entityReference.getEntityRuleId())
.type(entityReference.getType())
.pages(Set.of(entityReference.getPage()))
.build();
}
@ -103,5 +109,4 @@ public class ComponentControllerV2 implements ComponentResource {
return new FileComponentsList(dossierFiles.stream().map(file -> getComponents(dossierTemplateId, dossierId, file.getFileId(), includeDetails)).toList());
}
}

View File

@ -12,9 +12,9 @@ import lombok.experimental.FieldDefaults;
@AllArgsConstructor
@NoArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class ComponentLogCategory {
public class Component {
String category;
List<ComponentLogEntry> componentLogEntries;
String name;
List<ComponentValue> componentValues;
}

View File

@ -16,10 +16,7 @@ import lombok.experimental.FieldDefaults;
public class ComponentLog {
int analysisNumber;
List<ComponentLogCategory> componentLogCategories = new ArrayList<>();
long dictionaryVersion = -1;
long dossierDictionaryVersion = -1;
long rulesVersion = -1;
long componentRulesVersion = -1;
List<Component> components = new ArrayList<>();
}

View File

@ -14,12 +14,13 @@ import lombok.experimental.FieldDefaults;
@AllArgsConstructor
@NoArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class ComponentLogEntry {
public class ComponentValue {
String value;
String transformation;
String matchedRule;
String originalValue;
String valueDescription;
String componentRuleId;
List<ComponentEntityReference> componentEntityReferences;
List<EntityReference> entityReferences;
}

View File

@ -12,13 +12,11 @@ import lombok.experimental.FieldDefaults;
@AllArgsConstructor
@NoArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class ComponentEntityReference {
public class EntityReference {
String id;
String value;
String type;
String entityRuleId;
int page;
String ruleIdentifier;
String reason;
}