RED-6289 - Validate watermark color
- validate the watermark color and in case of missing setting set the default one to black - also set a default opacity in case the setting is an invalid one
This commit is contained in:
parent
50b2c1b9b1
commit
afb4075fdc
@ -18,6 +18,7 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.NotFo
|
|||||||
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;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.WatermarkRepository;
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.WatermarkRepository;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.utils.ColorUtils;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.WatermarkModel;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.WatermarkModel;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@ -28,6 +29,8 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class WatermarkService {
|
public class WatermarkService {
|
||||||
|
|
||||||
|
private final static String DEFAULT_HEX_COLOR = "#000000";
|
||||||
|
private final static int DEFAULT_OPACITY = 30;
|
||||||
private final WatermarkRepository watermarkRepository;
|
private final WatermarkRepository watermarkRepository;
|
||||||
private final DossierRepository dossierRepository;
|
private final DossierRepository dossierRepository;
|
||||||
private final DossierTemplatePersistenceService dossierTemplatePersistenceService;
|
private final DossierTemplatePersistenceService dossierTemplatePersistenceService;
|
||||||
@ -59,6 +62,8 @@ public class WatermarkService {
|
|||||||
if (loadedWatermark.isPresent()) {
|
if (loadedWatermark.isPresent()) {
|
||||||
validateDossierTemplateId(watermark.getDossierTemplateId(), loadedWatermark.get().getDossierTemplateId());
|
validateDossierTemplateId(watermark.getDossierTemplateId(), loadedWatermark.get().getDossierTemplateId());
|
||||||
validateWatermarkNameIsUnique(watermark.getName(), loadedWatermark.get().getDossierTemplateId(), loadedWatermark.get().getId());
|
validateWatermarkNameIsUnique(watermark.getName(), loadedWatermark.get().getDossierTemplateId(), loadedWatermark.get().getId());
|
||||||
|
validateHexColorAndSetDefaultIfNeeded(watermark);
|
||||||
|
validateOpacityAndSetDefaultIfNeeded(watermark);
|
||||||
BeanUtils.copyProperties(watermark, loadedWatermark.get(), "dossierTemplateId", "createdBy", "dateAdded", "dateModified");
|
BeanUtils.copyProperties(watermark, loadedWatermark.get(), "dossierTemplateId", "createdBy", "dateAdded", "dateModified");
|
||||||
loadedWatermark.get().setDateModified(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
loadedWatermark.get().setDateModified(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||||
var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(loadedWatermark.get().getDossierTemplateId());
|
var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(loadedWatermark.get().getDossierTemplateId());
|
||||||
@ -67,6 +72,8 @@ public class WatermarkService {
|
|||||||
} else { // if not found by id -> add it as a new watermark
|
} else { // if not found by id -> add it as a new watermark
|
||||||
validateDossierTemplateId(watermark.getDossierTemplateId(), null);
|
validateDossierTemplateId(watermark.getDossierTemplateId(), null);
|
||||||
validateWatermarkNameIsUnique(watermark.getName(), watermark.getDossierTemplateId(), 0);
|
validateWatermarkNameIsUnique(watermark.getName(), watermark.getDossierTemplateId(), 0);
|
||||||
|
validateHexColorAndSetDefaultIfNeeded(watermark);
|
||||||
|
validateOpacityAndSetDefaultIfNeeded(watermark);
|
||||||
WatermarkEntity watermarkEntity = new WatermarkEntity();
|
WatermarkEntity watermarkEntity = new WatermarkEntity();
|
||||||
BeanUtils.copyProperties(watermark, watermarkEntity, "id", "dateAdded", "dateModified");
|
BeanUtils.copyProperties(watermark, watermarkEntity, "id", "dateAdded", "dateModified");
|
||||||
watermarkEntity.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
watermarkEntity.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||||
@ -77,6 +84,8 @@ public class WatermarkService {
|
|||||||
} else {
|
} else {
|
||||||
validateDossierTemplateId(watermark.getDossierTemplateId(), null);
|
validateDossierTemplateId(watermark.getDossierTemplateId(), null);
|
||||||
validateWatermarkNameIsUnique(watermark.getName(), watermark.getDossierTemplateId(), 0);
|
validateWatermarkNameIsUnique(watermark.getName(), watermark.getDossierTemplateId(), 0);
|
||||||
|
validateHexColorAndSetDefaultIfNeeded(watermark);
|
||||||
|
validateOpacityAndSetDefaultIfNeeded(watermark);
|
||||||
WatermarkEntity watermarkEntity = new WatermarkEntity();
|
WatermarkEntity watermarkEntity = new WatermarkEntity();
|
||||||
BeanUtils.copyProperties(watermark, watermarkEntity, "id", "dateAdded", "dateModified");
|
BeanUtils.copyProperties(watermark, watermarkEntity, "id", "dateAdded", "dateModified");
|
||||||
watermarkEntity.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
watermarkEntity.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||||
@ -87,6 +96,20 @@ public class WatermarkService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void validateOpacityAndSetDefaultIfNeeded(WatermarkModel watermark) {
|
||||||
|
if (watermark.getOpacity() < 0) {
|
||||||
|
watermark.setOpacity(DEFAULT_OPACITY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateHexColorAndSetDefaultIfNeeded(WatermarkModel watermark) {
|
||||||
|
if (StringUtils.isBlank(watermark.getHexColor())) {
|
||||||
|
watermark.setHexColor(DEFAULT_HEX_COLOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
ColorUtils.validateColor(watermark.getHexColor());
|
||||||
|
}
|
||||||
|
|
||||||
private void validateWatermark(WatermarkModel watermark) {
|
private void validateWatermark(WatermarkModel watermark) {
|
||||||
|
|
||||||
if (StringUtils.isBlank(watermark.getName())) {
|
if (StringUtils.isBlank(watermark.getName())) {
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package com.iqser.red.service.peristence.v1.server.integration.tests;
|
|||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@ -198,6 +199,72 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest {
|
|||||||
var loadedWatermark2 = watermarkClient.getWatermark(saved.getId());
|
var loadedWatermark2 = watermarkClient.getWatermark(saved.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCreateWatermarkWithInvalidHexColor() {
|
||||||
|
|
||||||
|
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
|
||||||
|
|
||||||
|
var color = "000000";
|
||||||
|
var watermark = new WatermarkModel();
|
||||||
|
watermark.setName("watermark name");
|
||||||
|
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.setFontType("font");
|
||||||
|
watermark.setHexColor(color);
|
||||||
|
watermark.setOrientation(WatermarkOrientation.DIAGONAL);
|
||||||
|
watermark.setDossierTemplateId(dossierTemplate.getId());
|
||||||
|
|
||||||
|
Exception exception = Assertions.assertThrows(FeignException.BadRequest.class, () -> {
|
||||||
|
watermarkClient.saveWatermark(watermark);
|
||||||
|
});
|
||||||
|
|
||||||
|
String expectedMessage = "The specified color: " + color + " is malformed.";
|
||||||
|
String actualMessage = exception.getMessage();
|
||||||
|
|
||||||
|
assertThat(actualMessage).contains(expectedMessage);
|
||||||
|
|
||||||
|
watermark.setHexColor(null);
|
||||||
|
var saved2 = watermarkClient.saveWatermark(watermark);
|
||||||
|
|
||||||
|
assertThat(saved2.getHexColor()).isEqualTo("#000000");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCreateWatermarkWithDifferentOpacities() {
|
||||||
|
|
||||||
|
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
|
||||||
|
// create watermark with no opacity set
|
||||||
|
var color = "#000000";
|
||||||
|
var watermark = new WatermarkModel();
|
||||||
|
watermark.setName("watermark name");
|
||||||
|
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.setFontType("font");
|
||||||
|
watermark.setHexColor(color);
|
||||||
|
watermark.setOrientation(WatermarkOrientation.DIAGONAL);
|
||||||
|
watermark.setDossierTemplateId(dossierTemplate.getId());
|
||||||
|
assertThat(watermark.getOpacity()).isEqualTo(0);
|
||||||
|
|
||||||
|
var saved2 = watermarkClient.saveWatermark(watermark);
|
||||||
|
|
||||||
|
assertThat(saved2.getOpacity()).isEqualTo(0);
|
||||||
|
|
||||||
|
// create watermark with invalid opacity
|
||||||
|
var watermark2 = new WatermarkModel();
|
||||||
|
watermark2.setName("watermark name2");
|
||||||
|
watermark2.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.");
|
||||||
|
watermark2.setFontSize(14);
|
||||||
|
watermark2.setFontType("font");
|
||||||
|
watermark2.setHexColor(color);
|
||||||
|
watermark2.setOrientation(WatermarkOrientation.DIAGONAL);
|
||||||
|
watermark2.setDossierTemplateId(dossierTemplate.getId());
|
||||||
|
watermark2.setOpacity(-1);
|
||||||
|
|
||||||
|
saved2 = watermarkClient.saveWatermark(watermark2);
|
||||||
|
|
||||||
|
assertThat(saved2.getOpacity()).isEqualTo(30);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testWatermarkTextWithJapaneseText() {
|
public void testWatermarkTextWithJapaneseText() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user