RED-3818: Added migration for false_positive and recommendaction color
This commit is contained in:
parent
b892adcb70
commit
9b9ac66417
@ -10,6 +10,7 @@ import com.iqser.red.service.peristence.v1.server.migration.migrations.Dictionar
|
||||
import com.iqser.red.service.peristence.v1.server.migration.migrations.EntityTypesMigration4;
|
||||
import com.iqser.red.service.peristence.v1.server.migration.migrations.IndexMigration1;
|
||||
import com.iqser.red.service.peristence.v1.server.migration.migrations.MigrateHighlights3;
|
||||
import com.iqser.red.service.peristence.v1.server.migration.migrations.TypeToEntityMigration5;
|
||||
import com.iqser.red.service.peristence.v1.server.settings.FileManagementServiceSettings;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.MigrationPersistenceService;
|
||||
|
||||
@ -29,6 +30,7 @@ public class MigrationStarterService {
|
||||
private final DictionaryToEntityMigration2 dictionaryToEntityMigration2;
|
||||
private final MigrateHighlights3 migrateHighlights3;
|
||||
private final EntityTypesMigration4 entityTypesMigration4;
|
||||
private final TypeToEntityMigration5 typeToEntityMigration5;
|
||||
|
||||
private final FileManagementServiceSettings settings;
|
||||
private final ApplicationContext ctx;
|
||||
@ -49,6 +51,7 @@ public class MigrationStarterService {
|
||||
dictionaryToEntityMigration2.run();
|
||||
migrateHighlights3.run();
|
||||
entityTypesMigration4.run();
|
||||
typeToEntityMigration5.run();
|
||||
|
||||
log.info("Migration is finished");
|
||||
System.exit(SpringApplication.exit(ctx, () -> 0));
|
||||
|
||||
@ -0,0 +1,140 @@
|
||||
package com.iqser.red.service.peristence.v1.server.migration.migrations;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.iqser.red.service.peristence.v1.server.controller.DictionaryController;
|
||||
import com.iqser.red.service.peristence.v1.server.migration.Migration;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.BaseDictionaryEntry;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DictionaryPersistenceService;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.EntryPersistenceService;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntryType;
|
||||
|
||||
import lombok.Setter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
@Setter
|
||||
@Service
|
||||
public class TypeToEntityMigration5 extends Migration {
|
||||
|
||||
private static final String NAME = "Migrate false positives, set recommendation color, remove unneeded dictionaries";
|
||||
private static final long VERSION = 5;
|
||||
|
||||
@Autowired
|
||||
private DictionaryPersistenceService dictionaryPersistenceService;
|
||||
|
||||
@Autowired
|
||||
private DossierTemplatePersistenceService dossierTemplatePersistenceService;
|
||||
|
||||
@Autowired
|
||||
private EntryPersistenceService entryPersistenceService;
|
||||
|
||||
@Autowired
|
||||
private DictionaryController dictionaryController;
|
||||
|
||||
|
||||
public TypeToEntityMigration5() {
|
||||
|
||||
super(NAME, VERSION);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void migrate() {
|
||||
|
||||
var types = dictionaryPersistenceService.getAllTypes();
|
||||
types.forEach(type -> type.setRecommendationHexColor("#8df06c"));
|
||||
dictionaryPersistenceService.saveAllTypes(types);
|
||||
|
||||
var dossierTemplates = dossierTemplatePersistenceService.getAllDossierTemplates();
|
||||
|
||||
dossierTemplates.forEach(dossierTemplate -> {
|
||||
var typeIdsToDelete = new HashSet<String>();
|
||||
var typesOfDossierTemplate = dictionaryPersistenceService.getAllTypes();
|
||||
var falsePositive = typesOfDossierTemplate.stream()
|
||||
.filter(t -> t.getType().equals("false_positive"))
|
||||
.findFirst();
|
||||
if (!falsePositive.isPresent()) {
|
||||
return;
|
||||
}
|
||||
typeIdsToDelete.add(falsePositive.get().getId());
|
||||
var falsePositiveEntries = entryPersistenceService.getEntries(falsePositive.get()
|
||||
.getId(), DictionaryEntryType.ENTRY, null)
|
||||
.stream()
|
||||
.map(f -> f.getValue())
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
typesOfDossierTemplate.stream().filter(t -> !t.getType().equals("false_positive")).forEach(typeEntity -> {
|
||||
|
||||
if (typeEntity.getType().startsWith("recommendation_")) {
|
||||
typeIdsToDelete.add(typeEntity.getId());
|
||||
return;
|
||||
}
|
||||
|
||||
var entries = entryPersistenceService.getEntries(typeEntity.getId(), DictionaryEntryType.ENTRY, null)
|
||||
.stream()
|
||||
.map(f -> f.getValue())
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
var typeFalsePositives = new HashSet<String>();
|
||||
falsePositiveEntries.forEach(falsePositiveValue -> {
|
||||
if (containsAnyWord(falsePositiveValue, entries, typeEntity.isCaseInsensitive())) {
|
||||
typeFalsePositives.add(falsePositiveValue);
|
||||
}
|
||||
});
|
||||
|
||||
if (!typeFalsePositives.isEmpty()) {
|
||||
dictionaryController.addEntries(typeEntity.getId(), new ArrayList<>(typeFalsePositives), false, true, DictionaryEntryType.FALSE_POSITIVE);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
typeIdsToDelete.forEach(typeIdToDelete -> {
|
||||
dictionaryController.deleteType(typeIdToDelete);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
public boolean containsAnyWord(String text, Set<String> values, boolean isCaseInsensitive) {
|
||||
|
||||
String inputString = isCaseInsensitive ? text.toLowerCase(Locale.ROOT) : text;
|
||||
|
||||
for (String value : values) {
|
||||
|
||||
String cleanValue = isCaseInsensitive ? value.toLowerCase(Locale.ROOT).trim() : value.trim();
|
||||
|
||||
int startIndex;
|
||||
int stopIndex = 0;
|
||||
do {
|
||||
startIndex = inputString.indexOf(cleanValue, stopIndex);
|
||||
stopIndex = startIndex + cleanValue.length();
|
||||
|
||||
if (startIndex > -1 && (startIndex == 0 || Character.isWhitespace(inputString.charAt(startIndex - 1)) || isSeparator(inputString.charAt(startIndex - 1))) && (stopIndex == inputString.length() || isSeparator(inputString.charAt(stopIndex)))) {
|
||||
return true;
|
||||
}
|
||||
} while (startIndex > -1);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private boolean isSeparator(char c) {
|
||||
|
||||
return Character.isWhitespace(c) || Pattern.matches("\\p{Punct}", String.valueOf(c)) || c == '\"' || c == '‘' || c == '’';
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user