Pull request #455: RED-4249-As an admin of a dossier template I want to customize the highlighting color of a skipped redaction of an entity

Merge in RED/persistence-service from RED-4249_fix3 to master

* commit 'd9060e39d85c8abb65212a098375faceeb96c805':
  RED-4249-As an admin of a dossier template I want to customize the highlighting color of a skipped redaction of an entity
  RED-4249-As an admin of a dossier template I want to customize the highlighting color of a skipped redaction of an entity
This commit is contained in:
Corina Olariu 2022-06-23 10:29:02 +02:00 committed by Dominique Eiflaender
commit f59c1869f1
4 changed files with 37 additions and 10 deletions

View File

@ -2,6 +2,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierRepository;
@ -52,10 +53,12 @@ public class WatermarkService {
if (watermark.getId() != null) { // update if (watermark.getId() != null) { // update
watermarkRepository.findById(watermark.getId()) watermarkRepository.findById(watermark.getId())
.ifPresentOrElse(loadedWatermark -> { .ifPresentOrElse(loadedWatermark -> {
validateWatermarkNameIsUnique(watermark.getName(), watermark.getDossierTemplateId(), loadedWatermark.getId());
BeanUtils.copyProperties(watermark, loadedWatermark, "dossierTemplateId"); BeanUtils.copyProperties(watermark, loadedWatermark, "dossierTemplateId");
var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(watermark.getDossierTemplateId()); var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(watermark.getDossierTemplateId());
loadedWatermark.setDossierTemplate(dossierTemplate); loadedWatermark.setDossierTemplate(dossierTemplate);
}, () -> { }, () -> {
validateWatermarkNameIsUnique(watermark.getName(), watermark.getDossierTemplateId(), 0);
WatermarkEntity watermarkEntity = new WatermarkEntity(); WatermarkEntity watermarkEntity = new WatermarkEntity();
BeanUtils.copyProperties(watermark, watermarkEntity, "id"); BeanUtils.copyProperties(watermark, watermarkEntity, "id");
var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(watermark.getDossierTemplateId()); var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(watermark.getDossierTemplateId());
@ -64,6 +67,7 @@ public class WatermarkService {
}); });
return watermarkRepository.findById(watermark.getId()).orElseThrow(() -> new NotFoundException("Watermark Configuration not found")); return watermarkRepository.findById(watermark.getId()).orElseThrow(() -> new NotFoundException("Watermark Configuration not found"));
} else { } else {
validateWatermarkNameIsUnique(watermark.getName(), watermark.getDossierTemplateId(), 0);
WatermarkEntity watermarkEntity = new WatermarkEntity(); WatermarkEntity watermarkEntity = new WatermarkEntity();
BeanUtils.copyProperties(watermark, watermarkEntity, "id"); BeanUtils.copyProperties(watermark, watermarkEntity, "id");
var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(watermark.getDossierTemplateId()); var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(watermark.getDossierTemplateId());
@ -75,15 +79,23 @@ public class WatermarkService {
private void validateWatermark(Watermark watermark) { private void validateWatermark(Watermark watermark) {
// if (watermark == null) { if (StringUtils.isBlank(watermark.getName())) {
// throw new BadRequestException("The watermark may not be null"); throw new BadRequestException("The watermark name must not be null");
// } }
if (StringUtils.isNotBlank(watermark.getText()) && !StringUtils.isAsciiPrintable(StringUtils.normalizeSpace(watermark.getText()))) { if (StringUtils.isNotBlank(watermark.getText()) && !StringUtils.isAsciiPrintable(StringUtils.normalizeSpace(watermark.getText()))) {
throw new BadRequestException("The watermark may only contain ASCII characters"); throw new BadRequestException("The watermark may only contain ASCII characters");
} }
} }
private void validateWatermarkNameIsUnique(String watermarkName, String dossierTemplateId, long watermarkId) {
getWatermarksForDossierTemplateId(dossierTemplateId).forEach(existing -> {
if (existing.getName().equals(watermarkName) && existing.getId() != watermarkId) {
throw new ConflictException("Watermark name must be unique within the same dossier template");
}
});
}
public List<WatermarkEntity> getWatermarksForDossierTemplateId(String dossierTemplateId) { public List<WatermarkEntity> getWatermarksForDossierTemplateId(String dossierTemplateId) {
return watermarkRepository.findByDossierTemplateId(dossierTemplateId); return watermarkRepository.findByDossierTemplateId(dossierTemplateId);
} }

View File

@ -1,6 +1,8 @@
-- add the generated id to watermark_configuration table -- add the generated id to watermark_configuration table
alter table watermark_configuration add column id BIGINT GENERATED ALWAYS AS IDENTITY; alter table watermark_configuration add column id BIGINT GENERATED ALWAYS AS IDENTITY;
alter table watermark_configuration add column name VARCHAR (255), add column enabled BOOLEAN; alter table watermark_configuration add column name VARCHAR (255), add column enabled BOOLEAN DEFAULT TRUE;
--initialise the new columns for the current watermark configurations
update watermark_configuration set name = 'Watermark ' || id, enabled = true;
-- update the primary key constraint based on the new configuration and add the foreign key contraints to the dossier and dossier_template tables -- update the primary key constraint based on the new configuration and add the foreign key contraints to the dossier and dossier_template tables
alter table watermark_configuration drop constraint watermark_configuration_pkey; alter table watermark_configuration drop constraint watermark_configuration_pkey;

View File

@ -28,14 +28,13 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
try { try {
watermarkClient.getWatermark(Long.valueOf(13)); watermarkClient.getWatermark(13L);
} catch (FeignException.FeignClientException e) { } catch (FeignException.FeignClientException e) {
assertThat(e.status()).isEqualTo(404); assertThat(e.status()).isEqualTo(404);
} }
Watermark watermark = new Watermark(); Watermark watermark = new Watermark();
watermark.setName("watermark name"); watermark.setName("watermark name");
watermark.setEnabled(true);
watermark.setText("Minions ipsum chasy para tu la bodaaa bananaaaa hana dul sae. Chasy hana dul sae pepete hana dul sae belloo! Tatata bala tu ti aamoo! Jeje."); watermark.setText("Minions ipsum chasy para tu la bodaaa bananaaaa hana dul sae. Chasy hana dul sae pepete hana dul sae belloo! Tatata bala tu ti aamoo! Jeje.");
watermark.setFontSize(12); watermark.setFontSize(12);
watermark.setFontType("font"); watermark.setFontType("font");
@ -47,12 +46,26 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest {
var saved = watermarkClient.createOrUpdateWatermark(watermark); var saved = watermarkClient.createOrUpdateWatermark(watermark);
var loadedWatermark = watermarkClient.getWatermark(saved.getId()); var loadedWatermark = watermarkClient.getWatermark(saved.getId());
assertThat(loadedWatermark).isEqualTo(saved); assertThat(loadedWatermark).isEqualTo(saved);
// update current watermark
watermark.setFontSize(14); saved.setFontSize(14);
saved = watermarkClient.createOrUpdateWatermark(watermark); saved = watermarkClient.createOrUpdateWatermark(saved);
loadedWatermark = watermarkClient.getWatermark(saved.getId()); loadedWatermark = watermarkClient.getWatermark(saved.getId());
assertThat(loadedWatermark).isEqualTo(saved); assertThat(loadedWatermark).isEqualTo(saved);
var watermarkList = watermarkClient.getWatermarksForDossierTemplateId(dossierTemplate.getId());
assertThat(watermarkList.size()).isEqualTo(1);
// create new watermark with same name:
Watermark watermark2 = new Watermark();
watermark2.setName("watermark name");
watermark2.setOrientation(WatermarkOrientation.DIAGONAL);
watermark2.setDossierTemplateId(dossierTemplate.getId());
try {
watermarkClient.createOrUpdateWatermark(watermark2);
} catch (FeignException.FeignClientException e) {
assertThat(e.status()).isEqualTo(409);
}
// Delete first time // Delete first time
watermarkClient.deleteWatermark(saved.getId()); watermarkClient.deleteWatermark(saved.getId());

View File

@ -27,7 +27,7 @@
<properties> <properties>
<redaction-service.version>3.114.0</redaction-service.version> <redaction-service.version>3.114.0</redaction-service.version>
<search-service.version>2.36.0</search-service.version> <search-service.version>2.36.0</search-service.version>
<pdftron-redaction-service.version>3.105.0</pdftron-redaction-service.version> <pdftron-redaction-service.version>3.111.0</pdftron-redaction-service.version>
<redaction-report-service.version>3.47.0</redaction-report-service.version> <redaction-report-service.version>3.47.0</redaction-report-service.version>
</properties> </properties>