Skip to content

Commit

Permalink
Added validator and service
Browse files Browse the repository at this point in the history
  • Loading branch information
cgendreau committed Feb 24, 2025
1 parent ad54964 commit 4312d3f
Show file tree
Hide file tree
Showing 5 changed files with 119 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -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<DataExportTemplate> {

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);
}

}
Original file line number Diff line number Diff line change
@@ -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<DataExportTemplate> {

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);
}
}
}
2 changes: 1 addition & 1 deletion src/main/resources/validation-messages.properties
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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);
}

}
Original file line number Diff line number Diff line change
@@ -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");
}

}

0 comments on commit 4312d3f

Please sign in to comment.