You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by ar...@apache.org on 2022/11/16 06:08:56 UTC

[fineract] branch develop updated: Fix possible null

This is an automated email from the ASF dual-hosted git repository.

arnold pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git


The following commit(s) were added to refs/heads/develop by this push:
     new 0155db70b Fix possible null
0155db70b is described below

commit 0155db70b7bff43fe23b6746e5f92506d3a0bf12
Author: b0c1 <ja...@finesolution.hu>
AuthorDate: Mon Nov 14 12:55:56 2022 +0100

    Fix possible null
---
 .../service/ReadWriteNonCoreDataServiceImpl.java        |  2 ++
 .../infrastructure/jobs/filter/LoanCOBApiFilter.java    | 17 +++--------------
 .../serialization/FloatingRateDataValidator.java        |  4 ++--
 .../service/LoanChargeWritePlatformServiceImpl.java     |  7 ++++---
 .../service/ReadWriteNonCoreDataServiceImplTest.java    | 17 +++++++++++++++++
 5 files changed, 28 insertions(+), 19 deletions(-)

diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java
index 97cf62aea..e1e295ab4 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImpl.java
@@ -221,6 +221,8 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ
             rowSet = callFilteredPgSql(sql, valueFilter, filterColumnType);
         } else if (databaseTypeResolver.isMySQL()) {
             rowSet = callFilteredMysql(sql, valueFilter, filterColumnType);
+        } else {
+            throw new IllegalStateException("Database type is not supported");
         }
 
         String[] resultColumnNames = resultColumns.split(",");
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/filter/LoanCOBApiFilter.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/filter/LoanCOBApiFilter.java
index 74ff37f40..6ca5ac501 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/filter/LoanCOBApiFilter.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/filter/LoanCOBApiFilter.java
@@ -133,17 +133,9 @@ public class LoanCOBApiFilter extends OncePerRequestFilter {
 
     private Long getLoanId(boolean isGlim, Supplier<Stream<String>> streamSupplier) {
         if (!isGlim) {
-            if (streamSupplier.get().count() >= LOAN_ID_INDEX_IN_URL + 1) {
-                return Long.valueOf(streamSupplier.get().skip(LOAN_ID_INDEX_IN_URL).findFirst().get());
-            } else {
-                return null;
-            }
+            return streamSupplier.get().skip(LOAN_ID_INDEX_IN_URL).findFirst().map(Long::valueOf).orElse(null);
         } else {
-            if (streamSupplier.get().count() >= GLIM_ID_INDEX_IN_URL + 1) {
-                return Long.valueOf(streamSupplier.get().skip(GLIM_ID_INDEX_IN_URL).findFirst().get());
-            } else {
-                return null;
-            }
+            return streamSupplier.get().skip(GLIM_ID_INDEX_IN_URL).findFirst().map(Long::valueOf).orElse(null);
         }
     }
 
@@ -155,9 +147,6 @@ public class LoanCOBApiFilter extends OncePerRequestFilter {
     }
 
     private boolean isGlim(Supplier<Stream<String>> streamSupplier) {
-        if (streamSupplier.get().count() >= GLIM_STRING_INDEX_IN_URL + 1) {
-            return "glimAccount".equals(streamSupplier.get().skip(GLIM_STRING_INDEX_IN_URL).findFirst().get());
-        }
-        return false;
+        return streamSupplier.get().skip(GLIM_STRING_INDEX_IN_URL).findFirst().map(s -> s.equals("glimAccount")).orElse(false);
     }
 }
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/serialization/FloatingRateDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/serialization/FloatingRateDataValidator.java
index 550f5365a..84a6915b9 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/serialization/FloatingRateDataValidator.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/serialization/FloatingRateDataValidator.java
@@ -198,7 +198,7 @@ public class FloatingRateDataValidator {
             baseDataValidator.reset().parameter(IS_BASE_LENDING_RATE).value(isBaseLendingRate).notNull();
             if (isBaseLendingRate == null) {
                 baseDataValidator.reset().parameter(IS_BASE_LENDING_RATE).trueOrFalseRequired(false);
-            } else if (isBaseLendingRate && baseLendingRate != null && !baseLendingRate.getId().equals(floatingRateForUpdate.getId())) {
+            } else if (isBaseLendingRate && baseLendingRate != null && !baseLendingRate.getId().equals(floatingRateForUpdate.getId())) { // NOSONAR
                 baseDataValidator.reset().parameter(IS_BASE_LENDING_RATE).value(isBaseLendingRate).failWithCode("baselendingrate.duplicate",
                         "Base Lending Rate already exists");
             }
@@ -220,7 +220,7 @@ public class FloatingRateDataValidator {
             isActive = floatingRateForUpdate.isActive();
         }
 
-        if (baseLendingRate != null && baseLendingRate.getId().equals(floatingRateForUpdate.getId()) && (!isBaseLendingRate || !isActive)) {
+        if (baseLendingRate != null && baseLendingRate.getId().equals(floatingRateForUpdate.getId()) && (!isBaseLendingRate || !isActive)) { // NOSONAR
             isBLRModifiedAsNonBLR = true;
         }
 
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImpl.java
index a99e8750a..d1fb1d42b 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeWritePlatformServiceImpl.java
@@ -294,8 +294,9 @@ public class LoanChargeWritePlatformServiceImpl implements LoanChargeWritePlatfo
                 break;
             }
         }
