Add custom Configuration class for organisation/provisioning module (FINERACT-1932)

This commit is contained in:
Sinha, Abhinav
2023-10-26 20:03:30 +02:00
committed by Aleksandar Vidakovic
parent 62811ad60b
commit 01e7dcf4ce
6 changed files with 112 additions and 80 deletions
@@ -21,24 +21,17 @@ package org.apache.fineract.organisation.provisioning.service;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import lombok.RequiredArgsConstructor;
import org.apache.fineract.infrastructure.core.domain.JdbcSupport;
import org.apache.fineract.organisation.provisioning.data.ProvisioningCategoryData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class ProvisioningCategoryReadPlatformServiceImpl implements ProvisioningCategoryReadPlatformService {
private final JdbcTemplate jdbcTemplate;
private final ProvisioningCategoryRowMapper provisionCategoryRowMapper;
@Autowired
public ProvisioningCategoryReadPlatformServiceImpl(final JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
this.provisionCategoryRowMapper = new ProvisioningCategoryRowMapper();
}
private final ProvisioningCategoryRowMapper provisionCategoryRowMapper = new ProvisioningCategoryRowMapper();
@Override
public Collection<ProvisioningCategoryData> retrieveAllProvisionCategories() {
@@ -20,6 +20,8 @@ package org.apache.fineract.organisation.provisioning.service;
import jakarta.persistence.PersistenceException;
import java.util.Map;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.fineract.infrastructure.core.api.JsonCommand;
import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
@@ -30,33 +32,20 @@ import org.apache.fineract.organisation.provisioning.domain.ProvisioningCategory
import org.apache.fineract.organisation.provisioning.exception.ProvisioningCategoryCannotBeDeletedException;
import org.apache.fineract.organisation.provisioning.exception.ProvisioningCategoryNotFoundException;
import org.apache.fineract.organisation.provisioning.serialization.ProvisioningCategoryDefinitionJsonDeserializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.dao.NonTransientDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.orm.jpa.JpaSystemException;
import org.springframework.stereotype.Service;
@Service
@Slf4j
@RequiredArgsConstructor
public class ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl implements ProvisioningCategoryWritePlatformService {
private static final Logger LOG = LoggerFactory.getLogger(ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl.class);
private final ProvisioningCategoryRepository provisioningCategoryRepository;
private final ProvisioningCategoryDefinitionJsonDeserializer fromApiJsonDeserializer;
private final JdbcTemplate jdbcTemplate;
@Autowired
public ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl(final ProvisioningCategoryRepository provisioningCategoryRepository,
final ProvisioningCategoryDefinitionJsonDeserializer fromApiJsonDeserializer, final JdbcTemplate jdbcTemplate) {
this.provisioningCategoryRepository = provisioningCategoryRepository;
this.fromApiJsonDeserializer = fromApiJsonDeserializer;
this.jdbcTemplate = jdbcTemplate;
}
@Override
public CommandProcessingResult createProvisioningCateogry(JsonCommand command) {
try {
@@ -127,7 +116,7 @@ public class ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl implement
throw new PlatformDataIntegrityException("error.msg.provisioning.duplicate.categoryname",
"Provisioning Cateory with name `" + name + "` already exists", "category name", name);
}
LOG.error("Error occured.", dve);
log.error("Error occured.", dve);
throw new PlatformDataIntegrityException("error.msg.charge.unknown.data.integrity.issue",
"Unknown data integrity issue with resource: " + realCause.getMessage());
}
@@ -139,7 +128,7 @@ public class ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl implement
throw new PlatformDataIntegrityException("error.msg.provisioning.duplicate.categoryname",
"Provisioning Cateory with name `" + name + "` already exists", "category name", name);
}
LOG.error("Error occured.", dve);
log.error("Error occured.", dve);
throw new PlatformDataIntegrityException("error.msg.charge.unknown.data.integrity.issue",
"Unknown data integrity issue with resource: " + realCause.getMessage());
}
@@ -27,6 +27,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import lombok.RequiredArgsConstructor;
import org.apache.fineract.accounting.glaccount.domain.GLAccount;
import org.apache.fineract.accounting.glaccount.domain.GLAccountRepository;
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
@@ -41,10 +42,8 @@ import org.apache.fineract.organisation.provisioning.domain.ProvisioningCriteria
import org.apache.fineract.organisation.provisioning.exception.ProvisioningCriteriaOverlappingDefinitionException;
import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct;
import org.apache.fineract.portfolio.loanproduct.domain.LoanProductRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class ProvisioningCriteriaAssembler {
private final FromJsonHelper fromApiJsonHelper;
@@ -53,17 +52,6 @@ public class ProvisioningCriteriaAssembler {
private final GLAccountRepository glAccountRepository;
private final PlatformSecurityContext platformSecurityContext;
@Autowired
public ProvisioningCriteriaAssembler(final FromJsonHelper fromApiJsonHelper,
final ProvisioningCategoryRepository provisioningCategoryRepository, final LoanProductRepository loanProductRepository,
final GLAccountRepository glAccountRepository, final PlatformSecurityContext platformSecurityContext) {
this.fromApiJsonHelper = fromApiJsonHelper;
this.provisioningCategoryRepository = provisioningCategoryRepository;
this.loanProductRepository = loanProductRepository;
this.glAccountRepository = glAccountRepository;
this.platformSecurityContext = platformSecurityContext;
}
public List<LoanProduct> parseLoanProducts(final JsonElement jsonElement) {
List<LoanProduct> loanProducts = new ArrayList<>();
if (fromApiJsonHelper.parameterExists(ProvisioningCriteriaConstants.JSON_LOANPRODUCTS_PARAM, jsonElement)) {
@@ -24,6 +24,7 @@ import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.apache.fineract.accounting.glaccount.data.GLAccountData;
import org.apache.fineract.accounting.glaccount.service.GLAccountReadPlatformService;
import org.apache.fineract.organisation.provisioning.data.ProvisioningCategoryData;
@@ -32,13 +33,11 @@ import org.apache.fineract.organisation.provisioning.data.ProvisioningCriteriaDe
import org.apache.fineract.organisation.provisioning.exception.ProvisioningCriteriaNotFoundException;
import org.apache.fineract.portfolio.loanproduct.data.LoanProductData;
import org.apache.fineract.portfolio.loanproduct.service.LoanProductReadPlatformService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class ProvisioningCriteriaReadPlatformServiceImpl implements ProvisioningCriteriaReadPlatformService {
private final JdbcTemplate jdbcTemplate;
@@ -47,19 +46,6 @@ public class ProvisioningCriteriaReadPlatformServiceImpl implements Provisioning
private final GLAccountReadPlatformService glAccountReadPlatformService;
private final LoanProductReadPlatformService loanProductReaPlatformService;
@Autowired
public ProvisioningCriteriaReadPlatformServiceImpl(final JdbcTemplate jdbcTemplate,
final ProvisioningCategoryReadPlatformService provisioningCategoryReadPlatformService,
final LoanProductReadPlatformService loanProductReadPlatformService,
final GLAccountReadPlatformService glAccountReadPlatformService,
final LoanProductReadPlatformService loanProductReaPlatformService) {
this.jdbcTemplate = jdbcTemplate;
this.provisioningCategoryReadPlatformService = provisioningCategoryReadPlatformService;
this.loanProductReadPlatformService = loanProductReadPlatformService;
this.glAccountReadPlatformService = glAccountReadPlatformService;
this.loanProductReaPlatformService = loanProductReaPlatformService;
}
@Override
public ProvisioningCriteriaData retrievePrivisiongCriteriaTemplate() {
boolean onlyActive = true;
@@ -26,6 +26,8 @@ import java.math.BigDecimal;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.fineract.accounting.glaccount.domain.GLAccount;
import org.apache.fineract.accounting.glaccount.domain.GLAccountRepository;
@@ -44,18 +46,13 @@ import org.apache.fineract.organisation.provisioning.exception.ProvisioningCrite
import org.apache.fineract.organisation.provisioning.exception.ProvisioningCriteriaNotFoundException;
import org.apache.fineract.organisation.provisioning.serialization.ProvisioningCriteriaDefinitionJsonDeserializer;
import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.orm.jpa.JpaSystemException;
import org.springframework.stereotype.Service;
@Service
@Slf4j
@RequiredArgsConstructor
public class ProvisioningCriteriaWritePlatformServiceJpaRepositoryImpl implements ProvisioningCriteriaWritePlatformService {
private static final Logger LOG = LoggerFactory.getLogger(ProvisioningCriteriaWritePlatformServiceJpaRepositoryImpl.class);
private final ProvisioningCriteriaDefinitionJsonDeserializer fromApiJsonDeserializer;
private final ProvisioningCriteriaAssembler provisioningCriteriaAssembler;
private final ProvisioningCriteriaRepository provisioningCriteriaRepository;
@@ -63,21 +60,6 @@ public class ProvisioningCriteriaWritePlatformServiceJpaRepositoryImpl implement
private final GLAccountRepository glAccountRepository;
private final ProvisioningEntriesReadPlatformService provisioningEntriesReadPlatformService;
@Autowired
public ProvisioningCriteriaWritePlatformServiceJpaRepositoryImpl(
final ProvisioningCriteriaDefinitionJsonDeserializer fromApiJsonDeserializer,
final ProvisioningCriteriaAssembler provisioningCriteriaAssembler,
final ProvisioningCriteriaRepository provisioningCriteriaRepository, final FromJsonHelper fromApiJsonHelper,
final GLAccountRepository glAccountRepository,
final ProvisioningEntriesReadPlatformService provisioningEntriesReadPlatformService) {
this.fromApiJsonDeserializer = fromApiJsonDeserializer;
this.provisioningCriteriaAssembler = provisioningCriteriaAssembler;
this.provisioningCriteriaRepository = provisioningCriteriaRepository;
this.fromApiJsonHelper = fromApiJsonHelper;
this.glAccountRepository = glAccountRepository;
this.provisioningEntriesReadPlatformService = provisioningEntriesReadPlatformService;
}
@Override
public CommandProcessingResult createProvisioningCriteria(JsonCommand command) {
try {
@@ -175,7 +157,7 @@ public class ProvisioningCriteriaWritePlatformServiceJpaRepositoryImpl implement
throw new PlatformDataIntegrityException("error.msg.provisioning.product.id(s).already.associated.existing.criteria",
"The selected products already associated with another Provisioning Criteria");
}
LOG.error("Error occured.", dve);
log.error("Error occured.", dve);
throw new PlatformDataIntegrityException("error.msg.provisioning.unknown.data.integrity.issue",
"Unknown data integrity issue with resource: " + realCause.getMessage());
}
@@ -0,0 +1,94 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.fineract.organisation.provisioning.starter;
import org.apache.fineract.accounting.glaccount.domain.GLAccountRepository;
import org.apache.fineract.accounting.glaccount.service.GLAccountReadPlatformService;
import org.apache.fineract.accounting.provisioning.service.ProvisioningEntriesReadPlatformService;
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
import org.apache.fineract.organisation.provisioning.domain.ProvisioningCategoryRepository;
import org.apache.fineract.organisation.provisioning.domain.ProvisioningCriteriaRepository;
import org.apache.fineract.organisation.provisioning.serialization.ProvisioningCategoryDefinitionJsonDeserializer;
import org.apache.fineract.organisation.provisioning.serialization.ProvisioningCriteriaDefinitionJsonDeserializer;
import org.apache.fineract.organisation.provisioning.service.ProvisioningCategoryReadPlatformService;
import org.apache.fineract.organisation.provisioning.service.ProvisioningCategoryReadPlatformServiceImpl;
import org.apache.fineract.organisation.provisioning.service.ProvisioningCategoryWritePlatformService;
import org.apache.fineract.organisation.provisioning.service.ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl;
import org.apache.fineract.organisation.provisioning.service.ProvisioningCriteriaAssembler;
import org.apache.fineract.organisation.provisioning.service.ProvisioningCriteriaReadPlatformService;
import org.apache.fineract.organisation.provisioning.service.ProvisioningCriteriaReadPlatformServiceImpl;
import org.apache.fineract.organisation.provisioning.service.ProvisioningCriteriaWritePlatformService;
import org.apache.fineract.organisation.provisioning.service.ProvisioningCriteriaWritePlatformServiceJpaRepositoryImpl;
import org.apache.fineract.portfolio.loanproduct.domain.LoanProductRepository;
import org.apache.fineract.portfolio.loanproduct.service.LoanProductReadPlatformService;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
@Configuration
public class OrganisationProvisioningConfiguration {
@Bean
@ConditionalOnMissingBean(ProvisioningCategoryReadPlatformService.class)
public ProvisioningCategoryReadPlatformService provisioningCategoryReadPlatformService(JdbcTemplate jdbcTemplate) {
return new ProvisioningCategoryReadPlatformServiceImpl(jdbcTemplate);
}
@Bean
@ConditionalOnMissingBean(ProvisioningCategoryWritePlatformService.class)
public ProvisioningCategoryWritePlatformService provisioningCategoryWritePlatformService(
ProvisioningCategoryRepository provisioningCategoryRepository,
ProvisioningCategoryDefinitionJsonDeserializer fromApiJsonDeserializer, JdbcTemplate jdbcTemplate) {
return new ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl(provisioningCategoryRepository, fromApiJsonDeserializer,
jdbcTemplate);
}
@Bean
@ConditionalOnMissingBean(ProvisioningCriteriaAssembler.class)
public ProvisioningCriteriaAssembler provisioningCriteriaAssembler(FromJsonHelper fromApiJsonHelper,
ProvisioningCategoryRepository provisioningCategoryRepository, LoanProductRepository loanProductRepository,
GLAccountRepository glAccountRepository, PlatformSecurityContext platformSecurityContext) {
return new ProvisioningCriteriaAssembler(fromApiJsonHelper, provisioningCategoryRepository, loanProductRepository,
glAccountRepository, platformSecurityContext);
}
@Bean
@ConditionalOnMissingBean(ProvisioningCriteriaReadPlatformService.class)
public ProvisioningCriteriaReadPlatformService provisioningCriteriaReadPlatformService(JdbcTemplate jdbcTemplate,
ProvisioningCategoryReadPlatformService provisioningCategoryReadPlatformService,
LoanProductReadPlatformService loanProductReadPlatformService, GLAccountReadPlatformService glAccountReadPlatformService,
LoanProductReadPlatformService loanProductReaPlatformService) {
return new ProvisioningCriteriaReadPlatformServiceImpl(jdbcTemplate, provisioningCategoryReadPlatformService,
loanProductReadPlatformService, glAccountReadPlatformService, loanProductReaPlatformService);
}
@Bean
@ConditionalOnMissingBean(ProvisioningCriteriaWritePlatformService.class)
public ProvisioningCriteriaWritePlatformService provisioningCriteriaWritePlatformService(
ProvisioningCriteriaDefinitionJsonDeserializer fromApiJsonDeserializer,
ProvisioningCriteriaAssembler provisioningCriteriaAssembler, ProvisioningCriteriaRepository provisioningCriteriaRepository,
FromJsonHelper fromApiJsonHelper, GLAccountRepository glAccountRepository,
ProvisioningEntriesReadPlatformService provisioningEntriesReadPlatformService) {
return new ProvisioningCriteriaWritePlatformServiceJpaRepositoryImpl(fromApiJsonDeserializer, provisioningCriteriaAssembler,
provisioningCriteriaRepository, fromApiJsonHelper, glAccountRepository, provisioningEntriesReadPlatformService);
}
}