From 6ff1966562920eeb3343c653893b783b39911892 Mon Sep 17 00:00:00 2001 From: "Sinha, Abhinav" Date: Tue, 29 Aug 2023 20:47:15 -0400 Subject: [PATCH] Add custom Configuration class for collateral module (FINERACT-1932) --- .../service/CollateralAssembler.java | 13 +--- .../CollateralReadPlatformServiceImpl.java | 15 +---- ...WritePlatformServiceJpaRepositoryImpl.java | 25 ++------ .../starter/CollateralConfiguration.java | 64 +++++++++++++++++++ 4 files changed, 74 insertions(+), 43 deletions(-) create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/starter/CollateralConfiguration.java diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/service/CollateralAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/service/CollateralAssembler.java index f4243097f..aecade837 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/service/CollateralAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/service/CollateralAssembler.java @@ -25,30 +25,21 @@ import java.math.BigDecimal; import java.util.HashSet; import java.util.Locale; import java.util.Set; +import lombok.RequiredArgsConstructor; import org.apache.fineract.infrastructure.codes.domain.CodeValue; import org.apache.fineract.infrastructure.codes.domain.CodeValueRepositoryWrapper; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.portfolio.collateral.domain.LoanCollateral; import org.apache.fineract.portfolio.collateral.domain.LoanCollateralRepository; import org.apache.fineract.portfolio.collateral.exception.CollateralNotFoundException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -@Service +@RequiredArgsConstructor public class CollateralAssembler { private final FromJsonHelper fromApiJsonHelper; private final CodeValueRepositoryWrapper codeValueRepository; private final LoanCollateralRepository loanCollateralRepository; - @Autowired - public CollateralAssembler(final FromJsonHelper fromApiJsonHelper, final CodeValueRepositoryWrapper codeValueRepository, - final LoanCollateralRepository loanCollateralRepository) { - this.fromApiJsonHelper = fromApiJsonHelper; - this.codeValueRepository = codeValueRepository; - this.loanCollateralRepository = loanCollateralRepository; - } - public Set fromParsedJson(final JsonElement element) { final Set collateralItems = new HashSet<>(); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/service/CollateralReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/service/CollateralReadPlatformServiceImpl.java index dc1a879ad..8a8a6e10a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/service/CollateralReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/service/CollateralReadPlatformServiceImpl.java @@ -22,6 +22,7 @@ import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; +import lombok.RequiredArgsConstructor; import org.apache.fineract.infrastructure.codes.data.CodeValueData; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; @@ -29,27 +30,17 @@ import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.portfolio.collateral.data.CollateralData; import org.apache.fineract.portfolio.collateral.exception.CollateralNotFoundException; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepositoryWrapper; -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 CollateralReadPlatformServiceImpl implements CollateralReadPlatformService { - private final JdbcTemplate jdbcTemplate; private final PlatformSecurityContext context; + private final JdbcTemplate jdbcTemplate; private final LoanRepositoryWrapper loanRepositoryWrapper; - @Autowired - public CollateralReadPlatformServiceImpl(final PlatformSecurityContext context, final JdbcTemplate jdbcTemplate, - final LoanRepositoryWrapper loanRepositoryWrapper) { - this.context = context; - this.jdbcTemplate = jdbcTemplate; - this.loanRepositoryWrapper = loanRepositoryWrapper; - } - private static final class CollateralMapper implements RowMapper { private final StringBuilder sqlBuilder = new StringBuilder( diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/service/CollateralWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/service/CollateralWritePlatformServiceJpaRepositoryImpl.java index 92b52da9e..a25853699 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/service/CollateralWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/service/CollateralWritePlatformServiceJpaRepositoryImpl.java @@ -19,6 +19,8 @@ package org.apache.fineract.portfolio.collateral.service; import java.util.Map; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.fineract.infrastructure.codes.domain.CodeValue; import org.apache.fineract.infrastructure.codes.domain.CodeValueRepositoryWrapper; import org.apache.fineract.infrastructure.core.api.JsonCommand; @@ -41,38 +43,21 @@ import org.apache.fineract.portfolio.collateral.exception.CollateralNotFoundExce import org.apache.fineract.portfolio.collateral.serialization.CollateralCommandFromApiJsonDeserializer; import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepositoryWrapper; -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.orm.jpa.JpaSystemException; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -@Service +@Slf4j +@RequiredArgsConstructor public class CollateralWritePlatformServiceJpaRepositoryImpl implements CollateralWritePlatformService { - private static final Logger LOG = LoggerFactory.getLogger(CollateralWritePlatformServiceJpaRepositoryImpl.class); - private final PlatformSecurityContext context; private final LoanRepositoryWrapper loanRepositoryWrapper; private final LoanCollateralRepository collateralRepository; private final CodeValueRepositoryWrapper codeValueRepository; private final CollateralCommandFromApiJsonDeserializer collateralCommandFromApiJsonDeserializer; - @Autowired - public CollateralWritePlatformServiceJpaRepositoryImpl(final PlatformSecurityContext context, - final LoanRepositoryWrapper loanRepositoryWrapper, final LoanCollateralRepository collateralRepository, - final CodeValueRepositoryWrapper codeValueRepository, - final CollateralCommandFromApiJsonDeserializer collateralCommandFromApiJsonDeserializer) { - this.context = context; - this.loanRepositoryWrapper = loanRepositoryWrapper; - this.collateralRepository = collateralRepository; - this.codeValueRepository = codeValueRepository; - this.collateralCommandFromApiJsonDeserializer = collateralCommandFromApiJsonDeserializer; - } - @Transactional @Override public CommandProcessingResult addCollateral(final Long loanId, final JsonCommand command) { @@ -179,7 +164,7 @@ public class CollateralWritePlatformServiceJpaRepositoryImpl implements Collater } private void handleCollateralDataIntegrityViolation(final NonTransientDataAccessException dve) { - LOG.error("Error occured.", dve); + log.error("Error occured.", dve); throw new PlatformDataIntegrityException("error.msg.collateral.unknown.data.integrity.issue", "Unknown data integrity issue with resource."); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/starter/CollateralConfiguration.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/starter/CollateralConfiguration.java new file mode 100644 index 000000000..c52d8e2b1 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/collateral/starter/CollateralConfiguration.java @@ -0,0 +1,64 @@ +/** + * 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.portfolio.collateral.starter; + +import org.apache.fineract.infrastructure.codes.domain.CodeValueRepositoryWrapper; +import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; +import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; +import org.apache.fineract.portfolio.collateral.domain.LoanCollateralRepository; +import org.apache.fineract.portfolio.collateral.serialization.CollateralCommandFromApiJsonDeserializer; +import org.apache.fineract.portfolio.collateral.service.CollateralAssembler; +import org.apache.fineract.portfolio.collateral.service.CollateralReadPlatformService; +import org.apache.fineract.portfolio.collateral.service.CollateralReadPlatformServiceImpl; +import org.apache.fineract.portfolio.collateral.service.CollateralWritePlatformService; +import org.apache.fineract.portfolio.collateral.service.CollateralWritePlatformServiceJpaRepositoryImpl; +import org.apache.fineract.portfolio.loanaccount.domain.LoanRepositoryWrapper; +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 CollateralConfiguration { + + @Bean + @ConditionalOnMissingBean(CollateralAssembler.class) + public CollateralAssembler collateralAssembler(FromJsonHelper fromApiJsonHelper, CodeValueRepositoryWrapper codeValueRepository, + LoanCollateralRepository loanCollateralRepository) { + return new CollateralAssembler(fromApiJsonHelper, codeValueRepository, loanCollateralRepository); + } + + @Bean + @ConditionalOnMissingBean(CollateralReadPlatformService.class) + public CollateralReadPlatformService collateralReadPlatformService(PlatformSecurityContext context, JdbcTemplate jdbcTemplate, + LoanRepositoryWrapper loanRepositoryWrapper) { + return new CollateralReadPlatformServiceImpl(context, jdbcTemplate, loanRepositoryWrapper); + } + + @Bean + @ConditionalOnMissingBean(CollateralWritePlatformService.class) + public CollateralWritePlatformService collateralWritePlatformService(PlatformSecurityContext context, + LoanRepositoryWrapper loanRepositoryWrapper, LoanCollateralRepository collateralRepository, + CodeValueRepositoryWrapper codeValueRepository, + CollateralCommandFromApiJsonDeserializer collateralCommandFromApiJsonDeserializer) { + return new CollateralWritePlatformServiceJpaRepositoryImpl(context, loanRepositoryWrapper, collateralRepository, + codeValueRepository, collateralCommandFromApiJsonDeserializer); + } + +}