Skip to content
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
package org.folio.des.validator.acquisition;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.folio.des.domain.dto.ExportTypeSpecificParameters;
import org.folio.des.domain.dto.VendorEdiOrdersExportConfig;
import org.folio.des.domain.dto.VendorEdiOrdersExportConfig.IntegrationTypeEnum;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

import static org.folio.des.domain.dto.VendorEdiOrdersExportConfig.FileFormatEnum.EDI;
import static org.folio.des.domain.dto.VendorEdiOrdersExportConfig.TransmissionMethodEnum.FTP;

public abstract class AbstractExportParametersValidator implements Validator {

@Override
public boolean supports(Class<?> classType) {
return ExportTypeSpecificParameters.class.isAssignableFrom(classType);
}

@Override
public final void validate(Object target, Errors errors) {
if (target == null) {
throw new IllegalArgumentException("Export configuration is incomplete, missing or invalid export specific parameters");
}

var exportConfig = ((ExportTypeSpecificParameters) target).getVendorEdiOrdersExportConfig();
if (exportConfig == null) {
throw new IllegalArgumentException("Export configuration is incomplete, missing an export config");
}

var expectedIntegrationType = getExpectedIntegrationType();
if (expectedIntegrationType != null) {
if (exportConfig.getIntegrationType() == null) {
throw new IllegalArgumentException("Export configuration is incomplete, missing an integration type");
}

if (exportConfig.getIntegrationType() != expectedIntegrationType) {
throw new IllegalArgumentException(String.format("Export configuration is incomplete, an integration type is not set to %s", expectedIntegrationType));
}
}

validateFileFormat(exportConfig);
validateSpecific(exportConfig, errors);
}

protected abstract IntegrationTypeEnum getExpectedIntegrationType();

protected void validateSpecific(VendorEdiOrdersExportConfig exportConfig, Errors errors) {
}

protected void validateFileFormat(VendorEdiOrdersExportConfig exportConfig) {
var fileFormat = exportConfig.getFileFormat();
if (fileFormat == null) {
throw new IllegalArgumentException("Export configuration is incomplete, missing a file format");
}

if (fileFormat == EDI) {
validateEdiConfig(exportConfig);
}

validateTransmissionType(exportConfig);
}

protected void validateEdiConfig(VendorEdiOrdersExportConfig exportConfig) {
var ediConfig = exportConfig.getEdiConfig();
if (ediConfig != null) {
if (CollectionUtils.isEmpty(ediConfig.getAccountNoList())) {
throw new IllegalArgumentException("Export configuration is incomplete, missing Vendor Account Number(s)");
}

if (StringUtils.isEmpty(ediConfig.getLibEdiCode()) || StringUtils.isEmpty(ediConfig.getVendorEdiCode())) {
throw new IllegalArgumentException("Export configuration is incomplete, missing library EDI code/Vendor EDI code");
}
}
}

protected void validateTransmissionType(VendorEdiOrdersExportConfig exportConfig) {
var transmissionMethod = exportConfig.getTransmissionMethod();
if (transmissionMethod == null) {
throw new IllegalArgumentException("Export configuration is incomplete, missing a transmission type");
}

if (transmissionMethod == FTP) {
var ediFtp = exportConfig.getEdiFtp();
if (ediFtp == null) {
throw new IllegalArgumentException("Export configuration is incomplete, missing EDI FTP Properties");
}

if (ediFtp.getServerAddress() == null) {
throw new IllegalArgumentException("Export configuration is incomplete, missing FTP/SFTP Server Address");
}

if (ediFtp.getFtpPort() == null) {
throw new IllegalArgumentException("Export configuration is incomplete, missing FTP/SFTP Port");
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,103 +1,14 @@
package org.folio.des.validator.acquisition;

import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.folio.des.domain.dto.ExportTypeSpecificParameters;
import org.folio.des.domain.dto.VendorEdiOrdersExportConfig;
import org.folio.des.domain.dto.VendorEdiOrdersExportConfig.IntegrationTypeEnum;
import org.springframework.stereotype.Service;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

import static org.folio.des.domain.dto.VendorEdiOrdersExportConfig.FileFormatEnum.EDI;
import static org.folio.des.domain.dto.VendorEdiOrdersExportConfig.IntegrationTypeEnum.CLAIMING;
import static org.folio.des.domain.dto.VendorEdiOrdersExportConfig.TransmissionMethodEnum.FTP;

@Log4j2
@Service
@AllArgsConstructor
public class ClaimsExportParametersValidator implements Validator {

@Override
public boolean supports(Class<?> classType) {
return ExportTypeSpecificParameters.class.isAssignableFrom(classType);
}
public class ClaimsExportParametersValidator extends AbstractExportParametersValidator {

@Override
public void validate(Object target, Errors errors) {
if (target == null) {
throw new IllegalArgumentException("Export configuration is incomplete, missing or invalid export specific parameters");
}

var exportConfig = ((ExportTypeSpecificParameters) target).getVendorEdiOrdersExportConfig();
validateExportConfig(exportConfig);
validateIntegrationType(exportConfig);
validateFileFormat(exportConfig);
protected IntegrationTypeEnum getExpectedIntegrationType() {
return IntegrationTypeEnum.CLAIMING;
}

private void validateExportConfig(VendorEdiOrdersExportConfig exportConfig) {
if (exportConfig == null) {
throw new IllegalArgumentException("Export configuration is incomplete, missing an export config");
}
}

private void validateIntegrationType(VendorEdiOrdersExportConfig exportConfig) {
var integrationType = exportConfig.getIntegrationType();
if (integrationType == null) {
throw new IllegalArgumentException("Export configuration is incomplete, missing an integration type");
}

if (integrationType != CLAIMING) {
throw new IllegalArgumentException(String.format("Export configuration is incomplete, an integration type is not set to %s", CLAIMING));
}
}

private void validateFileFormat(VendorEdiOrdersExportConfig exportConfig) {
var fileFormat = exportConfig.getFileFormat();
if (fileFormat == null) {
throw new IllegalArgumentException("Export configuration is incomplete, missing a file format");
}

if (fileFormat == EDI) {
validateEdiConfig(exportConfig);
}

validateTransmissionType(exportConfig);
}

private void validateEdiConfig(VendorEdiOrdersExportConfig exportConfig) {
var ediConfig = exportConfig.getEdiConfig();
if (ediConfig != null) {
if (CollectionUtils.isEmpty(ediConfig.getAccountNoList())) {
throw new IllegalArgumentException("Export configuration is incomplete, missing Vendor Account Number(s)");
}

if (StringUtils.isEmpty(ediConfig.getLibEdiCode()) || StringUtils.isEmpty(ediConfig.getVendorEdiCode())) {
throw new IllegalArgumentException("Export configuration is incomplete, missing library EDI code/Vendor EDI code");
}
}
}

private void validateTransmissionType(VendorEdiOrdersExportConfig exportConfig) {
var transmissionMethod = exportConfig.getTransmissionMethod();
if (transmissionMethod == null) {
throw new IllegalArgumentException("Export configuration is incomplete, missing a transmission type");
}

if (transmissionMethod == FTP) {
var ediFtp = exportConfig.getEdiFtp();
if (ediFtp == null) {
throw new IllegalArgumentException("Export configuration is incomplete, missing EDI FTP Properties");
}

if (ediFtp.getServerAddress() == null) {
throw new IllegalArgumentException("Export configuration is incomplete, missing FTP/SFTP Server Address");
}

if (ediFtp.getFtpPort() == null) {
throw new IllegalArgumentException("Export configuration is incomplete, missing FTP/SFTP Port");
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,55 +1,28 @@
package org.folio.des.validator.acquisition;

import org.apache.commons.lang3.StringUtils;
import org.folio.des.domain.dto.EdiConfig;
import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.folio.des.domain.dto.EdiSchedule;
import org.folio.des.domain.dto.ExportType;
import org.folio.des.domain.dto.ExportTypeSpecificParameters;
import org.folio.des.domain.dto.VendorEdiOrdersExportConfig;
import org.folio.des.domain.dto.VendorEdiOrdersExportConfig.IntegrationTypeEnum;
import org.springframework.stereotype.Service;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j2;

@AllArgsConstructor
@Log4j2
@Service
public class EdifactOrdersExportParametersValidator implements Validator {
private EdifactOrdersScheduledParamsValidator edifactOrdersScheduledParamsValidator;
public class EdifactOrdersExportParametersValidator extends AbstractExportParametersValidator {
private final EdifactOrdersScheduledParamsValidator edifactOrdersScheduledParamsValidator;

@Override
public boolean supports(Class<?> aClass) {
return ExportTypeSpecificParameters.class.isAssignableFrom(aClass);
protected IntegrationTypeEnum getExpectedIntegrationType() {
return IntegrationTypeEnum.ORDERING;
}

@Override
public void validate(Object target, Errors errors) {
if (target == null) {
String msg = String.format("%s type should contain %s parameters", ExportType.EDIFACT_ORDERS_EXPORT.getValue(),
ExportTypeSpecificParameters.class.getSimpleName());
errors.rejectValue(ExportTypeSpecificParameters.class.getSimpleName(), msg);
throw new IllegalArgumentException(msg);
}
ExportTypeSpecificParameters specificParameters = (ExportTypeSpecificParameters) target;
VendorEdiOrdersExportConfig vendorEdiOrdersExportConfig = specificParameters.getVendorEdiOrdersExportConfig();
if (vendorEdiOrdersExportConfig == null) {
String msg = String.format("%s type should contain %s parameters", ExportType.EDIFACT_ORDERS_EXPORT.getValue(),
VendorEdiOrdersExportConfig.class.getSimpleName());
throw new IllegalArgumentException(msg);
}
EdiConfig ediConfig = vendorEdiOrdersExportConfig.getEdiConfig();
if (ediConfig != null &&
(StringUtils.isEmpty(ediConfig.getLibEdiCode()) || ediConfig.getLibEdiType() == null || StringUtils.isEmpty(ediConfig.getVendorEdiCode()) || ediConfig.getVendorEdiType() == null)) {
throw new IllegalArgumentException("Export configuration is incomplete, missing library EDI code/Vendor EDI code");
}
if (vendorEdiOrdersExportConfig.getEdiFtp() != null && vendorEdiOrdersExportConfig.getEdiFtp().getFtpPort() == null) {
throw new IllegalArgumentException("Export configuration is incomplete, missing FTP/SFTP Port");
}
EdiSchedule ediSchedule = vendorEdiOrdersExportConfig.getEdiSchedule();
if (vendorEdiOrdersExportConfig.getEdiSchedule() != null &&
ediSchedule.getScheduleParameters() != null) {
protected void validateSpecific(VendorEdiOrdersExportConfig exportConfig, Errors errors) {
EdiSchedule ediSchedule = exportConfig.getEdiSchedule();
if (ediSchedule != null && ediSchedule.getScheduleParameters() != null) {
edifactOrdersScheduledParamsValidator.validate(ediSchedule.getScheduleParameters(), errors);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ class ConfigsControllerTest extends BaseTest {
private static final String UPDATE_CONFIG_REQUEST_FAILED =
"{\"id\":\"0a3cba78-16e7-498e-b75b-98713000277b\",\"type\":\"BURSAR_FEES_FINES\",\"scheduleFrequency\":5,\"schedulePeriod\":\"DAY\",\"scheduleTime\":\"00:20:00.000Z\"}";
private static final String EDIFACT_CONFIG_REQUEST =
"{\"id\":\"5a3cba28-16e7-498e-b73b-98713000298e\", \"type\": \"EDIFACT_ORDERS_EXPORT\", \"exportTypeSpecificParameters\": { \"vendorEdiOrdersExportConfig\": {\"vendorId\": \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\", \"configName\": \"edi_config\", \"ediSchedule\": {\"enableScheduledExport\": true, \"scheduleParameters\": {\"scheduleFrequency\": 1, \"schedulePeriod\": \"HOUR\", \"scheduleTime\": \"15:30:00\"}}}}, \"schedulePeriod\": \"HOUR\"}";
"{\"id\":\"5a3cba28-16e7-498e-b73b-98713000298e\", \"type\": \"EDIFACT_ORDERS_EXPORT\", \"exportTypeSpecificParameters\": { \"vendorEdiOrdersExportConfig\": {\"vendorId\": \"046b6c7f-0b8a-43b9-b35d-6489e6daee91\", \"configName\": \"edi_config\", \"integrationType\": \"Ordering\", \"fileFormat\": \"CSV\", \"transmissionMethod\": \"File download\", \"ediSchedule\": {\"enableScheduledExport\": true, \"scheduleParameters\": {\"scheduleFrequency\": 1, \"schedulePeriod\": \"HOUR\", \"scheduleTime\": \"15:30:00\"}}}}, \"schedulePeriod\": \"HOUR\"}";
private static final String CLAIMS_REQUEST =
"{\"id\":\"30ad9c6d-f2e7-425f-a171-b4e0cbce7204\",\"type\":\"CLAIMS\",\"tenant\":\"diku\",\"exportTypeSpecificParameters\":{\"vendorEdiOrdersExportConfig\":{\"exportConfigId\":\"30ad9c6d-f2e7-425f-a171-b4e0cbce7204\",\"vendorId\":\"1e958895-82a6-4fa1-b6fe-763063381946\",\"configName\":\"Test 1-3\",\"ediConfig\":{\"accountNoList\":[\"3\"],\"ediNamingConvention\":\"{organizationCode}-{integrationName}-{exportJobEndDate}\",\"libEdiType\":\"31B/US-SAN\",\"vendorEdiType\":\"31B/US-SAN\",\"sendAccountNumber\":false,\"supportOrder\":false,\"supportInvoice\":false},\"ediFtp\":{\"ftpConnMode\":\"Active\",\"ftpFormat\":\"SFTP\",\"ftpMode\":\"ASCII\"},\"isDefaultConfig\":false,\"integrationType\":\"Claiming\",\"transmissionMethod\":\"File download\",\"fileFormat\":\"CSV\"}},\"schedulePeriod\":\"NONE\"}";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,9 @@ private ExportConfig getExportConfig() {
EdiFtp ediFtp = new EdiFtp();

vendorEdiOrdersExportConfig.setVendorId(vendorId);
vendorEdiOrdersExportConfig.setIntegrationType(VendorEdiOrdersExportConfig.IntegrationTypeEnum.ORDERING);
vendorEdiOrdersExportConfig.setFileFormat(VendorEdiOrdersExportConfig.FileFormatEnum.EDI);
vendorEdiOrdersExportConfig.setTransmissionMethod(VendorEdiOrdersExportConfig.TransmissionMethodEnum.FTP);

EdiConfig ediConfig = new EdiConfig();
EdiSchedule accountEdiSchedule = new EdiSchedule();
Expand All @@ -249,6 +252,7 @@ private ExportConfig getExportConfig() {
ediConfig.setVendorEdiCode("1694510");
ediConfig.setVendorEdiType(EdiConfig.VendorEdiTypeEnum._31B_US_SAN);
ediFtp.setFtpPort(22);
ediFtp.setServerAddress("ftp.example.com");

vendorEdiOrdersExportConfig.setEdiFtp(ediFtp);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,9 @@ private ExportConfig getExportConfig() {
EdiFtp ediFtp = new EdiFtp();

vendorEdiOrdersExportConfig.setVendorId(vendorId);
vendorEdiOrdersExportConfig.setIntegrationType(VendorEdiOrdersExportConfig.IntegrationTypeEnum.ORDERING);
vendorEdiOrdersExportConfig.setFileFormat(VendorEdiOrdersExportConfig.FileFormatEnum.EDI);
vendorEdiOrdersExportConfig.setTransmissionMethod(VendorEdiOrdersExportConfig.TransmissionMethodEnum.FTP);

EdiConfig ediConfig =new EdiConfig();
EdiSchedule accountEdiSchedule = new EdiSchedule();
Expand All @@ -158,6 +161,7 @@ private ExportConfig getExportConfig() {
ediConfig.setVendorEdiCode("1694510");
ediConfig.setVendorEdiType(EdiConfig.VendorEdiTypeEnum._31B_US_SAN);
ediFtp.setFtpPort(22);
ediFtp.setServerAddress("ftp.example.com");

vendorEdiOrdersExportConfig.setEdiFtp(ediFtp);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ class EdifactOrdersExportServiceTest {
.vendorEdiOrdersExportConfig(new VendorEdiOrdersExportConfig()
.configName("edi_test_config")
.vendorId(VENDOR_ID)
.integrationType(VendorEdiOrdersExportConfig.IntegrationTypeEnum.ORDERING)
.fileFormat(VendorEdiOrdersExportConfig.FileFormatEnum.CSV)
.transmissionMethod(VendorEdiOrdersExportConfig.TransmissionMethodEnum.FILE_DOWNLOAD)
.ediSchedule(new EdiSchedule()
.enableScheduledExport(true)
.scheduleParameters(new ScheduleParameters()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,22 @@ void shouldThrowExceptionIfSpecificParametersIsNull() {

@Test
@DisplayName("Should throw exception if edifact config is Null")
void shouldThrowExceptionIfBursarFeeFinesIsNull() {
void shouldThrowExceptionIfEdifactConfigIsNull() {
Errors errors = mock(Errors.class);
ExportTypeSpecificParameters specificParameters = new ExportTypeSpecificParameters();
assertThrows(IllegalArgumentException.class, () -> validator.validate(specificParameters, errors));
}

@Test
@DisplayName("Should pass validation if edifact is not Null")
void shouldPassValidationIfBursarFeeFinesIsNotNull() {
void shouldPassValidationIfEdifactConfigIsNotNull() {
Errors errors = mock(Errors.class);
ExportTypeSpecificParameters specificParameters = new ExportTypeSpecificParameters();
specificParameters.setVendorEdiOrdersExportConfig(new VendorEdiOrdersExportConfig());
VendorEdiOrdersExportConfig config = new VendorEdiOrdersExportConfig();
config.setIntegrationType(VendorEdiOrdersExportConfig.IntegrationTypeEnum.ORDERING);
config.setFileFormat(VendorEdiOrdersExportConfig.FileFormatEnum.CSV);
config.setTransmissionMethod(VendorEdiOrdersExportConfig.TransmissionMethodEnum.FILE_DOWNLOAD);
specificParameters.setVendorEdiOrdersExportConfig(config);
validator.validate(specificParameters, errors);
}
}
Loading