diff --git a/src/main/java/ca/gc/aafc/dina/export/api/service/DataExportTemplateService.java b/src/main/java/ca/gc/aafc/dina/export/api/service/DataExportTemplateService.java new file mode 100644 index 0000000..4bc7021 --- /dev/null +++ b/src/main/java/ca/gc/aafc/dina/export/api/service/DataExportTemplateService.java @@ -0,0 +1,39 @@ +package ca.gc.aafc.dina.export.api.service; + +import java.util.UUID; +import lombok.NonNull; + +import org.springframework.stereotype.Service; +import org.springframework.validation.SmartValidator; + +import ca.gc.aafc.dina.export.api.entity.DataExportTemplate; +import ca.gc.aafc.dina.export.api.validation.DataExportTemplateValidator; +import ca.gc.aafc.dina.jpa.BaseDAO; +import ca.gc.aafc.dina.service.DefaultDinaService; + +@Service +public class DataExportTemplateService extends DefaultDinaService { + + private final DataExportTemplateValidator dataExportTemplateValidator; + + public DataExportTemplateService(@NonNull BaseDAO baseDAO, + DataExportTemplateValidator dataExportTemplateValidator, + @NonNull SmartValidator validator) { + super(baseDAO, validator); + this.dataExportTemplateValidator = dataExportTemplateValidator; + } + + @Override + public void preCreate(DataExportTemplate dinaExportTemplate) { + + if (dinaExportTemplate.getUuid() == null) { + dinaExportTemplate.setUuid(UUID.randomUUID()); + } + } + + @Override + public void validateBusinessRules(DataExportTemplate entity) { + applyBusinessRule(entity, dataExportTemplateValidator); + } + +} diff --git a/src/main/java/ca/gc/aafc/dina/export/api/validation/DataExportTemplateValidator.java b/src/main/java/ca/gc/aafc/dina/export/api/validation/DataExportTemplateValidator.java new file mode 100644 index 0000000..57610b2 --- /dev/null +++ b/src/main/java/ca/gc/aafc/dina/export/api/validation/DataExportTemplateValidator.java @@ -0,0 +1,29 @@ +package ca.gc.aafc.dina.export.api.validation; + +import org.apache.commons.lang3.BooleanUtils; +import org.springframework.context.MessageSource; +import org.springframework.stereotype.Component; +import org.springframework.validation.Errors; + +import ca.gc.aafc.dina.export.api.entity.DataExportTemplate; +import ca.gc.aafc.dina.validation.DinaBaseValidator; + +@Component +public class DataExportTemplateValidator extends DinaBaseValidator { + + static final String INVALID_PUBLICLY_AVAILABLE_KEY = "dataExportTemplate.publiclyReleasableAndRestrictToCreatedBy.invalid"; + + public DataExportTemplateValidator(MessageSource messageSource) { + super(DataExportTemplate.class, messageSource); + } + + @Override + public void validateTarget(DataExportTemplate target, Errors errors) { + + if (BooleanUtils.isTrue(target.getPubliclyReleasable()) && + BooleanUtils.isTrue(target.getRestrictToCreatedBy())) { + String errorMessage = getMessage(INVALID_PUBLICLY_AVAILABLE_KEY); + errors.reject(INVALID_PUBLICLY_AVAILABLE_KEY, errorMessage); + } + } +} diff --git a/src/main/resources/validation-messages.properties b/src/main/resources/validation-messages.properties index ece69ff..5e8629e 100644 --- a/src/main/resources/validation-messages.properties +++ b/src/main/resources/validation-messages.properties @@ -1,2 +1,2 @@ -transaction.duplicateRoleUUID=Agent roles can not have duplicated agents. description.isEmpty=description cannot be empty nor be blank +dataExportTemplate.publiclyReleasableAndRestrictToCreatedBy.invalid=DataExportTemplate can be publiclyReleasable or restricted to createdBy but not both \ No newline at end of file diff --git a/src/test/java/ca/gc/aafc/dina/export/api/service/DataExportTemplateServiceIT.java b/src/test/java/ca/gc/aafc/dina/export/api/service/DataExportTemplateServiceIT.java new file mode 100644 index 0000000..b71f46a --- /dev/null +++ b/src/test/java/ca/gc/aafc/dina/export/api/service/DataExportTemplateServiceIT.java @@ -0,0 +1,28 @@ +package ca.gc.aafc.dina.export.api.service; + +import org.junit.jupiter.api.Test; + +import ca.gc.aafc.dina.export.api.BaseIntegrationTest; +import ca.gc.aafc.dina.export.api.entity.DataExportTemplate; +import ca.gc.aafc.dina.export.api.testsupport.factories.DataExportTemplateFactory; + +import javax.inject.Inject; +import javax.transaction.Transactional; + +public class DataExportTemplateServiceIT extends BaseIntegrationTest { + + @Inject + private DataExportTemplateService dataExportTemplateService; + + @Test + @Transactional + public void onCreate_DataExportTemplateCreated() { + DataExportTemplate dataExportTemplate = DataExportTemplateFactory.newDataExportTemplate() + .restrictToCreatedBy(true) + .publiclyReleasable(false) + .build(); + + dataExportTemplateService.create(dataExportTemplate); + } + +} diff --git a/src/test/java/ca/gc/aafc/dina/export/api/testsupport/factories/DataExportTemplateFactory.java b/src/test/java/ca/gc/aafc/dina/export/api/testsupport/factories/DataExportTemplateFactory.java new file mode 100644 index 0000000..cdecaf3 --- /dev/null +++ b/src/test/java/ca/gc/aafc/dina/export/api/testsupport/factories/DataExportTemplateFactory.java @@ -0,0 +1,22 @@ +package ca.gc.aafc.dina.export.api.testsupport.factories; + +import ca.gc.aafc.dina.export.api.entity.DataExport; +import ca.gc.aafc.dina.export.api.entity.DataExportTemplate; +import ca.gc.aafc.dina.testsupport.factories.TestableEntityFactory; + +import java.util.UUID; + +public class DataExportTemplateFactory { + + public static DataExportTemplate.DataExportTemplateBuilder newDataExportTemplate() { + return DataExportTemplate.builder() + .uuid(UUID.randomUUID()) + .group("aafc") + .exportType(DataExport.ExportType.TABULAR_DATA) + .publiclyReleasable(false) + .restrictToCreatedBy(false) + .name(TestableEntityFactory.generateRandomNameLettersOnly(7)) + .createdBy("test user"); + } + +}