From 01e7dcf4cee80c6f9929c938a7663dc8b545688a Mon Sep 17 00:00:00 2001 From: "Sinha, Abhinav" Date: Mon, 23 Oct 2023 17:52:40 -0400 Subject: [PATCH] Add custom Configuration class for organisation/provisioning module (FINERACT-1932) --- ...ioningCategoryReadPlatformServiceImpl.java | 13 +-- ...WritePlatformServiceJpaRepositoryImpl.java | 23 ++--- .../ProvisioningCriteriaAssembler.java | 16 +--- ...ioningCriteriaReadPlatformServiceImpl.java | 18 +--- ...WritePlatformServiceJpaRepositoryImpl.java | 28 +----- ...OrganisationProvisioningConfiguration.java | 94 +++++++++++++++++++ 6 files changed, 112 insertions(+), 80 deletions(-) create mode 100644 fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/starter/OrganisationProvisioningConfiguration.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCategoryReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCategoryReadPlatformServiceImpl.java index 656bcb2f1..113d61099 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCategoryReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCategoryReadPlatformServiceImpl.java @@ -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 retrieveAllProvisionCategories() { diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl.java index f258a2cf4..6d089d297 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCategoryWritePlatformServiceJpaRepositoryImpl.java @@ -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()); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCriteriaAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCriteriaAssembler.java index 252b3475b..5706a2199 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCriteriaAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCriteriaAssembler.java @@ -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 parseLoanProducts(final JsonElement jsonElement) { List loanProducts = new ArrayList<>(); if (fromApiJsonHelper.parameterExists(ProvisioningCriteriaConstants.JSON_LOANPRODUCTS_PARAM, jsonElement)) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCriteriaReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCriteriaReadPlatformServiceImpl.java index 93c698972..1dde37c06 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCriteriaReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCriteriaReadPlatformServiceImpl.java @@ -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; diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCriteriaWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCriteriaWritePlatformServiceJpaRepositoryImpl.java index 1b0d0396c..4a0c60bab 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCriteriaWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/service/ProvisioningCriteriaWritePlatformServiceJpaRepositoryImpl.java @@ -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()); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/starter/OrganisationProvisioningConfiguration.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/starter/OrganisationProvisioningConfiguration.java new file mode 100644 index 000000000..aaa6de8a5 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/starter/OrganisationProvisioningConfiguration.java @@ -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); + } + +}