-
-        businessEventNotifierService.notifyPostBusinessEvent(new LoanBalanceChangedBusinessEvent(newChargeRefundTxn.getLoan()));
+        if (newChargeRefundTxn != null) {
+            businessEventNotifierService.notifyPostBusinessEvent(new LoanBalanceChangedBusinessEvent(newChargeRefundTxn.getLoan()));
+        }
         businessEventNotifierService.notifyPostBusinessEvent(new LoanChargeRefundBusinessEvent(newChargeRefundTxn));
         return result;
     }
@@ -1075,7 +1076,7 @@ public class LoanChargeWritePlatformServiceImpl implements LoanChargeWritePlatfo
         BigDecimal chargeAmountPaid;
         BigDecimal chargeAmountRefunded = BigDecimal.ZERO;
         MonetaryCurrency loanCurrency = loanCharge.getLoan().getCurrency();
-        if (loanCharge.isInstalmentFee()) {
+        if (loanCharge.isInstalmentFee() && installmentChargeEntry != null) {
             final Integer installmentNumber = installmentChargeEntry.getRepaymentInstallment().getInstallmentNumber();
             chargeAmountPaid = installmentChargeEntry.getAmountPaid(loanCurrency).getAmount();
             for (LoanChargePaidBy loanChargePaidBy : loanCharge.getLoanChargePaidBySet()) {
diff --git a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImplTest.java b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImplTest.java
index caa3ab3b4..34d88cd35 100644
--- a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImplTest.java
+++ b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/dataqueries/service/ReadWriteNonCoreDataServiceImplTest.java
@@ -99,4 +99,21 @@ public class ReadWriteNonCoreDataServiceImplTest {
         when(genericDataService.fillResultsetColumnHeaders("table")).thenReturn(Collections.emptyList());
         assertThrows(PlatformApiDataValidationException.class, () -> underTest.queryDataTable("table", "cf1", "vf1", "rc1,rc2"));
     }
+
+    @Test
+    public void testInvalidDatabase() {
+        SqlRowSet sqlRS = Mockito.mock(SqlRowSet.class);
+        when(jdbcTemplate.queryForRowSet(eq("select rc1,rc2 from table where cf1 = ?"), any(Object[].class), any(int[].class)))
+                .thenReturn(sqlRS);
+        when(sqlRS.next()).thenReturn(true).thenReturn(false);
+        when(sqlRS.getObject(ArgumentMatchers.anyString())).thenReturn("value1").thenReturn("value2");
+        when(databaseTypeResolver.isPostgreSQL()).thenReturn(false);
+        when(databaseTypeResolver.isMySQL()).thenReturn(false);
+        ResultsetColumnHeaderData cf1 = ResultsetColumnHeaderData.detailed("cf1", "text", 10L, false, false, null, null);
+        ResultsetColumnHeaderData rc1 = ResultsetColumnHeaderData.detailed("rc1", "text", 10L, false, false, null, null);
+        ResultsetColumnHeaderData rc2 = ResultsetColumnHeaderData.detailed("rc2", "text", 10L, false, false, null, null);
+        when(genericDataService.fillResultsetColumnHeaders("table")).thenReturn(List.of(cf1, rc1, rc2));
+
+        assertThrows(IllegalStateException.class, () -> underTest.queryDataTable("table", "cf1", "vf1", "rc1,rc2"));
+    }
 }