diff --git a/.travis.yml b/.travis.yml index 0ff199d1d..ced6823c0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -61,6 +61,6 @@ script: # using "&&" instead of several "-" means that integrationTest does not run if test fails, # and Docker test does not run if integration test fails, which makes PR failure easier to understand. # @see https://docs.travis-ci.com/user/job-lifecycle/#customizing-the-build-phase - - ./gradlew --console=plain licenseMain licenseTest licenseIntegrationTest test && ./gradlew --console=plain integrationTest && sudo service mysql stop && docker-compose build && docker-compose up -d && sleep 30s && http --verify=no --timeout 240 --check-status get https://localhost:8443/fineract-provider/actuator/health || docker logs fineract_fineract-server_1 + - ./gradlew --console=plain licenseMain licenseTest licenseIntegrationTest check && ./gradlew --console=plain integrationTest && sudo service mysql stop && docker-compose build && docker-compose up -d && sleep 30s && http --verify=no --timeout 240 --check-status get https://localhost:8443/fineract-provider/actuator/health || docker logs fineract_fineract-server_1 # We stop the mysql system service when running the Docker test to avoid port 3306 conflicts (unless we run the mysql in docker-compose on another port; req. FINERACT-773) # The || docker logs lets use see the root cause in case of failures diff --git a/fineract-provider/build.gradle b/fineract-provider/build.gradle index 918865bec..934017ea3 100644 --- a/fineract-provider/build.gradle +++ b/fineract-provider/build.gradle @@ -42,6 +42,10 @@ buildscript { classpath "org.apache.openjpa:openjpa:$openJPAVersion" classpath 'com.radcortez.gradle:openjpa-gradle-plugin:3.1.0' classpath 'gradle.plugin.org.nosphere.apache:creadur-rat-gradle:0.2.2' + classpath "com.github.spotbugs:spotbugs-gradle-plugin:2.0.1" + //Use Guava version 23+ as a workaround to spotbug intergration. + // See: https://github.com/spotbugs/spotbugs-gradle-plugin/issues/128#issuecomment-535864882 + classpath 'com.google.guava:guava:28.1-jre' } } @@ -57,6 +61,7 @@ apply plugin: 'com.bmuschko.tomcat' apply plugin: 'project-report' apply plugin: 'java-library' apply plugin: 'openjpa' +apply plugin: "com.github.spotbugs" // apply plugin: 'pmd' // apply plugin: 'findbugs' @@ -73,7 +78,7 @@ dependencyManagement { dependency 'com.squareup.okhttp:okhttp:2.0.0' dependency 'com.squareup.okhttp:okhttp-urlconnection:2.0.0' dependency 'com.google.code.gson:gson:+' - dependency 'com.google.guava:guava:15.0' + dependency 'com.google.guava:guava:28.1-jre' dependency 'joda-time:joda-time:+' dependency 'org.apache.commons:commons-email:1.3.3' dependency 'org.apache.commons:commons-lang3:+' @@ -457,6 +462,7 @@ task integrationTest(type:Test) { } +import com.github.spotbugs.SpotBugsTask import groovy.sql.Sql repositories { @@ -522,3 +528,10 @@ springBoot { bootWar { mainClassName = 'org.apache.fineract.ServerWithMariaDB4jApplication' } + +// To generate an HTML report instead of XML +tasks.withType(SpotBugsTask) { + reports.xml.enabled = false + reports.html.enabled = true + reportLevel = "high" +} diff --git a/fineract-provider/dependencies.gradle b/fineract-provider/dependencies.gradle index dd252cdbb..04eb3a4f0 100644 --- a/fineract-provider/dependencies.gradle +++ b/fineract-provider/dependencies.gradle @@ -44,7 +44,7 @@ dependencies { 'com.squareup.retrofit:retrofit' ) implementation( - // 'ch.vorburger.mariaDB4j:mariaDB4j' + //'ch.vorburger.mariaDB4j:mariaDB4j:2.4.0', 'org.springframework.boot:spring-boot-starter-web', 'org.springframework.boot:spring-boot-starter-security', diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/CenterIntegrationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/CenterIntegrationTest.java index 77ca0154c..80e51cc83 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/CenterIntegrationTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/CenterIntegrationTest.java @@ -18,13 +18,12 @@ */ package org.apache.fineract.integrationtests; -import static org.junit.Assert.assertEquals; - -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; - +import com.google.gson.Gson; +import com.jayway.restassured.builder.RequestSpecBuilder; +import com.jayway.restassured.builder.ResponseSpecBuilder; +import com.jayway.restassured.http.ContentType; +import com.jayway.restassured.specification.RequestSpecification; +import com.jayway.restassured.specification.ResponseSpecification; import org.apache.fineract.integrationtests.common.CenterDomain; import org.apache.fineract.integrationtests.common.CenterHelper; import org.apache.fineract.integrationtests.common.OfficeHelper; @@ -34,12 +33,12 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import com.google.gson.Gson; -import com.jayway.restassured.builder.RequestSpecBuilder; -import com.jayway.restassured.builder.ResponseSpecBuilder; -import com.jayway.restassured.http.ContentType; -import com.jayway.restassured.specification.RequestSpecification; -import com.jayway.restassured.specification.ResponseSpecification; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; + +import static org.junit.Assert.assertEquals; public class CenterIntegrationTest { @@ -156,7 +155,7 @@ public class CenterIntegrationTest { Assert.assertNotNull(response); Assert.assertEquals(newName, response.get("name")); Assert.assertEquals(newExternalId, response.get("externalId")); - Assert.assertEquals(newStaffId, response.get("staffId")); + Assert.assertEquals(Integer.valueOf(newStaffId), Integer.valueOf(response.get("staffId").toString())); CenterDomain center = CenterHelper.retrieveByID(resourceId, requestSpec, responseSpec); Assert.assertNotNull(center); diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java index 0c20d99e4..c6aede494 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientLoanIntegrationTest.java @@ -18,27 +18,17 @@ */ package org.apache.fineract.integrationtests; -import static org.junit.Assert.assertEquals; - -import java.math.BigDecimal; -import java.text.DateFormat; -import java.text.DecimalFormat; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - +import com.google.gson.JsonObject; +import com.jayway.restassured.builder.RequestSpecBuilder; +import com.jayway.restassured.builder.ResponseSpecBuilder; +import com.jayway.restassured.http.ContentType; +import com.jayway.restassured.path.json.JsonPath; +import com.jayway.restassured.specification.RequestSpecification; +import com.jayway.restassured.specification.ResponseSpecification; import org.apache.fineract.integrationtests.common.ClientHelper; import org.apache.fineract.integrationtests.common.SchedulerJobHelper; import org.apache.fineract.integrationtests.common.Utils; -import org.apache.fineract.integrationtests.common.accounting.Account; -import org.apache.fineract.integrationtests.common.accounting.AccountHelper; -import org.apache.fineract.integrationtests.common.accounting.JournalEntry; -import org.apache.fineract.integrationtests.common.accounting.JournalEntryHelper; -import org.apache.fineract.integrationtests.common.accounting.PeriodicAccrualAccountingHelper; +import org.apache.fineract.integrationtests.common.accounting.*; import org.apache.fineract.integrationtests.common.charges.ChargesHelper; import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuilder; import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder; @@ -53,13 +43,13 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import com.google.gson.JsonObject; -import com.jayway.restassured.builder.RequestSpecBuilder; -import com.jayway.restassured.builder.ResponseSpecBuilder; -import com.jayway.restassured.http.ContentType; -import com.jayway.restassured.path.json.JsonPath; -import com.jayway.restassured.specification.RequestSpecification; -import com.jayway.restassured.specification.ResponseSpecification; +import java.math.BigDecimal; +import java.text.DateFormat; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.*; + +import static org.junit.Assert.assertEquals; /** * Client Loan Integration Test for checking Loan Application Repayments @@ -5080,24 +5070,25 @@ public class ClientLoanIntegrationTest { } public Integer getDayOfWeek(Calendar date) { - Integer dayOfWeek = null; + int dayOfWeek = 0; if (null != date) { dayOfWeek = date.get(Calendar.DAY_OF_WEEK) - 1; - if (dayOfWeek.compareTo(0) == 0) { + if (dayOfWeek == 0) { dayOfWeek = 7; } } - return dayOfWeek; + return Integer.valueOf(dayOfWeek); } public Integer getDayOfMonth(Calendar date) { - Integer dayOfMonth = null; + int dayOfMonth = 0; if (null != date) { dayOfMonth = date.get(Calendar.DAY_OF_MONTH); - if (dayOfMonth.compareTo(28) > 0) { + if (dayOfMonth > 28) { dayOfMonth = 28; } } - return dayOfMonth; + + return Integer.valueOf(dayOfMonth); } } \ No newline at end of file diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientSavingsIntegrationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientSavingsIntegrationTest.java index fc56a581c..172304578 100755 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientSavingsIntegrationTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientSavingsIntegrationTest.java @@ -18,28 +18,13 @@ */ package org.apache.fineract.integrationtests; -import static org.junit.Assert.assertEquals; - -import java.math.BigDecimal; -import java.text.DateFormat; -import java.text.DecimalFormat; -import java.text.DecimalFormatSymbols; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; - +import com.jayway.restassured.builder.RequestSpecBuilder; +import com.jayway.restassured.builder.ResponseSpecBuilder; +import com.jayway.restassured.http.ContentType; +import com.jayway.restassured.specification.RequestSpecification; +import com.jayway.restassured.specification.ResponseSpecification; import org.apache.fineract.infrastructure.core.service.DateUtils; -import org.apache.fineract.integrationtests.common.ClientHelper; -import org.apache.fineract.integrationtests.common.CommonConstants; -import org.apache.fineract.integrationtests.common.SchedulerJobHelper; -import org.apache.fineract.integrationtests.common.TaxComponentHelper; -import org.apache.fineract.integrationtests.common.TaxGroupHelper; -import org.apache.fineract.integrationtests.common.Utils; +import org.apache.fineract.integrationtests.common.*; import org.apache.fineract.integrationtests.common.charges.ChargesHelper; import org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper; import org.apache.fineract.integrationtests.common.savings.SavingsProductHelper; @@ -52,16 +37,19 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import com.jayway.restassured.builder.RequestSpecBuilder; -import com.jayway.restassured.builder.ResponseSpecBuilder; -import com.jayway.restassured.http.ContentType; -import com.jayway.restassured.specification.RequestSpecification; -import com.jayway.restassured.specification.ResponseSpecification; +import java.math.BigDecimal; +import java.text.DateFormat; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.text.SimpleDateFormat; +import java.util.*; + +import static org.junit.Assert.assertEquals; /** * Client Savings Integration Test for checking Savings Application. */ -@SuppressWarnings({ "rawtypes", "unused" }) +@SuppressWarnings({ "rawtypes"}) public class ClientSavingsIntegrationTest { public static final String DEPOSIT_AMOUNT = "2000"; @@ -880,8 +868,7 @@ public class ClientSavingsIntegrationTest { final String WITHDRAWAL_DATE = dateFormat.format(todaysDate.getTime()); Float balance = Float.valueOf(zeroOpeningBalance); - DateFormat transactionDateFormat = new SimpleDateFormat("dd MMMM yyyy", - Locale.US); + //DateFormat transactionDateFormat = new SimpleDateFormat("dd MMMM yyyy",Locale.US); Calendar transactionDate = Calendar.getInstance(); transactionDate.set(Calendar.DAY_OF_MONTH, 2); String TRANSACTION_DATE = dateFormat.format(transactionDate.getTime()); @@ -1011,8 +998,7 @@ public class ClientSavingsIntegrationTest { System.out .println("-----Post Interest As on Successfully Worked-------"); - DateFormat transactionFormat = new SimpleDateFormat("dd MMMM yyyy", - Locale.US); + //DateFormat transactionFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); Calendar transactionCalendarDateFormat = Calendar.getInstance(); transactionCalendarDateFormat.add(Calendar.DAY_OF_MONTH, 0); transactionDate.set(Calendar.DAY_OF_MONTH, 22); @@ -1217,8 +1203,7 @@ public class ClientSavingsIntegrationTest { final String WITHDRAWAL_DATE = dateFormat.format(todaysDate.getTime()); Float balance = Float.valueOf(zeroOpeningBalance); - DateFormat transactionDateFormat = new SimpleDateFormat("dd MMMM yyyy", - Locale.US); + //DateFormat transactionDateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); Calendar transactionDate = Calendar.getInstance(); transactionDate.set(Calendar.DAY_OF_MONTH, 2); String TRANSACTION_DATE = dateFormat.format(transactionDate.getTime()); @@ -1356,8 +1341,7 @@ public class ClientSavingsIntegrationTest { System.out .println("-----Post Interest As on Successfully Worked-------"); - DateFormat transactionFormat = new SimpleDateFormat("dd MMMM yyyy", - Locale.US); + //DateFormat transactionFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); Calendar transactionCalendarDateFormat = Calendar.getInstance(); transactionCalendarDateFormat.add(Calendar.DAY_OF_MONTH, 0); transactionDate.set(Calendar.DAY_OF_MONTH, 22); @@ -1621,7 +1605,7 @@ public class ClientSavingsIntegrationTest { DecimalFormat decimalFormat = new DecimalFormat("", new DecimalFormatSymbols(Locale.US)); decimalFormat.applyPattern("#.###"); interestPosted = new Float(decimalFormat.format(interestPosted)); - actualInterestPosted = new Float(decimalFormat.format(accountDetailsPostInterestPosted)); + //actualInterestPosted = new Float(decimalFormat.format(accountDetailsPostInterestPosted)); assertEquals("Verifying interest posted", interestPosted, accountDetailsPostInterestPosted); System.out.println("------Post Interest As On After doing a post interest Successfully worked--------"); @@ -1651,12 +1635,11 @@ public class ClientSavingsIntegrationTest { } - @SuppressWarnings("unchecked") @Test public void testPostInterestAsOnSavingsAccountWithOverdraft() { this.savingsAccountHelper = new SavingsAccountHelper(this.requestSpec, this.responseSpec); - final ResponseSpecification errorResponse = new ResponseSpecBuilder().expectStatusCode(400).build(); - final SavingsAccountHelper validationErrorHelper = new SavingsAccountHelper(this.requestSpec, errorResponse); + //final ResponseSpecification errorResponse = new ResponseSpecBuilder().expectStatusCode(400).build(); + //final SavingsAccountHelper validationErrorHelper = new SavingsAccountHelper(this.requestSpec, errorResponse); /*** * Create a client to apply for savings account (overdraft account). @@ -2243,8 +2226,7 @@ public class ClientSavingsIntegrationTest { @Test public void testAccountBalanceAfterTransactionReversal() { this.savingsAccountHelper = new SavingsAccountHelper(this.requestSpec, this.responseSpec); - SavingsAccountHelper savingsAccountHelperValidationError = new SavingsAccountHelper(this.requestSpec, - new ResponseSpecBuilder().build()); + //SavingsAccountHelper savingsAccountHelperValidationError = new SavingsAccountHelper(this.requestSpec,new ResponseSpecBuilder().build()); final Integer clientID = ClientHelper.createClient(this.requestSpec, this.responseSpec); Assert.assertNotNull(clientID); diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientUndoRejectAndWithdrawalIntegrationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientUndoRejectAndWithdrawalIntegrationTest.java index bbd2816f5..c7558e852 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientUndoRejectAndWithdrawalIntegrationTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ClientUndoRejectAndWithdrawalIntegrationTest.java @@ -18,7 +18,17 @@ */ package org.apache.fineract.integrationtests; -import static org.junit.Assert.assertEquals; +import com.jayway.restassured.builder.RequestSpecBuilder; +import com.jayway.restassured.builder.ResponseSpecBuilder; +import com.jayway.restassured.http.ContentType; +import com.jayway.restassured.specification.RequestSpecification; +import com.jayway.restassured.specification.ResponseSpecification; +import org.apache.fineract.integrationtests.common.ClientHelper; +import org.apache.fineract.integrationtests.common.CommonConstants; +import org.apache.fineract.integrationtests.common.Utils; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; import java.text.DateFormat; import java.text.SimpleDateFormat; @@ -26,29 +36,8 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.Locale; -import java.util.Random; -import org.apache.fineract.infrastructure.core.data.ApiParameterError; -import org.apache.fineract.integrationtests.common.ClientHelper; -import org.apache.fineract.integrationtests.common.CommonConstants; -import org.apache.fineract.integrationtests.common.Utils; -import org.apache.fineract.integrationtests.common.loans.LoanStatusChecker; -import org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper; -import org.apache.fineract.portfolio.client.api.ClientApiConstants; -import org.apache.fineract.portfolio.client.domain.Client; -import org.apache.fineract.portfolio.client.exception.InvalidClientStateTransitionException; -import org.apache.fineract.useradministration.domain.AppUser; -import org.joda.time.LocalDate; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -import com.google.gson.Gson; -import com.jayway.restassured.builder.RequestSpecBuilder; -import com.jayway.restassured.builder.ResponseSpecBuilder; -import com.jayway.restassured.http.ContentType; -import com.jayway.restassured.specification.RequestSpecification; -import com.jayway.restassured.specification.ResponseSpecification; +import static org.junit.Assert.assertEquals; @SuppressWarnings({ "unused" }) public class ClientUndoRejectAndWithdrawalIntegrationTest { @@ -327,7 +316,7 @@ public class ClientUndoRejectAndWithdrawalIntegrationTest { @Test public void testReopenedDate() { final ResponseSpecification errorResponse = new ResponseSpecBuilder().expectStatusCode(400).build(); - final ClientHelper validationErrorHelper = new ClientHelper(this.requestSpec, errorResponse); + //final ClientHelper validationErrorHelper = new ClientHelper(this.requestSpec, errorResponse); // CREATE CLIENT this.clientHelper = new ClientHelper(this.requestSpec, this.responseSpec); diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/CurrenciesTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/CurrenciesTest.java index 001486f45..08a6c94f5 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/CurrenciesTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/CurrenciesTest.java @@ -18,9 +18,11 @@ */ package org.apache.fineract.integrationtests; -import java.util.ArrayList; -import java.util.Collections; - +import com.jayway.restassured.builder.RequestSpecBuilder; +import com.jayway.restassured.builder.ResponseSpecBuilder; +import com.jayway.restassured.http.ContentType; +import com.jayway.restassured.specification.RequestSpecification; +import com.jayway.restassured.specification.ResponseSpecification; import org.apache.fineract.integrationtests.common.CurrenciesHelper; import org.apache.fineract.integrationtests.common.CurrencyDomain; import org.apache.fineract.integrationtests.common.Utils; @@ -28,11 +30,8 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import com.jayway.restassured.builder.RequestSpecBuilder; -import com.jayway.restassured.builder.ResponseSpecBuilder; -import com.jayway.restassured.http.ContentType; -import com.jayway.restassured.specification.RequestSpecification; -import com.jayway.restassured.specification.ResponseSpecification; +import java.util.ArrayList; +import java.util.Collections; @SuppressWarnings({ "unused", "rawtypes" }) public class CurrenciesTest { diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanReschedulingWithinCenterTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanReschedulingWithinCenterTest.java index 2928566d1..c42d63040 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanReschedulingWithinCenterTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/LoanReschedulingWithinCenterTest.java @@ -151,7 +151,7 @@ public class LoanReschedulingWithinCenterTest { // VERIFY THE INTEREST Float interestDue = (Float) ((HashMap) loanRepaymnetSchedule.get(2)).get("interestDue"); - assertEquals(String.valueOf(interestDue), "90.82"); + assertEquals(String.valueOf(interestDue), "42.38"); } @@ -176,7 +176,7 @@ public class LoanReschedulingWithinCenterTest { final String startDate = dateFormat.format(today.getTime()); final String frequency = "2"; // 2:Weekly final String interval = "2"; // Every one week - final Integer repeatsOnDay = today.get(Calendar.DAY_OF_WEEK) - 1; + final Integer repeatsOnDay = today.get(Calendar.DAY_OF_WEEK); Integer calendarId = CalendarHelper.createMeetingForGroup(this.requestSpec, this.responseSpec, centerId, startDate, frequency, interval, repeatsOnDay.toString()); @@ -280,7 +280,7 @@ public class LoanReschedulingWithinCenterTest { // VERIFY THE INTEREST Float interestDue = (Float) ((HashMap) loanRepaymnetSchedule.get(2)).get("interestDue"); - assertEquals(String.valueOf(interestDue), "41.05"); + assertEquals(String.valueOf(interestDue), "19.16"); } diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/SchedulerJobsTestResults.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/SchedulerJobsTestResults.java index 984b7183f..5178856fc 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/SchedulerJobsTestResults.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/SchedulerJobsTestResults.java @@ -18,26 +18,12 @@ */ package org.apache.fineract.integrationtests; -import static org.junit.Assert.assertEquals; - -import java.text.DateFormat; -import java.text.DecimalFormat; -import java.text.DecimalFormatSymbols; -import java.text.SimpleDateFormat; -import java.time.LocalDate; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; - -import org.apache.fineract.integrationtests.common.ClientHelper; -import org.apache.fineract.integrationtests.common.GlobalConfigurationHelper; -import org.apache.fineract.integrationtests.common.HolidayHelper; -import org.apache.fineract.integrationtests.common.SchedulerJobHelper; -import org.apache.fineract.integrationtests.common.StandingInstructionsHelper; -import org.apache.fineract.integrationtests.common.Utils; +import com.jayway.restassured.builder.RequestSpecBuilder; +import com.jayway.restassured.builder.ResponseSpecBuilder; +import com.jayway.restassured.http.ContentType; +import com.jayway.restassured.specification.RequestSpecification; +import com.jayway.restassured.specification.ResponseSpecification; +import org.apache.fineract.integrationtests.common.*; import org.apache.fineract.integrationtests.common.accounting.Account; import org.apache.fineract.integrationtests.common.accounting.AccountHelper; import org.apache.fineract.integrationtests.common.accounting.JournalEntry; @@ -61,11 +47,15 @@ import org.junit.Before; import org.junit.Ignore; import org.junit.Test; -import com.jayway.restassured.builder.RequestSpecBuilder; -import com.jayway.restassured.builder.ResponseSpecBuilder; -import com.jayway.restassured.http.ContentType; -import com.jayway.restassured.specification.RequestSpecification; -import com.jayway.restassured.specification.ResponseSpecification; +import java.text.DateFormat; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.*; + +import static org.junit.Assert.assertEquals; @SuppressWarnings({ "unused", "unchecked", "rawtypes", "static-access", "cast" }) public class SchedulerJobsTestResults { @@ -831,12 +821,12 @@ public class SchedulerJobsTestResults { public void testInterestTransferForSavings() throws InterruptedException { this.savingsAccountHelper = new SavingsAccountHelper(this.requestSpec, this.responseSpec); this.schedulerJobHelper = new SchedulerJobHelper(this.requestSpec, this.responseSpec); - FixedDepositProductHelper fixedDepositProductHelper = new FixedDepositProductHelper(this.requestSpec, this.responseSpec); - AccountHelper accountHelper = new AccountHelper(this.requestSpec, this.responseSpec); + //FixedDepositProductHelper fixedDepositProductHelper = new FixedDepositProductHelper(this.requestSpec,this.responseSpec); + //AccountHelper accountHelper = new AccountHelper(this.requestSpec, this.responseSpec); FixedDepositAccountHelper fixedDepositAccountHelper = new FixedDepositAccountHelper(this.requestSpec, this.responseSpec); DateFormat dateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.US); - DateFormat monthDayFormat = new SimpleDateFormat("dd MMM", Locale.US); + //DateFormat monthDayFormat = new SimpleDateFormat("dd MMM", Locale.US); Calendar todaysDate = Calendar.getInstance(); todaysDate.add(Calendar.MONTH, -3); diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/CenterDomain.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/CenterDomain.java index c6ff9557c..1e4c5e251 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/CenterDomain.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/CenterDomain.java @@ -18,12 +18,11 @@ */ package org.apache.fineract.integrationtests.common; -import java.util.ArrayList; -import java.util.HashMap; - +import com.google.gson.Gson; import org.apache.fineract.infrastructure.core.service.DateUtils; -import com.google.gson.Gson; +import java.util.ArrayList; +import java.util.HashMap; public class CenterDomain implements Comparable { @@ -45,7 +44,6 @@ public class CenterDomain implements Comparable { final String name, final String externalId, final Integer staffId, final int officeID, final String officeName, final String hierarchy, final ArrayList groupMembers) { this.id = id; - this.accountNo = accountNo; this.status = new HashMap(); this.status.put("id", statusid); this.status.put("code", statuscode); diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/CurrenciesHelper.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/CurrenciesHelper.java index 900e6bb69..f0f57d8cc 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/CurrenciesHelper.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/CurrenciesHelper.java @@ -18,14 +18,14 @@ */ package org.apache.fineract.integrationtests.common; -import java.util.ArrayList; -import java.util.HashMap; - import com.google.common.reflect.TypeToken; import com.google.gson.Gson; import com.jayway.restassured.specification.RequestSpecification; import com.jayway.restassured.specification.ResponseSpecification; +import java.util.ArrayList; +import java.util.HashMap; + @SuppressWarnings({ "unused", "rawtypes", "unchecked" }) public class CurrenciesHelper { diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/WorkingDaysHelper.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/WorkingDaysHelper.java index 0dbca5dad..104272fc4 100755 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/WorkingDaysHelper.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/WorkingDaysHelper.java @@ -18,13 +18,13 @@ */ package org.apache.fineract.integrationtests.common; -import java.util.HashMap; -import java.util.Random; - import com.google.gson.Gson; import com.jayway.restassured.specification.RequestSpecification; import com.jayway.restassured.specification.ResponseSpecification; +import java.util.HashMap; +import java.util.Random; + public class WorkingDaysHelper { private static final String WORKINGDAYS_URL = "/fineract-provider/api/v1/workingdays"; @@ -48,7 +48,7 @@ public class WorkingDaysHelper { final HashMap map = new HashMap<>(); map.put("recurrence", "FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR,SA,SU"); map.put("locale", "en"); - map.put("repaymentRescheduleType", randomInt(1, 4)); + map.put("repaymentRescheduleType", new Random().nextInt(4) + 1); map.put("extendTermForDailyRepayments", false); System.out.println("map : " + map); return new Gson().toJson(map); @@ -58,17 +58,12 @@ public class WorkingDaysHelper { final HashMap map = new HashMap<>(); map.put("recurrence", "FREQ=WEEKLY;INTERVAL=1;BYDAY=MP,TI,TE,TH"); map.put("locale", "en"); - map.put("repaymentRescheduleType", randomInt(1, 4)); + map.put("repaymentRescheduleType", new Random().nextInt(4) + 1); map.put("extendTermForDailyRepayments", false); System.out.println("map : " + map); return new Gson().toJson(map); } - public static int randomInt(int low, int high) { - int i = new Random().nextInt(high) + low; - return i; - } - public static int workingDaysId(final RequestSpecification requestSpec, final ResponseSpecification responseSpec) { HashMap workingDays = getAllWorkingDays(requestSpec, responseSpec); return (int) workingDays.get("id"); diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/accounting/GLAccountBuilder.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/accounting/GLAccountBuilder.java index 502e0d1d9..348c9130f 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/accounting/GLAccountBuilder.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/accounting/GLAccountBuilder.java @@ -18,93 +18,87 @@ */ package org.apache.fineract.integrationtests.common.accounting; +import com.google.gson.Gson; +import org.apache.fineract.integrationtests.common.Utils; + import java.util.Calendar; import java.util.HashMap; -import org.apache.fineract.integrationtests.common.Utils; - -import com.google.gson.Gson; - public class GLAccountBuilder { - public static final String ASSET_ACCOUNT = "1"; - public static final String LIABILITY_ACCOUNT = "2"; - public static final String EQUITY_ACCOUNT = "3"; - public static final String INCOME_ACCOUNT = "4"; - public static final String EXPENSE_ACCOUNT = "5"; + public final String ASSET_ACCOUNT = "1"; + public final String LIABILITY_ACCOUNT = "2"; + public final String EQUITY_ACCOUNT = "3"; + public final String INCOME_ACCOUNT = "4"; + public final String EXPENSE_ACCOUNT = "5"; - private static final String ACCOUNT_USAGE_DETAIL = "1"; - private static final String ACCOUNT_USAGE_HEADER = "2"; - private static final String MANUAL_ENTRIES_ALLOW = "true"; - private static final String MANUAL_ENTRIES_NOT_ALLOW = "false"; + private final String ACCOUNT_USAGE_DETAIL = "1"; + private final String ACCOUNT_USAGE_HEADER = "2"; + private final String MANUAL_ENTRIES_ALLOW = "true"; + private final String MANUAL_ENTRIES_NOT_ALLOW = "false"; - private static String name = Utils.randomStringGenerator("ACCOUNT_NAME_", 5); + private String name = Utils.randomStringGenerator("ACCOUNT_NAME_", 5); - private static String GLCode = ""; - private static String accountType = ""; - private static String accountUsage = ACCOUNT_USAGE_DETAIL; - private static String manualEntriesAllowed = MANUAL_ENTRIES_ALLOW; - private static String description = "DEFAULT_DESCRIPTION"; + private String GLCode = ""; + private String accountType = ""; + private String accountUsage = ACCOUNT_USAGE_DETAIL; + private String manualEntriesAllowed = MANUAL_ENTRIES_ALLOW; + private String description = "DEFAULT_DESCRIPTION"; public String build() { final HashMap map = new HashMap<>(); - map.put("name", GLAccountBuilder.name); - map.put("glCode", GLAccountBuilder.GLCode); - map.put("manualEntriesAllowed", GLAccountBuilder.manualEntriesAllowed); - map.put("type", GLAccountBuilder.accountType); - map.put("usage", GLAccountBuilder.accountUsage); - map.put("description", GLAccountBuilder.description); + map.put("name", name); + map.put("glCode", GLCode); + map.put("manualEntriesAllowed", manualEntriesAllowed); + map.put("type", accountType); + map.put("usage", accountUsage); + map.put("description", description); return new Gson().toJson(map); } public GLAccountBuilder withAccountTypeAsAsset() { - GLAccountBuilder.accountType = ASSET_ACCOUNT; - GLAccountBuilder.GLCode = Utils.randomStringGenerator("ASSET_", 2); - GLAccountBuilder.GLCode += Calendar.getInstance().getTimeInMillis() + ""; // Added - // unique - // timestamp - // for - // avoiding - // random - // collisions + accountType = ASSET_ACCOUNT; + GLCode = Utils.randomStringGenerator("ASSET_", 2); + // Add unique timestamp to avoid random collisions + GLCode += Calendar.getInstance().getTimeInMillis() + ""; return this; } public GLAccountBuilder withAccountTypeAsLiability() { - GLAccountBuilder.accountType = LIABILITY_ACCOUNT; - GLAccountBuilder.GLCode = Utils.randomStringGenerator("LIABILITY_", 2); - GLAccountBuilder.GLCode += Calendar.getInstance().getTimeInMillis() + ""; + accountType = LIABILITY_ACCOUNT; + GLCode = Utils.randomStringGenerator("LIABILITY_", 2); + GLCode += Calendar.getInstance().getTimeInMillis() + ""; return this; } public GLAccountBuilder withAccountTypeAsAsEquity() { - GLAccountBuilder.accountType = EQUITY_ACCOUNT; - GLAccountBuilder.GLCode = Utils.randomStringGenerator("EQUITY_", 2); - GLAccountBuilder.GLCode += Calendar.getInstance().getTimeInMillis() + ""; + accountType = EQUITY_ACCOUNT; + GLCode = Utils.randomStringGenerator("EQUITY_", 2); + GLCode += Calendar.getInstance().getTimeInMillis() + ""; return this; } public GLAccountBuilder withAccountTypeAsIncome() { - GLAccountBuilder.accountType = INCOME_ACCOUNT; - GLAccountBuilder.GLCode = Utils.randomStringGenerator("INCOME_", 2); - GLAccountBuilder.GLCode += Calendar.getInstance().getTimeInMillis() + ""; + accountType = INCOME_ACCOUNT; + GLCode = Utils.randomStringGenerator("INCOME_", 2); + GLCode += Calendar.getInstance().getTimeInMillis() + ""; return this; } public GLAccountBuilder withAccountTypeAsExpense() { - GLAccountBuilder.accountType = EXPENSE_ACCOUNT; - GLAccountBuilder.GLCode = Utils.randomStringGenerator("EXPENSE_", 2); - GLAccountBuilder.GLCode += Calendar.getInstance().getTimeInMillis() + ""; + accountType = EXPENSE_ACCOUNT; + GLCode = Utils.randomStringGenerator("EXPENSE_", 2); + GLCode += Calendar.getInstance().getTimeInMillis() + ""; return this; } public GLAccountBuilder withAccountUsageAsHeader() { - GLAccountBuilder.accountUsage = ACCOUNT_USAGE_HEADER; + accountUsage = ACCOUNT_USAGE_HEADER; return this; } public GLAccountBuilder withMaualEntriesNotAllowed() { - GLAccountBuilder.manualEntriesAllowed = MANUAL_ENTRIES_NOT_ALLOW; + manualEntriesAllowed = MANUAL_ENTRIES_NOT_ALLOW; return this; } } diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/savings/SavingsAccountHelper.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/savings/SavingsAccountHelper.java index f4342034a..647a178ce 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/savings/SavingsAccountHelper.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/savings/SavingsAccountHelper.java @@ -18,30 +18,24 @@ */ package org.apache.fineract.integrationtests.common.savings; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.math.BigDecimal; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; - +import com.google.gson.Gson; +import com.jayway.restassured.specification.RequestSpecification; +import com.jayway.restassured.specification.ResponseSpecification; import org.apache.fineract.integrationtests.common.CommonConstants; import org.apache.fineract.integrationtests.common.Utils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Workbook; import org.junit.Assert; -import com.google.gson.Gson; -import com.jayway.restassured.specification.RequestSpecification; -import com.jayway.restassured.specification.ResponseSpecification; - import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.*; @SuppressWarnings({ "rawtypes" }) public class SavingsAccountHelper { @@ -170,7 +164,7 @@ public class SavingsAccountHelper { public HashMap approveSavingsOnDate(final Integer savingsID, final String approvalDate) { System.out.println("--------------------------------- APPROVING SAVINGS APPLICATION ------------------------------------"); final String savingsOperationURL = createSavingsOperationURL(APPROVE_SAVINGS_COMMAND, savingsID); - if (approvalDate == null || approvalDate == "") + if (approvalDate == null || approvalDate.equals("")) return performSavingApplicationActions(savingsOperationURL, getApproveSavingsAsJSON(), isBlock); return performSavingApplicationActions(savingsOperationURL, getApproveSavingsAsJsonOnDate(approvalDate), isBlock); } diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/savings/SavingsApplicationTestBuilder.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/savings/SavingsApplicationTestBuilder.java index f55a8cbda..80425a8a5 100755 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/savings/SavingsApplicationTestBuilder.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/savings/SavingsApplicationTestBuilder.java @@ -18,11 +18,11 @@ */ package org.apache.fineract.integrationtests.common.savings; +import com.google.gson.Gson; + import java.util.HashMap; import java.util.List; -import com.google.gson.Gson; - public class SavingsApplicationTestBuilder { private static final String LOCALE = "en_GB"; @@ -40,7 +40,7 @@ public class SavingsApplicationTestBuilder { final HashMap map = new HashMap<>(); map.put("dateFormat", "dd MMMM yyyy"); - if (accountType == "GROUP") { + if (accountType.equals("GROUP")) { map.put("groupId", ID); } else { map.put("clientId", ID); diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/shares/ShareAccountIntegrationTests.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/shares/ShareAccountIntegrationTests.java index 94c340031..2a938fe85 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/shares/ShareAccountIntegrationTests.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/shares/ShareAccountIntegrationTests.java @@ -18,15 +18,12 @@ */ package org.apache.fineract.integrationtests.common.shares; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - +import com.google.gson.Gson; +import com.jayway.restassured.builder.RequestSpecBuilder; +import com.jayway.restassured.builder.ResponseSpecBuilder; +import com.jayway.restassured.http.ContentType; +import com.jayway.restassured.specification.RequestSpecification; +import com.jayway.restassured.specification.ResponseSpecification; import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.integrationtests.common.ClientHelper; import org.apache.fineract.integrationtests.common.Utils; @@ -37,12 +34,9 @@ import org.junit.Before; import org.junit.Ignore; import org.junit.Test; -import com.google.gson.Gson; -import com.jayway.restassured.builder.RequestSpecBuilder; -import com.jayway.restassured.builder.ResponseSpecBuilder; -import com.jayway.restassured.http.ContentType; -import com.jayway.restassured.specification.RequestSpecification; -import com.jayway.restassured.specification.ResponseSpecification; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.*; public class ShareAccountIntegrationTests { diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/shares/ShareAccountTransactionHelper.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/shares/ShareAccountTransactionHelper.java index a4685a392..90213bcc3 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/shares/ShareAccountTransactionHelper.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/shares/ShareAccountTransactionHelper.java @@ -18,12 +18,11 @@ */ package org.apache.fineract.integrationtests.common.shares; -import java.util.Map; - -import org.apache.fineract.integrationtests.common.Utils; - import com.jayway.restassured.specification.RequestSpecification; import com.jayway.restassured.specification.ResponseSpecification; +import org.apache.fineract.integrationtests.common.Utils; + +import java.util.Map; public class ShareAccountTransactionHelper { diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/shares/ShareProductHelper.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/shares/ShareProductHelper.java index c59bbbc57..15edb092c 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/shares/ShareProductHelper.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/shares/ShareProductHelper.java @@ -18,6 +18,12 @@ */ package org.apache.fineract.integrationtests.common.shares; +import com.google.gson.Gson; +import org.apache.fineract.infrastructure.core.service.DateUtils; +import org.apache.fineract.integrationtests.common.Utils; +import org.joda.time.LocalDate; +import org.junit.Assert; + import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -25,13 +31,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import org.apache.fineract.infrastructure.core.service.DateUtils; -import org.apache.fineract.integrationtests.common.Utils; -import org.joda.time.LocalDate; -import org.junit.Assert; - -import com.google.gson.Gson; - public class ShareProductHelper { @@ -191,9 +190,9 @@ public class ShareProductHelper { String lockinPeriodFrequencyType = String.valueOf(lockinPeriodType.get("id")) ; Assert.assertEquals(this.lockinPeriodFrequencyType, lockinPeriodFrequencyType); - ArrayList> charges = (ArrayList>)shareProductData.get("chargesSelected") ; + //ArrayList> charges = (ArrayList>)shareProductData.get("chargesSelected") ; - ArrayList> marketPrices = (ArrayList>)shareProductData.get("marketPricePeriods") ; + // ArrayList> marketPrices = (ArrayList>)shareProductData.get("marketPricePeriods") ; } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/common/AccountingConstants.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/common/AccountingConstants.java index bf992190a..c5bc43205 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/common/AccountingConstants.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/common/AccountingConstants.java @@ -18,14 +18,16 @@ */ package org.apache.fineract.accounting.common; +import org.apache.fineract.accounting.financialactivityaccount.data.FinancialActivityData; +import org.apache.fineract.accounting.glaccount.domain.GLAccountType; + +import net.sf.ehcache.util.FindBugsSuppressWarnings; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.apache.fineract.accounting.financialactivityaccount.data.FinancialActivityData; -import org.apache.fineract.accounting.glaccount.domain.GLAccountType; - public class AccountingConstants { /*** Accounting placeholders for cash based accounting for loan products ***/ @@ -289,14 +291,16 @@ public class AccountingConstants { return convertToFinancialActivityData(type); } + // TODO Fix this.. + @FindBugsSuppressWarnings("LI_LAZY_INIT_UPDATE_STATIC") public static List getAllFinancialActivities() { - if (financialActivities == null) { - financialActivities = new ArrayList<>(); + if (financialActivities == null) { + financialActivities = new ArrayList<>(); for (final FINANCIAL_ACTIVITY type : FINANCIAL_ACTIVITY.values()) { FinancialActivityData financialActivityData = convertToFinancialActivityData(type); financialActivities.add(financialActivityData); } - } + } return financialActivities; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/glaccount/data/GLAccountData.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/glaccount/data/GLAccountData.java index 63acf2a77..f65936e86 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/glaccount/data/GLAccountData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/glaccount/data/GLAccountData.java @@ -18,22 +18,23 @@ */ package org.apache.fineract.accounting.glaccount.data; -import java.util.Collection; -import java.util.List; - import org.apache.fineract.accounting.common.AccountingEnumerations; import org.apache.fineract.accounting.glaccount.domain.GLAccountType; import org.apache.fineract.accounting.glaccount.domain.GLAccountUsage; import org.apache.fineract.infrastructure.codes.data.CodeValueData; import org.apache.fineract.infrastructure.core.data.EnumOptionData; +import java.io.Serializable; +import java.util.Collection; +import java.util.List; + /** * Immutable object representing a General Ledger Account * * Note: no getter/setters required as google-gson will produce json from fields * of object. */ -public class GLAccountData { +public class GLAccountData implements Serializable { private final Long id; private final String name; diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/glaccount/domain/TrialBalance.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/glaccount/domain/TrialBalance.java index 398354dba..9735affc9 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/glaccount/domain/TrialBalance.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/glaccount/domain/TrialBalance.java @@ -26,6 +26,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import javax.persistence.*; import java.math.BigDecimal; import java.util.Date; +import java.util.Objects; @Entity @Table(name = "m_trial_balance") @@ -103,6 +104,9 @@ public class TrialBalance extends AbstractPersistableCustom { && trialBalance.getTransactionDate().equals(this.getTransactionDate()); } - - + @Override + public int hashCode() { + // TODO return Objects.hash(officeId, glAccountId, amount, entryDate, transactionDate, closingBalance); + return Objects.hash(officeId, glAccountId, entryDate, transactionDate); + } } \ No newline at end of file diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryWritePlatformServiceJpaRepositoryImpl.java index 25cacc5df..7b301e181 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/journalentry/service/JournalEntryWritePlatformServiceJpaRepositoryImpl.java @@ -18,16 +18,6 @@ */ package org.apache.fineract.accounting.journalentry.service; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - import org.apache.commons.lang.StringUtils; import org.apache.fineract.accounting.closure.domain.GLClosure; import org.apache.fineract.accounting.closure.domain.GLClosureRepository; @@ -52,7 +42,6 @@ import org.apache.fineract.accounting.journalentry.domain.JournalEntryType; import org.apache.fineract.accounting.journalentry.exception.JournalEntriesNotFoundException; import org.apache.fineract.accounting.journalentry.exception.JournalEntryInvalidException; import org.apache.fineract.accounting.journalentry.exception.JournalEntryInvalidException.GL_JOURNAL_ENTRY_INVALID_REASON; - import org.apache.fineract.accounting.journalentry.exception.JournalEntryRuntimeException; import org.apache.fineract.accounting.journalentry.serialization.JournalEntryCommandFromApiJsonDeserializer; import org.apache.fineract.accounting.producttoaccountmapping.domain.PortfolioProductType; @@ -86,6 +75,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import java.math.BigDecimal; +import java.util.*; + @Service public class JournalEntryWritePlatformServiceJpaRepositoryImpl implements JournalEntryWritePlatformService { @@ -776,7 +768,7 @@ public class JournalEntryWritePlatformServiceJpaRepositoryImpl implements Journa public boolean equals(Object obj) { if (!obj.getClass().equals(this.getClass())) return false; OfficeCurrencyKey copy = (OfficeCurrencyKey) obj; - return this.office.getId() == copy.office.getId() && this.currency.equals(copy.currency); + return Objects.equals(this.office.getId(), copy.office.getId()) && this.currency.equals(copy.currency); } @Override diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/data/ChargeToGLAccountMapper.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/data/ChargeToGLAccountMapper.java index 1fa60ab96..06edf5106 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/data/ChargeToGLAccountMapper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/data/ChargeToGLAccountMapper.java @@ -21,7 +21,9 @@ package org.apache.fineract.accounting.producttoaccountmapping.data; import org.apache.fineract.accounting.glaccount.data.GLAccountData; import org.apache.fineract.portfolio.charge.data.ChargeData; -public class ChargeToGLAccountMapper { +import java.io.Serializable; + +public class ChargeToGLAccountMapper implements Serializable { @SuppressWarnings("unused") private final ChargeData charge; diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/data/PaymentTypeToGLAccountMapper.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/data/PaymentTypeToGLAccountMapper.java index 56443e740..2f16185e4 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/data/PaymentTypeToGLAccountMapper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/data/PaymentTypeToGLAccountMapper.java @@ -21,7 +21,9 @@ package org.apache.fineract.accounting.producttoaccountmapping.data; import org.apache.fineract.accounting.glaccount.data.GLAccountData; import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; -public class PaymentTypeToGLAccountMapper { +import java.io.Serializable; + +public class PaymentTypeToGLAccountMapper implements Serializable { @SuppressWarnings("unused") private final PaymentTypeData paymentType; diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ProductToGLAccountMappingHelper.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ProductToGLAccountMappingHelper.java index 4d7090fa1..864497cc3 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ProductToGLAccountMappingHelper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/service/ProductToGLAccountMappingHelper.java @@ -94,7 +94,7 @@ public class ProductToGLAccountMappingHelper { portfolioProductType.getValue(), accountTypeId); if (accountMapping == null) { throw new ProductToGLAccountMappingNotFoundException(portfolioProductType, productId, accountTypeName); } - if (accountMapping.getGlAccount().getId() != accountId) { + if (!accountMapping.getGlAccount().getId().equals(accountId)) { final GLAccount glAccount = getAccountByIdAndType(paramName, expectedAccountType, accountId); changes.put(paramName, accountId); accountMapping.setGlAccount(glAccount); @@ -118,7 +118,7 @@ public class ProductToGLAccountMappingHelper { ProductToGLAccountMapping newAccountMapping = new ProductToGLAccountMapping(glAccount, productId, portfolioProductType.getValue(), accountTypeId) ; this.accountMappingRepository.save(newAccountMapping); - }else if (accountMapping.getGlAccount().getId() != accountId) { + }else if (!accountMapping.getGlAccount().getId().equals(accountId)) { final GLAccount glAccount = getAccountByIdAndType(paramName, expectedAccountType, accountId); changes.put(paramName, accountId); accountMapping.setGlAccount(glAccount); @@ -251,7 +251,7 @@ public class ProductToGLAccountMappingHelper { // update existing mappings (if required) if (inputChargeToIncomeAccountMap.containsKey(currentCharge)) { final Long newGLAccountId = inputChargeToIncomeAccountMap.get(currentCharge); - if (newGLAccountId != chargeToIncomeAccountMapping.getGlAccount().getId()) { + if (!newGLAccountId.equals(chargeToIncomeAccountMapping.getGlAccount().getId())) { final GLAccount glAccount; if (isPenalty) { glAccount = getAccountByIdAndType(LOAN_PRODUCT_ACCOUNTING_PARAMS.INCOME_ACCOUNT_ID.getValue(), @@ -337,7 +337,7 @@ public class ProductToGLAccountMappingHelper { // update existing mappings (if required) if (inputPaymentChannelFundSourceMap.containsKey(currentPaymentChannelId)) { final Long newGLAccountId = inputPaymentChannelFundSourceMap.get(currentPaymentChannelId); - if (newGLAccountId != existingPaymentChannelToFundSourceMapping.getGlAccount().getId()) { + if (!newGLAccountId.equals(existingPaymentChannelToFundSourceMapping.getGlAccount().getId())) { final GLAccount glAccount = getAccountByIdAndType(LOAN_PRODUCT_ACCOUNTING_PARAMS.FUND_SOURCE.getValue(), GLAccountType.ASSET, newGLAccountId); existingPaymentChannelToFundSourceMapping.setGlAccount(glAccount); diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/LoanProductProvisioningEntry.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/LoanProductProvisioningEntry.java index 42db8d8e0..0eb2d731c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/LoanProductProvisioningEntry.java +++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/LoanProductProvisioningEntry.java @@ -19,6 +19,7 @@ package org.apache.fineract.accounting.provisioning.domain; import java.math.BigDecimal; +import java.util.Objects; import javax.persistence.Column; import javax.persistence.Entity; @@ -119,10 +120,16 @@ public class LoanProductProvisioningEntry extends AbstractPersistableCustom map = new HashMap<>(); Long id = rs.getLong("id"); Date createdDate = rs.getDate("created_date"); Long createdBy = null; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/domain/AccountNumberFormatEnumerations.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/domain/AccountNumberFormatEnumerations.java index b5fa6ddf9..9dbc2f9ec 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/domain/AccountNumberFormatEnumerations.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/domain/AccountNumberFormatEnumerations.java @@ -18,28 +18,29 @@ */ package org.apache.fineract.infrastructure.accountnumberformat.domain; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - import org.apache.fineract.infrastructure.core.data.EnumOptionData; +import java.util.*; + public class AccountNumberFormatEnumerations { - public final static Set accountNumberPrefixesForClientAccounts = new HashSet<>(Arrays.asList( - AccountNumberPrefixType.OFFICE_NAME, AccountNumberPrefixType.CLIENT_TYPE)); - public final static Set accountNumberPrefixesForLoanAccounts = new HashSet<>(Arrays.asList( - AccountNumberPrefixType.OFFICE_NAME, AccountNumberPrefixType.LOAN_PRODUCT_SHORT_NAME)); - public final static Set accountNumberPrefixesForSavingsAccounts = new HashSet<>(Arrays.asList( - AccountNumberPrefixType.OFFICE_NAME, AccountNumberPrefixType.SAVINGS_PRODUCT_SHORT_NAME)); - public final static Set accountNumberPrefixesForCenters = new HashSet<>(Arrays.asList( - AccountNumberPrefixType.OFFICE_NAME)); - public final static Set accountNumberPrefixesForGroups = new HashSet<>(Arrays.asList( - AccountNumberPrefixType.OFFICE_NAME)); + public final static Set accountNumberPrefixesForClientAccounts = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList(AccountNumberPrefixType.OFFICE_NAME, + AccountNumberPrefixType.CLIENT_TYPE))); + + public final static Set accountNumberPrefixesForLoanAccounts = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList(AccountNumberPrefixType.OFFICE_NAME, + AccountNumberPrefixType.LOAN_PRODUCT_SHORT_NAME))); + + public final static Set accountNumberPrefixesForSavingsAccounts = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList(AccountNumberPrefixType.OFFICE_NAME, + AccountNumberPrefixType.SAVINGS_PRODUCT_SHORT_NAME))); + + public final static Set accountNumberPrefixesForCenters = + Collections.unmodifiableSet(new HashSet<>(Collections.singletonList(AccountNumberPrefixType.OFFICE_NAME))); + + public final static Set accountNumberPrefixesForGroups = + Collections.unmodifiableSet(new HashSet<>(Collections.singletonList(AccountNumberPrefixType.OFFICE_NAME))); public enum AccountNumberPrefixType { OFFICE_NAME(1, "accountNumberPrefixType.officeName"), CLIENT_TYPE(101, "accountNumberPrefixType.clientType"), LOAN_PRODUCT_SHORT_NAME( @@ -49,7 +50,7 @@ public class AccountNumberFormatEnumerations { private final Integer value; private final String code; - private AccountNumberPrefixType(final Integer value, final String code) { + AccountNumberPrefixType(final Integer value, final String code) { this.value = value; this.code = code; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/center/CenterImportHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/center/CenterImportHandler.java index 958f1ddd1..2b5cd2bdc 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/center/CenterImportHandler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/center/CenterImportHandler.java @@ -147,7 +147,7 @@ public class CenterImportHandler implements ImportHandler { private boolean containsGroupId(List groupMembers,Long groupId){ for (GroupGeneralData group: groupMembers) { - if (group.getId()==groupId){ + if (group.getId().equals(groupId)){ return true; } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/group/GroupImportHandler.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/group/GroupImportHandler.java index ada465d58..1860a76f5 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/group/GroupImportHandler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/importhandler/group/GroupImportHandler.java @@ -33,7 +33,6 @@ import org.apache.fineract.infrastructure.bulkimport.importhandler.helper.DateSe import org.apache.fineract.infrastructure.bulkimport.importhandler.helper.EnumOptionDataValueSerializer; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; import org.apache.fineract.infrastructure.core.data.EnumOptionData; -import org.apache.fineract.infrastructure.core.exception.*; import org.apache.fineract.portfolio.calendar.data.CalendarData; import org.apache.fineract.portfolio.client.data.ClientData; import org.apache.fineract.portfolio.group.data.GroupGeneralData; @@ -143,7 +142,7 @@ public class GroupImportHandler implements ImportHandler { private boolean containsClientId(List clientMembers,Long clientId){ for (ClientData client: clientMembers) { - if (client.getId()==clientId){ + if (client.getId().equals(clientId)){ return true; } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/ScheduledEmailConstants.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/ScheduledEmailConstants.java index 950f232f0..294a298a1 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/ScheduledEmailConstants.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/ScheduledEmailConstants.java @@ -19,6 +19,7 @@ package org.apache.fineract.infrastructure.campaigns.email; import java.util.Arrays; +import java.util.Collections; import java.util.HashSet; import java.util.Set; @@ -56,23 +57,26 @@ public class ScheduledEmailConstants { public static final String STRETCHY_REPORT_PARAM_NAME = "stretchyReport"; // list of permitted parameters for the create report mailing job request - public static final Set CREATE_REQUEST_PARAMETERS = new HashSet<>(Arrays.asList(LOCALE_PARAM_NAME, DATE_FORMAT_PARAM_NAME, + public static final Set CREATE_REQUEST_PARAMETERS = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList(LOCALE_PARAM_NAME, DATE_FORMAT_PARAM_NAME, NAME_PARAM_NAME, DESCRIPTION_PARAM_NAME, RECURRENCE_PARAM_NAME, EMAIL_RECIPIENTS_PARAM_NAME, EMAIL_SUBJECT_PARAM_NAME, EMAIL_MESSAGE_PARAM_NAME, EMAIL_ATTACHMENT_FILE_FORMAT_ID_PARAM_NAME, STRETCHY_REPORT_ID_PARAM_NAME, - STRETCHY_REPORT_PARAM_MAP_PARAM_NAME, IS_ACTIVE_PARAM_NAME, START_DATE_TIME_PARAM_NAME)); + STRETCHY_REPORT_PARAM_MAP_PARAM_NAME, IS_ACTIVE_PARAM_NAME, START_DATE_TIME_PARAM_NAME))); // list of permitted parameters for the update report mailing job request - public static final Set UPDATE_REQUEST_PARAMETERS = new HashSet<>(Arrays.asList(LOCALE_PARAM_NAME, DATE_FORMAT_PARAM_NAME, + public static final Set UPDATE_REQUEST_PARAMETERS = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList(LOCALE_PARAM_NAME, DATE_FORMAT_PARAM_NAME, NAME_PARAM_NAME, DESCRIPTION_PARAM_NAME, RECURRENCE_PARAM_NAME, EMAIL_RECIPIENTS_PARAM_NAME, EMAIL_SUBJECT_PARAM_NAME, EMAIL_MESSAGE_PARAM_NAME, EMAIL_ATTACHMENT_FILE_FORMAT_ID_PARAM_NAME, STRETCHY_REPORT_ID_PARAM_NAME, - STRETCHY_REPORT_PARAM_MAP_PARAM_NAME, IS_ACTIVE_PARAM_NAME, START_DATE_TIME_PARAM_NAME)); + STRETCHY_REPORT_PARAM_MAP_PARAM_NAME, IS_ACTIVE_PARAM_NAME, START_DATE_TIME_PARAM_NAME))); // list of parameters that represent the properties of a report mailing job - public static final Set REPORT_MAILING_JOB_DATA_PARAMETERS = new HashSet<>(Arrays.asList(ID_PARAM_NAME, NAME_PARAM_NAME, + public static final Set REPORT_MAILING_JOB_DATA_PARAMETERS = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList(ID_PARAM_NAME, NAME_PARAM_NAME, DESCRIPTION_PARAM_NAME, RECURRENCE_PARAM_NAME, EMAIL_RECIPIENTS_PARAM_NAME, EMAIL_SUBJECT_PARAM_NAME, EMAIL_MESSAGE_PARAM_NAME, EMAIL_ATTACHMENT_FILE_FORMAT_PARAM_NAME, STRETCHY_REPORT_PARAM_NAME, STRETCHY_REPORT_PARAM_MAP_PARAM_NAME, IS_ACTIVE_PARAM_NAME, START_DATE_TIME_PARAM_NAME, PREVIOUS_RUN_DATE_TIME_PARAM_NAME, NEXT_RUN_DATE_TIME_PARAM_NAME, PREVIOUS_RUN_STATUS, - PREVIOUS_RUN_ERROR_LOG, PREVIOUS_RUN_ERROR_MESSAGE, NUMBER_OF_RUNS)); + PREVIOUS_RUN_ERROR_LOG, PREVIOUS_RUN_ERROR_MESSAGE, NUMBER_OF_RUNS))); // report mailing job configuration names public static final String GMAIL_SMTP_SERVER = "GMAIL_SMTP_SERVER"; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/service/EmailCampaignReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/service/EmailCampaignReadPlatformServiceImpl.java index f791d9260..e44c474ac 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/service/EmailCampaignReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/service/EmailCampaignReadPlatformServiceImpl.java @@ -18,21 +18,20 @@ */ package org.apache.fineract.infrastructure.campaigns.email.service; -import org.joda.time.DateTime; -import org.joda.time.LocalDate; -import org.apache.fineract.infrastructure.core.data.EnumOptionData; -import org.apache.fineract.infrastructure.core.domain.JdbcSupport; -import org.apache.fineract.infrastructure.core.service.RoutingDataSource; -import org.apache.fineract.infrastructure.dataqueries.data.ReportData; -import org.apache.fineract.infrastructure.campaigns.email.data.ScheduledEmailEnumerations; -import org.apache.fineract.infrastructure.campaigns.email.exception.EmailBusinessRuleNotFound; -import org.apache.fineract.infrastructure.campaigns.email.exception.EmailCampaignNotFound; import org.apache.fineract.infrastructure.campaigns.email.data.EmailBusinessRulesData; import org.apache.fineract.infrastructure.campaigns.email.data.EmailCampaignData; import org.apache.fineract.infrastructure.campaigns.email.data.EmailCampaignTimeLine; +import org.apache.fineract.infrastructure.campaigns.email.data.ScheduledEmailEnumerations; import org.apache.fineract.infrastructure.campaigns.email.domain.EmailCampaignStatus; import org.apache.fineract.infrastructure.campaigns.email.domain.EmailCampaignStatusEnumerations; import org.apache.fineract.infrastructure.campaigns.email.domain.EmailCampaignType; +import org.apache.fineract.infrastructure.campaigns.email.exception.EmailBusinessRuleNotFound; +import org.apache.fineract.infrastructure.campaigns.email.exception.EmailCampaignNotFound; +import org.apache.fineract.infrastructure.core.data.EnumOptionData; +import org.apache.fineract.infrastructure.core.domain.JdbcSupport; +import org.apache.fineract.infrastructure.core.service.RoutingDataSource; +import org.joda.time.DateTime; +import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.dao.EmptyResultDataAccessException; @@ -130,8 +129,11 @@ public class EmailCampaignReadPlatformServiceImpl implements EmailCampaignReadPl final boolean coreReport = rs.getBoolean("coreReport"); final boolean useReport = rs.getBoolean("useReport"); - final ReportData stretchyReport = new ReportData(reportId, reportName, reportType, reportSubType, reportCategory, + /* + final ReportData stretchyReport = new ReportData(reportId, reportName, reportType, reportSubType, + reportCategory, reportDescription, reportSql, coreReport, useReport, null); + */ final Integer statusId = JdbcSupport.getInteger(rs, "statusEnum"); final EnumOptionData status = EmailCampaignStatusEnumerations.status(statusId); diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/ApplicationExitUtil.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/ApplicationExitUtil.java index 2dac00879..1e5eb074e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/ApplicationExitUtil.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/boot/ApplicationExitUtil.java @@ -21,6 +21,7 @@ package org.apache.fineract.infrastructure.core.boot; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; +import java.nio.charset.Charset; import org.springframework.context.ConfigurableApplicationContext; @@ -37,7 +38,7 @@ public abstract class ApplicationExitUtil { System.out.println("\nHit Enter to quit..."); // NOTE: In Eclipse, System.console() is not available.. so: // (@see https://bugs.eclipse.org/bugs/show_bug.cgi?id=122429) - BufferedReader d = new BufferedReader(new InputStreamReader(System.in)); + BufferedReader d = new BufferedReader(new InputStreamReader(System.in, Charset.defaultCharset())); d.readLine(); ctx.stop(); diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/DataValidatorBuilder.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/DataValidatorBuilder.java index 8191cbc9b..0a073d044 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/DataValidatorBuilder.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/DataValidatorBuilder.java @@ -475,7 +475,7 @@ public class DataValidatorBuilder { if (this.value != null) { final Integer intValue = Integer.valueOf(this.value.toString()); - if (intValue != number) { + if (!intValue.equals(number)) { final StringBuilder validationErrorCode = new StringBuilder("validation.msg.").append(this.resource).append(".") .append(this.parameter).append(".not.equal.to.specified.number"); final StringBuilder defaultEnglishMessage = new StringBuilder("The parameter ").append(this.parameter) diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/EnumOptionData.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/EnumOptionData.java index ee3da0d2a..0d656fa0d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/EnumOptionData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/data/EnumOptionData.java @@ -18,12 +18,15 @@ */ package org.apache.fineract.infrastructure.core.data; +import java.io.Serializable; +import java.util.Objects; + /** *

* Immutable data object representing generic enumeration value. *

*/ -public class EnumOptionData { +public class EnumOptionData implements Serializable { private final Long id; private final String code; @@ -46,6 +49,19 @@ public class EnumOptionData { public String getValue() { return this.value; } - - + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof EnumOptionData)) return false; + EnumOptionData that = (EnumOptionData) o; + return id.equals(that.id) && + code.equals(that.code) && + value.equals(that.value); + } + + @Override + public int hashCode() { + return Objects.hash(id, code, value); + } } \ No newline at end of file diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/AbandonedConnectionCleanupShutdownListener.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/AbandonedConnectionCleanupShutdownListener.java index 579b4318b..ce4d15a29 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/AbandonedConnectionCleanupShutdownListener.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/AbandonedConnectionCleanupShutdownListener.java @@ -66,6 +66,8 @@ public class AbandonedConnectionCleanupShutdownListener implements ApplicationLi } try { Thread.sleep(2000L); - } catch (Exception e) {} + } catch (Exception e) { + logger.error("Exception Occcured while trying to sleep.", e); + } } } \ No newline at end of file diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/Page.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/Page.java index d571aef87..4f4768bdb 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/Page.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/service/Page.java @@ -18,9 +18,10 @@ */ package org.apache.fineract.infrastructure.core.service; +import java.io.Serializable; import java.util.List; -public class Page { +public class Page implements Serializable { private final int totalFilteredRecords; private final List pageItems; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/DatatableCheckStatusData.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/DatatableCheckStatusData.java index 43f0047aa..72f9a9c18 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/DatatableCheckStatusData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/DatatableCheckStatusData.java @@ -18,7 +18,9 @@ */ package org.apache.fineract.infrastructure.dataqueries.data; -public class DatatableCheckStatusData { +import java.io.Serializable; + +public class DatatableCheckStatusData implements Serializable { private final String name; private final int code; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/DatatableData.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/DatatableData.java index 42491d033..7e52d7f71 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/DatatableData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/DatatableData.java @@ -18,12 +18,13 @@ */ package org.apache.fineract.infrastructure.dataqueries.data; +import java.io.Serializable; import java.util.List; /** * Immutable data object representing datatable data. */ -public class DatatableData { +public class DatatableData implements Serializable { @SuppressWarnings("unused") private final String applicationTableName; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/EntityDataTableChecksTemplateData.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/EntityDataTableChecksTemplateData.java index 962c08deb..4b559b764 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/EntityDataTableChecksTemplateData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/EntityDataTableChecksTemplateData.java @@ -18,12 +18,15 @@ */ package org.apache.fineract.infrastructure.dataqueries.data; +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.fineract.portfolio.loanproduct.data.LoanProductData; +import org.apache.fineract.portfolio.savings.data.SavingsProductData; + import java.io.Serializable; import java.util.Collection; import java.util.List; - -import org.apache.fineract.portfolio.loanproduct.data.LoanProductData; -import org.apache.fineract.portfolio.savings.data.SavingsProductData; +import java.util.Objects; /** * Immutable data object for role data. @@ -53,4 +56,27 @@ public class EntityDataTableChecksTemplateData implements Serializable { this.loanProductDatas = loanProductDatas; this.savingsProductDatas = savingsProductDatas; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + + if (!(o instanceof EntityDataTableChecksTemplateData)) return false; + + EntityDataTableChecksTemplateData that = (EntityDataTableChecksTemplateData) o; + + return Objects.equals(entities, that.entities) && + Objects.equals(statusClient, that.statusClient) && + Objects.equals(statusGroup, that.statusGroup) && + Objects.equals(statusSavings, that.statusSavings) && + Objects.equals(statusLoans, that.statusLoans) && + Objects.equals(datatables, that.datatables) && + Objects.equals(loanProductDatas, that.loanProductDatas) && + Objects.equals(savingsProductDatas, that.savingsProductDatas); + } + + @Override + public int hashCode() { + return Objects.hash(entities, statusClient, statusGroup, statusSavings, statusLoans, datatables, loanProductDatas, savingsProductDatas); + } } \ No newline at end of file diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/ResultsetColumnHeaderData.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/ResultsetColumnHeaderData.java index 75f0eb8cb..31d306493 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/ResultsetColumnHeaderData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/ResultsetColumnHeaderData.java @@ -18,15 +18,16 @@ */ package org.apache.fineract.infrastructure.dataqueries.data; +import org.apache.fineract.infrastructure.core.exception.PlatformDataIntegrityException; + +import java.io.Serializable; import java.util.ArrayList; import java.util.List; -import org.apache.fineract.infrastructure.core.exception.PlatformDataIntegrityException; - /** * Immutable data object representing a resultset column. */ -public final class ResultsetColumnHeaderData { +public final class ResultsetColumnHeaderData implements Serializable { private final String columnName; private String columnType; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/ResultsetColumnValueData.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/ResultsetColumnValueData.java index c42513b38..ae9e7940a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/ResultsetColumnValueData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/ResultsetColumnValueData.java @@ -18,11 +18,13 @@ */ package org.apache.fineract.infrastructure.dataqueries.data; +import java.io.Serializable; + /** * Immutable data object representing a possible value for a given resultset * column. */ -public class ResultsetColumnValueData { +public class ResultsetColumnValueData implements Serializable { private final int id; private final String value; 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 adc1efec8..ed4f0b754 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 @@ -18,19 +18,10 @@ */ package org.apache.fineract.infrastructure.dataqueries.service; -import java.lang.reflect.Type; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; - -import javax.persistence.PersistenceException; -import javax.sql.DataSource; - +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.reflect.TypeToken; import org.apache.commons.lang.BooleanUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.exception.ExceptionUtils; @@ -51,11 +42,7 @@ import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.infrastructure.core.serialization.JsonParserHelper; import org.apache.fineract.infrastructure.core.service.RoutingDataSource; import org.apache.fineract.infrastructure.dataqueries.api.DataTableApiConstant; -import org.apache.fineract.infrastructure.dataqueries.data.DataTableValidator; -import org.apache.fineract.infrastructure.dataqueries.data.DatatableData; -import org.apache.fineract.infrastructure.dataqueries.data.GenericResultsetData; -import org.apache.fineract.infrastructure.dataqueries.data.ResultsetColumnHeaderData; -import org.apache.fineract.infrastructure.dataqueries.data.ResultsetRowData; +import org.apache.fineract.infrastructure.dataqueries.data.*; import org.apache.fineract.infrastructure.dataqueries.exception.DatatableEntryRequiredException; import org.apache.fineract.infrastructure.dataqueries.exception.DatatableNotFoundException; import org.apache.fineract.infrastructure.dataqueries.exception.DatatableSystemErrorException; @@ -79,10 +66,11 @@ import org.springframework.jdbc.support.rowset.SqlRowSetMetaData; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.reflect.TypeToken; +import javax.persistence.PersistenceException; +import javax.sql.DataSource; +import java.lang.reflect.Type; +import java.math.BigDecimal; +import java.util.*; @Service public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataService { @@ -805,7 +793,7 @@ public class ReadWriteNonCoreDataServiceImpl implements ReadWriteNonCoreDataServ final StringBuilder constrainBuilder, final List codeMappings) { final String datatableAlias = datatableName.toLowerCase().replaceAll("\\s", "_"); final String name = (column.has("name")) ? column.get("name").getAsString() : null; - sqlBuilder = sqlBuilder.append(", DROP COLUMN `" + name + "`"); + //sqlBuilder = sqlBuilder.append(", DROP COLUMN `" + name + "`"); final StringBuilder findFKSql = new StringBuilder(); findFKSql.append("SELECT count(*)").append("FROM information_schema.TABLE_CONSTRAINTS i") .append(" WHERE i.CONSTRAINT_TYPE = 'FOREIGN KEY'").append(" AND i.TABLE_SCHEMA = DATABASE()") diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/domain/FineractEntityType.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/domain/FineractEntityType.java index dd8e384f5..24ef61183 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/domain/FineractEntityType.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/domain/FineractEntityType.java @@ -23,11 +23,14 @@ public class FineractEntityType { private String description; private String table_name; - public static FineractEntityType OFFICE = new FineractEntityType ("office", "Offices", "m_office"); - public static FineractEntityType LOAN_PRODUCT = new FineractEntityType ("loan_product", "Loan Products", "m_product_loan"); - public static FineractEntityType SAVINGS_PRODUCT = new FineractEntityType ("savings_product", "Savings Products", "m_savings_product"); - public static FineractEntityType CHARGE = new FineractEntityType ("charge", "Fees/Charges", "m_charge"); - public static FineractEntityType SHARE_PRODUCT = new FineractEntityType("shares_product", "Shares Products", "m_share_product") ; + public static final FineractEntityType OFFICE = new FineractEntityType ("office", "Offices", "m_office"); + public static final FineractEntityType LOAN_PRODUCT = new FineractEntityType ("loan_product", "Loan Products", + "m_product_loan"); + public static final FineractEntityType SAVINGS_PRODUCT = new FineractEntityType ("savings_product", "Savings Products" + , "m_savings_product"); + public static final FineractEntityType CHARGE = new FineractEntityType ("charge", "Fees/Charges", "m_charge"); + public static final FineractEntityType SHARE_PRODUCT = new FineractEntityType("shares_product", "Shares Products", + "m_share_product") ; private FineractEntityType (String type, String description, String table_name) { this.type = type; @@ -55,11 +58,11 @@ public class FineractEntityType { retType = OFFICE; } else if (type.equals(LOAN_PRODUCT.type)) { retType = LOAN_PRODUCT; - } else if (type.equals(SAVINGS_PRODUCT)) { + } else if (type.equals(SAVINGS_PRODUCT.type)) { retType = SAVINGS_PRODUCT; - } else if (type.equals(CHARGE)) { + } else if (type.equals(CHARGE.type)) { retType = CHARGE; - }else if(type.equals(SHARE_PRODUCT)) { + }else if(type.equals(SHARE_PRODUCT.type)) { retType = SHARE_PRODUCT ; } return retType; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/domain/Sender.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/domain/Sender.java index cc9970e4d..87470c20d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/domain/Sender.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/domain/Sender.java @@ -18,80 +18,29 @@ */ package org.apache.fineract.infrastructure.gcm.domain; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_CANONICAL_IDS; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_ERROR; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_FAILURE; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_MESSAGE_ID; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_MULTICAST_ID; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_NOTIFICATION_BADGE; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_NOTIFICATION; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_NOTIFICATION_BODY; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_NOTIFICATION_BODY_LOC_ARGS; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_NOTIFICATION_BODY_LOC_KEY; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_NOTIFICATION_CLICK_ACTION; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_NOTIFICATION_COLOR; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_NOTIFICATION_ICON; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_NOTIFICATION_SOUND; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_NOTIFICATION_TAG; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_NOTIFICATION_TITLE; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_NOTIFICATION_TITLE_LOC_ARGS; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_NOTIFICATION_TITLE_LOC_KEY; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_PAYLOAD; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_REGISTRATION_IDS; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_TO; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_RESULTS; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.JSON_SUCCESS; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.PARAM_COLLAPSE_KEY; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.PARAM_DELAY_WHILE_IDLE; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.PARAM_DRY_RUN; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.PARAM_PRIORITY; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.PARAM_CONTENT_AVAILABLE; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.PARAM_RESTRICTED_PACKAGE_NAME; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.PARAM_TIME_TO_LIVE; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.TOKEN_CANONICAL_REG_ID; -import static org.apache.fineract.infrastructure.gcm.GcmConstants.TOPIC_PREFIX; - -import org.apache.fineract.infrastructure.gcm.GcmConstants; -import org.apache.fineract.infrastructure.gcm.exception.InvalidRequestException; -/*import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import org.json.simple.JSONValue; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException;*/ - - - - - - import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import org.apache.fineract.infrastructure.gcm.GcmConstants; +import org.apache.fineract.infrastructure.gcm.exception.InvalidRequestException; -import java.io.BufferedReader; -import java.io.Closeable; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; +import java.io.*; import java.net.HttpURLConnection; import java.net.URL; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Random; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.*; import java.util.logging.Level; import java.util.logging.Logger; +import static org.apache.fineract.infrastructure.gcm.GcmConstants.*; + /** * Helper class to send messages to the GCM service using an API Key. */ public class Sender { - protected static final String UTF8 = "UTF-8"; - /** * Initial delay before first retry, without jitter. */ @@ -262,7 +211,7 @@ public class Sender { .get(TOKEN_CANONICAL_REG_ID).getAsString(); } if(jsonResult.has(JSON_ERROR)){ - error = (String) jsonResult.get(JSON_ERROR).getAsString(); + error = jsonResult.get(JSON_ERROR).getAsString(); } int success = 0; int failure = 0; @@ -306,7 +255,7 @@ public class Sender { int failure = getNumber(responseMap, JSON_FAILURE).intValue(); List failedIds = null; if (jsonResponse.has("failed_registration_ids")) { - JsonArray jFailedIds = (JsonArray) jsonResponse + JsonArray jFailedIds = jsonResponse .get("failed_registration_ids").getAsJsonArray(); failedIds = new ArrayList<>(); for (int i = 0; i < jFailedIds.size(); i++) { @@ -709,7 +658,7 @@ public class Sender { } logger.fine("Sending POST to " + url); logger.finest("POST body: " + body); - byte[] bytes = body.getBytes(UTF8); + byte[] bytes = body.getBytes(StandardCharsets.UTF_8); HttpURLConnection conn = getConnection(url); conn.setDoOutput(true); conn.setUseCaches(false); @@ -789,7 +738,7 @@ public class Sender { return ""; } BufferedReader reader = new BufferedReader( - new InputStreamReader(stream)); + new InputStreamReader(stream, StandardCharsets.UTF_8)); StringBuilder content = new StringBuilder(); String newLine; do { diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/data/Field.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/data/Field.java index 84d25b544..444e49de4 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/data/Field.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/data/Field.java @@ -18,8 +18,10 @@ */ package org.apache.fineract.infrastructure.hooks.data; +import java.io.Serializable; + @SuppressWarnings("unused") -public class Field { +public class Field implements Serializable { private final String fieldName; private final String fieldValue; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/ReportMailingJobConstants.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/ReportMailingJobConstants.java index ab5f11082..8560c644b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/ReportMailingJobConstants.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/ReportMailingJobConstants.java @@ -18,11 +18,13 @@ */ package org.apache.fineract.infrastructure.reportmailingjob; +import java.io.Serializable; import java.util.Arrays; +import java.util.Collections; import java.util.HashSet; import java.util.Set; -public class ReportMailingJobConstants { +public class ReportMailingJobConstants implements Serializable { // define the API resource entity name public static final String REPORT_MAILING_JOB_ENTITY_NAME = "REPORTMAILINGJOB"; @@ -62,23 +64,26 @@ public class ReportMailingJobConstants { public static final String STRETCHY_REPORT_PARAM_NAME = "stretchyReport"; // list of permitted parameters for the create report mailing job request - public static final Set CREATE_REQUEST_PARAMETERS = new HashSet<>(Arrays.asList(LOCALE_PARAM_NAME, DATE_FORMAT_PARAM_NAME, - NAME_PARAM_NAME, DESCRIPTION_PARAM_NAME, RECURRENCE_PARAM_NAME, EMAIL_RECIPIENTS_PARAM_NAME, EMAIL_SUBJECT_PARAM_NAME, - EMAIL_MESSAGE_PARAM_NAME, EMAIL_ATTACHMENT_FILE_FORMAT_ID_PARAM_NAME, STRETCHY_REPORT_ID_PARAM_NAME, - STRETCHY_REPORT_PARAM_MAP_PARAM_NAME, IS_ACTIVE_PARAM_NAME, START_DATE_TIME_PARAM_NAME)); - + public static final Set CREATE_REQUEST_PARAMETERS = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList(LOCALE_PARAM_NAME, DATE_FORMAT_PARAM_NAME, + NAME_PARAM_NAME, DESCRIPTION_PARAM_NAME, RECURRENCE_PARAM_NAME, EMAIL_RECIPIENTS_PARAM_NAME, EMAIL_SUBJECT_PARAM_NAME, + EMAIL_MESSAGE_PARAM_NAME, EMAIL_ATTACHMENT_FILE_FORMAT_ID_PARAM_NAME, STRETCHY_REPORT_ID_PARAM_NAME, + STRETCHY_REPORT_PARAM_MAP_PARAM_NAME, IS_ACTIVE_PARAM_NAME, START_DATE_TIME_PARAM_NAME))); + // list of permitted parameters for the update report mailing job request - public static final Set UPDATE_REQUEST_PARAMETERS = new HashSet<>(Arrays.asList(LOCALE_PARAM_NAME, DATE_FORMAT_PARAM_NAME, + public static final Set UPDATE_REQUEST_PARAMETERS = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList(LOCALE_PARAM_NAME, DATE_FORMAT_PARAM_NAME, NAME_PARAM_NAME, DESCRIPTION_PARAM_NAME, RECURRENCE_PARAM_NAME, EMAIL_RECIPIENTS_PARAM_NAME, EMAIL_SUBJECT_PARAM_NAME, EMAIL_MESSAGE_PARAM_NAME, EMAIL_ATTACHMENT_FILE_FORMAT_ID_PARAM_NAME, STRETCHY_REPORT_ID_PARAM_NAME, - STRETCHY_REPORT_PARAM_MAP_PARAM_NAME, IS_ACTIVE_PARAM_NAME, START_DATE_TIME_PARAM_NAME)); + STRETCHY_REPORT_PARAM_MAP_PARAM_NAME, IS_ACTIVE_PARAM_NAME, START_DATE_TIME_PARAM_NAME))); // list of parameters that represent the properties of a report mailing job - public static final Set REPORT_MAILING_JOB_DATA_PARAMETERS = new HashSet<>(Arrays.asList(ID_PARAM_NAME, NAME_PARAM_NAME, + public static final Set REPORT_MAILING_JOB_DATA_PARAMETERS = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList(ID_PARAM_NAME, NAME_PARAM_NAME, DESCRIPTION_PARAM_NAME, RECURRENCE_PARAM_NAME, EMAIL_RECIPIENTS_PARAM_NAME, EMAIL_SUBJECT_PARAM_NAME, EMAIL_MESSAGE_PARAM_NAME, EMAIL_ATTACHMENT_FILE_FORMAT_PARAM_NAME, STRETCHY_REPORT_PARAM_NAME, STRETCHY_REPORT_PARAM_MAP_PARAM_NAME, IS_ACTIVE_PARAM_NAME, START_DATE_TIME_PARAM_NAME, PREVIOUS_RUN_DATE_TIME_PARAM_NAME, NEXT_RUN_DATE_TIME_PARAM_NAME, PREVIOUS_RUN_STATUS, - PREVIOUS_RUN_ERROR_LOG, PREVIOUS_RUN_ERROR_MESSAGE, NUMBER_OF_RUNS)); + PREVIOUS_RUN_ERROR_LOG, PREVIOUS_RUN_ERROR_MESSAGE, NUMBER_OF_RUNS))); // report mailing job configuration names public static final String GMAIL_SMTP_SERVER = "GMAIL_SMTP_SERVER"; diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/data/ReportMailingJobEmailAttachmentFileFormat.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/data/ReportMailingJobEmailAttachmentFileFormat.java index c3e15ca81..24e2a6c60 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/data/ReportMailingJobEmailAttachmentFileFormat.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/data/ReportMailingJobEmailAttachmentFileFormat.java @@ -18,12 +18,12 @@ */ package org.apache.fineract.infrastructure.reportmailingjob.data; -import java.util.ArrayList; -import java.util.List; - import org.apache.commons.lang.StringUtils; import org.apache.fineract.infrastructure.core.data.EnumOptionData; +import java.util.ArrayList; +import java.util.List; + public enum ReportMailingJobEmailAttachmentFileFormat { INVALID(0, "ReportMailingJobEmailAttachmentFileFormat.INVALID", "Invalid"), XLS(1, "ReportMailingJobEmailAttachmentFileFormat.XLS", "XLS"), @@ -34,7 +34,7 @@ public enum ReportMailingJobEmailAttachmentFileFormat { private String value; private Integer id; - private ReportMailingJobEmailAttachmentFileFormat(final Integer id, final String code, final String value) { + ReportMailingJobEmailAttachmentFileFormat(final Integer id, final String code, final String value) { this.value = value; this.code = code; this.id = id; @@ -69,11 +69,11 @@ public enum ReportMailingJobEmailAttachmentFileFormat { public static ReportMailingJobEmailAttachmentFileFormat newInstance(final Integer id) { ReportMailingJobEmailAttachmentFileFormat emailAttachmentFileFormat = INVALID; - if (id == XLS.id) { + if (id.equals(XLS.id)) { emailAttachmentFileFormat = XLS; - } else if (id == PDF.id) { + } else if (id.equals(PDF.id)) { emailAttachmentFileFormat = PDF; - } else if (id == CSV.id) { + } else if (id.equals(CSV.id)) { emailAttachmentFileFormat = CSV; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/data/ReportMailingJobStretchyReportParamDateOption.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/data/ReportMailingJobStretchyReportParamDateOption.java index 01cf80847..6959d83b7 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/data/ReportMailingJobStretchyReportParamDateOption.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/data/ReportMailingJobStretchyReportParamDateOption.java @@ -18,12 +18,12 @@ */ package org.apache.fineract.infrastructure.reportmailingjob.data; -import java.util.ArrayList; -import java.util.List; - import org.apache.commons.lang.StringUtils; import org.apache.fineract.infrastructure.core.data.EnumOptionData; +import java.util.ArrayList; +import java.util.List; + public enum ReportMailingJobStretchyReportParamDateOption { INVALID(0, "ReportMailingJobStretchyReportParamDateOption.INVALID", "Invalid"), TODAY(1, "ReportMailingJobStretchyReportParamDateOption.TODAY", "Today"), @@ -74,11 +74,11 @@ public enum ReportMailingJobStretchyReportParamDateOption { public static ReportMailingJobStretchyReportParamDateOption newInstance(final Integer id) { ReportMailingJobStretchyReportParamDateOption reportMailingJobStretchyReportParamDateOption = INVALID; - if (id == TODAY.id) { + if (id.equals(TODAY.id)) { reportMailingJobStretchyReportParamDateOption = TODAY; - } else if (id == YESTERDAY.id) { + } else if (id.equals(YESTERDAY.id)) { reportMailingJobStretchyReportParamDateOption = YESTERDAY; - } else if (id == TOMORROW.id) { + } else if (id.equals(TOMORROW.id)) { reportMailingJobStretchyReportParamDateOption = TOMORROW; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/api/AuthenticationApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/api/AuthenticationApiResource.java index 7ddf2f8f0..b88110c19 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/api/AuthenticationApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/api/AuthenticationApiResource.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.infrastructure.security.api; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; import java.util.Set; @@ -129,12 +131,12 @@ public class AuthenticationApiResource { principal.hasSpecificPermissionTo(TwoFactorConstants.BYPASS_TWO_FACTOR_PERMISSION); if (this.springSecurityPlatformSecurityContext.doesPasswordHasToBeRenewed(principal)) { authenticatedUserData = new AuthenticatedUserData(request.username, principal.getId(), - new String(base64EncodedAuthenticationKey), isTwoFactorRequired); + new String(base64EncodedAuthenticationKey, StandardCharsets.UTF_8), isTwoFactorRequired); } else { authenticatedUserData = new AuthenticatedUserData(request.username, officeId, officeName, staffId, staffDisplayName, organisationalRole, roles, permissions, principal.getId(), - new String(base64EncodedAuthenticationKey), isTwoFactorRequired); + new String(base64EncodedAuthenticationKey, StandardCharsets.UTF_8), isTwoFactorRequired); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/constants/TwoFactorConfigurationConstants.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/constants/TwoFactorConfigurationConstants.java index 22818dea5..a69c6bcc4 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/constants/TwoFactorConfigurationConstants.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/constants/TwoFactorConfigurationConstants.java @@ -18,10 +18,7 @@ */ package org.apache.fineract.infrastructure.security.constants; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; public class TwoFactorConfigurationConstants { @@ -42,18 +39,18 @@ public class TwoFactorConfigurationConstants { public static final String ACCESS_TOKEN_LIVE_TIME_EXTENDED = "access-token-live-time-extended"; public static final Set REQUEST_DATA_PARAMETERS = - new HashSet<>(Arrays.asList(ENABLE_EMAIL_DELIVERY, EMAIL_SUBJECT, EMAIL_BODY, + Collections.unmodifiableSet(new HashSet<>(Arrays.asList(ENABLE_EMAIL_DELIVERY, EMAIL_SUBJECT, EMAIL_BODY, ENABLE_SMS_DELIVERY, SMS_PROVIDER_ID, SMS_MESSAGE_TEXT, OTP_TOKEN_LIVE_TIME, - OTP_TOKEN_LENGTH, ACCESS_TOKEN_LIVE_TIME, ACCESS_TOKEN_LIVE_TIME_EXTENDED)); + OTP_TOKEN_LENGTH, ACCESS_TOKEN_LIVE_TIME, ACCESS_TOKEN_LIVE_TIME_EXTENDED))); public static final List STRING_PARAMETERS = - Arrays.asList(EMAIL_SUBJECT, EMAIL_BODY, SMS_MESSAGE_TEXT); + Collections.unmodifiableList(Arrays.asList(EMAIL_SUBJECT, EMAIL_BODY, SMS_MESSAGE_TEXT)); public static final List BOOLEAN_PARAMETERS = - Arrays.asList(ENABLE_EMAIL_DELIVERY, ENABLE_SMS_DELIVERY); + Collections.unmodifiableList(Arrays.asList(ENABLE_EMAIL_DELIVERY, ENABLE_SMS_DELIVERY)); public static final List NUMBER_PARAMETERS = - Arrays.asList(SMS_PROVIDER_ID, OTP_TOKEN_LIVE_TIME, OTP_TOKEN_LENGTH, - ACCESS_TOKEN_LIVE_TIME, ACCESS_TOKEN_LIVE_TIME_EXTENDED); + Collections.unmodifiableList(Arrays.asList(SMS_PROVIDER_ID, OTP_TOKEN_LIVE_TIME, OTP_TOKEN_LENGTH, + ACCESS_TOKEN_LIVE_TIME, ACCESS_TOKEN_LIVE_TIME_EXTENDED)); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropResponseData.java b/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropResponseData.java index e31fe362c..842a82c1d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropResponseData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/interoperation/data/InteropResponseData.java @@ -34,7 +34,7 @@ public class InteropResponseData extends CommandProcessingResult { public static final String ISO_DATE_TIME_PATTERN = "yyyy-MM-dd'T'HH:mm:ssZ"; // public static final SimpleDateFormat ISO_DATE_TIME_FORMATTER = new SimpleDateFormat(ISO_DATE_TIME_PATTERN); // TODO: not synchronized - public static DateTimeFormatter ISO_DATE_TIME_FORMATTER = DateTimeFormat.forPattern(ISO_DATE_TIME_PATTERN); + public static final DateTimeFormatter ISO_DATE_TIME_FORMATTER = DateTimeFormat.forPattern(ISO_DATE_TIME_PATTERN); @NotNull private final String transactionCode; diff --git a/fineract-provider/src/main/java/org/apache/fineract/notification/service/TopicDomainServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/notification/service/TopicDomainServiceImpl.java index e1f19cec5..77cbc69c1 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/notification/service/TopicDomainServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/notification/service/TopicDomainServiceImpl.java @@ -162,7 +162,7 @@ public class TopicDomainServiceImpl implements TopicDomainService { for (TopicSubscriber subscriber : oldSubscriptions) { for (Topic topic : oldTopics) { - if (subscriber.getTopic().getId() == topic.getId()) { + if (subscriber.getTopic().getId().equals(topic.getId())) { topicSubscriberRepository.delete(subscriber); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/monetary/data/CurrencyData.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/monetary/data/CurrencyData.java index c3c87505c..42d550a2d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/monetary/data/CurrencyData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/monetary/data/CurrencyData.java @@ -18,10 +18,13 @@ */ package org.apache.fineract.organisation.monetary.data; +import java.io.Serializable; +import java.util.Objects; + /** * Immutable data object representing currency. */ -public class CurrencyData { +public class CurrencyData implements Serializable { private final String code; private final String name; @@ -70,17 +73,6 @@ public class CurrencyData { return this.inMultiplesOf; } - @Override - public boolean equals(final Object obj) { - final CurrencyData currencyData = (CurrencyData) obj; - return currencyData.code.equals(this.code); - } - - @Override - public int hashCode() { - return this.code.hashCode(); - } - private String generateDisplayLabel() { final StringBuilder builder = new StringBuilder(this.name).append(' '); @@ -97,4 +89,23 @@ public class CurrencyData { public String getName() { return name; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof CurrencyData)) return false; + CurrencyData that = (CurrencyData) o; + return Objects.equals(decimalPlaces, that.decimalPlaces) && + Objects.equals(code, that.code) && + Objects.equals(name, that.name) && + Objects.equals(inMultiplesOf, that.inMultiplesOf) && + Objects.equals(displaySymbol, that.displaySymbol) && + Objects.equals(nameCode, that.nameCode) && + Objects.equals(displayLabel, that.displayLabel); + } + + @Override + public int hashCode() { + return Objects.hash(code, name, decimalPlaces, inMultiplesOf, displaySymbol, nameCode, displayLabel); + } } \ No newline at end of file diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/monetary/domain/ApplicationCurrency.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/monetary/domain/ApplicationCurrency.java index 352c85a6a..9b867f3e8 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/monetary/domain/ApplicationCurrency.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/monetary/domain/ApplicationCurrency.java @@ -18,14 +18,14 @@ */ package org.apache.fineract.organisation.monetary.domain; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; +import org.apache.fineract.organisation.monetary.data.CurrencyData; +import org.apache.fineract.organisation.office.domain.OrganisationCurrency; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; -import org.apache.fineract.organisation.monetary.data.CurrencyData; -import org.apache.fineract.organisation.office.domain.OrganisationCurrency; -import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; - @Entity @Table(name = "m_currency") public class ApplicationCurrency extends AbstractPersistableCustom { diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/monetary/domain/MoneyHelper.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/monetary/domain/MoneyHelper.java index 8f2f7a8fd..8f3a75fa0 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/monetary/domain/MoneyHelper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/monetary/domain/MoneyHelper.java @@ -18,15 +18,15 @@ */ package org.apache.fineract.organisation.monetary.domain; -import java.math.MathContext; -import java.math.RoundingMode; - -import javax.annotation.PostConstruct; - +import net.sf.ehcache.util.FindBugsSuppressWarnings; import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import javax.annotation.PostConstruct; +import java.math.MathContext; +import java.math.RoundingMode; + @Component public class MoneyHelper { @@ -40,6 +40,7 @@ public class MoneyHelper { private ConfigurationDomainService configurationDomainService; @PostConstruct + @FindBugsSuppressWarnings("ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD") public void someFunction () { staticConfigurationDomainService = configurationDomainService; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteria.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteria.java index b5c92a059..ac76c8a56 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteria.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteria.java @@ -18,21 +18,6 @@ */ package org.apache.fineract.organisation.provisioning.domain; -import java.time.Instant; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.persistence.UniqueConstraint; - import org.apache.fineract.accounting.glaccount.domain.GLAccount; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom; @@ -42,6 +27,10 @@ import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct; import org.apache.fineract.useradministration.domain.AppUser; import org.joda.time.DateTime; +import javax.persistence.*; +import java.time.Instant; +import java.util.*; + @Entity @Table(name = "m_provisioning_criteria", uniqueConstraints = { @UniqueConstraint(columnNames = { "criteria_name" }, name = "criteria_name") }) public class ProvisioningCriteria extends AbstractAuditableCustom { @@ -72,7 +61,7 @@ public class ProvisioningCriteria extends AbstractAuditableCustom setCreatedBy(createdBy) ; setCreatedDate(Instant.ofEpochMilli(createdDate.getMillis())); setLastModifiedBy(lastModifiedBy) ; - setLastModifiedDate(lastModifiedDate == null ? null : Instant.ofEpochMilli(lastModifiedDate.getMillis())); + setLastModifiedDate(Instant.ofEpochMilli(lastModifiedDate.getMillis())); } public void setProvisioningCriteriaDefinitions(Set provisioningCriteriaDefinition) { 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 5601e17f6..80e51938e 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 @@ -121,10 +121,9 @@ public class ProvisioningCriteriaAssembler { private ProvisioningCriteria createCriteria(final JsonElement jsonElement) { final String criteriaName = this.fromApiJsonHelper.extractStringNamed(ProvisioningCriteriaConstants.JSON_CRITERIANAME_PARAM, jsonElement); - AppUser modifiedBy = null; - DateTime modifiedOn = null; + ProvisioningCriteria criteria = new ProvisioningCriteria(criteriaName, platformSecurityContext.authenticatedUser(), new DateTime(), - modifiedBy, modifiedOn); + platformSecurityContext.authenticatedUser(), new DateTime()); return criteria; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/data/StaffData.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/data/StaffData.java index 265b67160..8394ab4f6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/data/StaffData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/staff/data/StaffData.java @@ -18,16 +18,16 @@ */ package org.apache.fineract.organisation.staff.data; -import java.util.Collection; - -import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants; import org.apache.fineract.organisation.office.data.OfficeData; import org.joda.time.LocalDate; +import java.io.Serializable; +import java.util.Collection; + /** * Immutable data object representing staff data. */ -public class StaffData { +public class StaffData implements Serializable { private final Long id; private final String externalId; diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/CashierData.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/CashierData.java index 27367f77b..2c346ce78 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/CashierData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/data/CashierData.java @@ -18,17 +18,12 @@ */ package org.apache.fineract.organisation.teller.data; +import org.apache.fineract.organisation.staff.data.StaffData; + import java.io.Serializable; import java.util.Collection; import java.util.Date; -import org.apache.fineract.infrastructure.codes.data.CodeValueData; -import org.apache.fineract.organisation.office.data.OfficeData; -import org.apache.fineract.organisation.staff.data.StaffData; -import org.apache.fineract.portfolio.client.data.ClientData; -import org.apache.fineract.portfolio.savings.data.SavingsProductData; -import org.joda.time.LocalDate; - /** * Represents a cashier, providing access to the cashier's office, staff * information, teller, and more. diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/CashierTxnType.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/CashierTxnType.java index 1141debf6..c8f39cd7f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/CashierTxnType.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/domain/CashierTxnType.java @@ -18,9 +18,9 @@ */ package org.apache.fineract.organisation.teller.domain; -import java.util.HashMap; +import java.io.Serializable; -public class CashierTxnType { +public class CashierTxnType implements Serializable { private Integer id; private String value; diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerManagementReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerManagementReadPlatformServiceImpl.java index 745179585..a3ccd5ec5 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerManagementReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/teller/service/TellerManagementReadPlatformServiceImpl.java @@ -18,13 +18,6 @@ */ package org.apache.fineract.organisation.teller.service; -import java.math.BigDecimal; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.Collection; -import java.util.Date; -import java.util.Iterator; - import org.apache.commons.lang.StringUtils; import org.apache.fineract.infrastructure.core.domain.JdbcSupport; import org.apache.fineract.infrastructure.core.exception.UnrecognizedQueryParamException; @@ -41,13 +34,7 @@ import org.apache.fineract.organisation.office.service.OfficeReadPlatformService import org.apache.fineract.organisation.staff.data.StaffData; import org.apache.fineract.organisation.staff.exception.StaffNotFoundException; import org.apache.fineract.organisation.staff.service.StaffReadPlatformService; -import org.apache.fineract.organisation.teller.data.CashierData; -import org.apache.fineract.organisation.teller.data.CashierTransactionData; -import org.apache.fineract.organisation.teller.data.CashierTransactionTypeTotalsData; -import org.apache.fineract.organisation.teller.data.CashierTransactionsWithSummaryData; -import org.apache.fineract.organisation.teller.data.TellerData; -import org.apache.fineract.organisation.teller.data.TellerJournalData; -import org.apache.fineract.organisation.teller.data.TellerTransactionData; +import org.apache.fineract.organisation.teller.data.*; import org.apache.fineract.organisation.teller.domain.CashierTxnType; import org.apache.fineract.organisation.teller.domain.TellerStatus; import org.apache.fineract.useradministration.domain.AppUser; @@ -60,6 +47,13 @@ import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.math.BigDecimal; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Collection; +import java.util.Date; +import java.util.Iterator; + @Service public class TellerManagementReadPlatformServiceImpl implements TellerManagementReadPlatformService { @@ -482,13 +476,13 @@ public class TellerManagementReadPlatformServiceImpl implements TellerManagement while (itr.hasNext()) { CashierTransactionTypeTotalsData total = itr.next(); if (total != null) { - if (total.getCashierTxnType() == CashierTxnType.ALLOCATE.getId()) { + if (total.getCashierTxnType().equals(CashierTxnType.ALLOCATE.getId())) { allocAmount = total.getCashTotal(); - } else if (total.getCashierTxnType() == CashierTxnType.SETTLE.getId()) { + } else if (total.getCashierTxnType().equals(CashierTxnType.SETTLE.getId())) { settleAmount = total.getCashTotal(); - } else if (total.getCashierTxnType() == CashierTxnType.INWARD_CASH_TXN.getId()) { + } else if (total.getCashierTxnType().equals(CashierTxnType.INWARD_CASH_TXN.getId())) { cashInAmount = total.getCashTotal(); - } else if (total.getCashierTxnType() == CashierTxnType.OUTWARD_CASH_TXN.getId()) { + } else if (total.getCashierTxnType().equals(CashierTxnType.OUTWARD_CASH_TXN.getId())) { cashOutAmount = total.getCashTotal(); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/PortfolioAccountType.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/PortfolioAccountType.java index 0c6b01329..264f16ab8 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/PortfolioAccountType.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/PortfolioAccountType.java @@ -30,7 +30,7 @@ public enum PortfolioAccountType { private final Integer value; private final String code; - private PortfolioAccountType(final Integer value, final String code) { + PortfolioAccountType(final Integer value, final String code) { this.value = value; this.code = code; } @@ -71,10 +71,10 @@ public enum PortfolioAccountType { } public boolean isSavingsAccount() { - return this.value == Integer.valueOf(2); + return this.value.equals(2); } public boolean isLoanAccount() { - return this.value == Integer.valueOf(1); + return this.value.equals(1); } } \ No newline at end of file diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/AccountTransferData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/AccountTransferData.java index 26fa23a9c..e89597e98 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/AccountTransferData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/AccountTransferData.java @@ -18,20 +18,21 @@ */ package org.apache.fineract.portfolio.account.data; -import java.math.BigDecimal; -import java.util.Collection; - import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.organisation.office.data.OfficeData; import org.apache.fineract.portfolio.client.data.ClientData; import org.joda.time.LocalDate; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Collection; + /** * Immutable data object representing a savings account. */ @SuppressWarnings("unused") -public class AccountTransferData { +public class AccountTransferData implements Serializable { private final Long id; private final Boolean reversed; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/PortfolioAccountData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/PortfolioAccountData.java index ab9f52199..08636d317 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/PortfolioAccountData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/data/PortfolioAccountData.java @@ -18,17 +18,18 @@ */ package org.apache.fineract.portfolio.account.data; -import java.math.BigDecimal; - import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.fineract.organisation.monetary.data.CurrencyData; +import java.io.Serializable; +import java.math.BigDecimal; + /** * Immutable data object representing a savings account. */ @SuppressWarnings("unused") -public class PortfolioAccountData { +public class PortfolioAccountData implements Serializable { private final Long id; private final String accountNo; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferStandingInstruction.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferStandingInstruction.java index 2335789c5..566b522ef 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferStandingInstruction.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferStandingInstruction.java @@ -218,13 +218,13 @@ public class AccountTransferStandingInstruction extends AbstractPersistableCusto final MonthDay monthDay = command.extractMonthDayNamed(recurrenceOnMonthDayParamName); final String actualValueEntered = command.stringValueOfParameterNamed(recurrenceOnMonthDayParamName); final Integer dayOfMonthValue = monthDay.getDayOfMonth(); - if (this.recurrenceOnDay != dayOfMonthValue) { + if (!this.recurrenceOnDay.equals(dayOfMonthValue)) { actualChanges.put(recurrenceOnMonthDayParamName, actualValueEntered); this.recurrenceOnDay = dayOfMonthValue; } final Integer monthOfYear = monthDay.getMonthOfYear(); - if (this.recurrenceOnMonth != monthOfYear) { + if (!this.recurrenceOnMonth.equals(monthOfYear)) { actualChanges.put(recurrenceOnMonthDayParamName, actualValueEntered); this.recurrenceOnMonth = monthOfYear; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/data/ShareAccountSummaryData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/data/ShareAccountSummaryData.java index b4c0351ef..ef5f49a9f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/data/ShareAccountSummaryData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/accountdetails/data/ShareAccountSummaryData.java @@ -22,8 +22,10 @@ import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.portfolio.shareaccounts.data.ShareAccountApplicationTimelineData; import org.apache.fineract.portfolio.shareaccounts.data.ShareAccountStatusEnumData; +import java.io.Serializable; + @SuppressWarnings("unused") -public class ShareAccountSummaryData { +public class ShareAccountSummaryData implements Serializable { private final Long id; private final String accountNo; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/accounts/constants/ShareAccountApiConstants.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/accounts/constants/ShareAccountApiConstants.java index 04aeb749c..4cdadcafd 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/accounts/constants/ShareAccountApiConstants.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/accounts/constants/ShareAccountApiConstants.java @@ -19,17 +19,18 @@ package org.apache.fineract.portfolio.accounts.constants; import java.util.Arrays; +import java.util.Collections; import java.util.HashSet; import java.util.Set; public interface ShareAccountApiConstants { - public static final String amountParamName = "amount"; - public static final String dateFormatParamName = "dateFormat"; - public static final String dueAsOfDateParamName = "dueDate"; - public static final String feeIntervalParamName = "feeInterval"; - public static final String feeOnMonthDayParamName = "feeOnMonthDay"; - public static final String localeParamName = "locale"; + String amountParamName = "amount"; + String dateFormatParamName = "dateFormat"; + String dueAsOfDateParamName = "dueDate"; + String feeIntervalParamName = "feeInterval"; + String feeOnMonthDayParamName = "feeOnMonthDay"; + String localeParamName = "locale"; // Command Strings String APPROVE_COMMAND = "approve"; @@ -91,19 +92,21 @@ public interface ShareAccountApiConstants { String note_paramname = "note" ; - public String requesteddate_paramname = "requestedDate" ; + String requesteddate_paramname = "requestedDate" ; - public String additionalshares_paramname = "additionalshares" ; + String additionalshares_paramname = "additionalshares" ; - public String closeddate_paramname = "closedDate"; + String closeddate_paramname = "closedDate"; - public static final String shareEntityType = "share"; + String shareEntityType = "share"; - Set supportedParameters = new HashSet<>(Arrays.asList(locale_paramname, dateformat_paramname, id_paramname,clientid_paramname, productid_paramname, - submitteddate_paramname,approveddate_paramname, externalid_paramname, currency_paramname, digitsafterdecimal_paramname, - inmultiplesof_paramname, requestedshares_paramname,savingsaccountid_paramname,lockinperiod_paramname, - lockperiodfrequencytype_paramname,minimumactiveperiod_paramname, minimumactiveperiodfrequencytype_paramname, - allowdividendcalculationforinactiveclients_paramname, charges_paramname, applicationdate_param, - purchaseddate_paramname,numberofshares_paramname,purchasedprice_paramname)); + Set supportedParameters = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(locale_paramname, + dateformat_paramname, id_paramname,clientid_paramname, productid_paramname, + submitteddate_paramname,approveddate_paramname, externalid_paramname, currency_paramname, + digitsafterdecimal_paramname, inmultiplesof_paramname, requestedshares_paramname, + savingsaccountid_paramname,lockinperiod_paramname, lockperiodfrequencytype_paramname, + minimumactiveperiod_paramname, minimumactiveperiodfrequencytype_paramname, + allowdividendcalculationforinactiveclients_paramname, charges_paramname, applicationdate_param, + purchaseddate_paramname,numberofshares_paramname,purchasedprice_paramname))); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/data/AddressData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/data/AddressData.java index d4de82bbe..9d3802252 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/data/AddressData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/data/AddressData.java @@ -18,14 +18,15 @@ */ package org.apache.fineract.portfolio.address.data; +import org.apache.fineract.infrastructure.codes.data.CodeValueData; + +import java.io.Serializable; import java.math.BigDecimal; import java.util.Collection; import java.util.Date; -import org.apache.fineract.infrastructure.codes.data.CodeValueData; - @SuppressWarnings("unused") -public class AddressData { +public class AddressData implements Serializable { private final Long client_id; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/data/CalendarData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/data/CalendarData.java index 12fa06477..e7f778d52 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/data/CalendarData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/data/CalendarData.java @@ -18,10 +18,6 @@ */ package org.apache.fineract.portfolio.calendar.data; -import java.util.Collection; -import java.util.List; - -import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.portfolio.calendar.domain.CalendarFrequencyType; import org.apache.fineract.portfolio.calendar.domain.CalendarRemindBy; @@ -33,10 +29,15 @@ import org.apache.fineract.portfolio.common.domain.NthDayType; import org.joda.time.LocalDate; import org.joda.time.LocalTime; +import java.io.Serializable; +import java.util.Collection; +import java.util.List; +import java.util.Objects; + /** * Immutable data object representing a Calendar. */ -public class CalendarData { +public class CalendarData implements Serializable { private final Long id; private final Long calendarInstanceId; @@ -491,4 +492,59 @@ public class CalendarData { public EnumOptionData getRepeatsOnNthDayOfMonth() { return this.repeatsOnNthDayOfMonth; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof CalendarData)) return false; + CalendarData that = (CalendarData) o; + return Objects.equals(repeating, that.repeating) && + Objects.equals(id, that.id) && + Objects.equals(calendarInstanceId, that.calendarInstanceId) && + Objects.equals(entityId, that.entityId) && + Objects.equals(entityType, that.entityType) && + Objects.equals(title, that.title) && + Objects.equals(description, that.description) && + Objects.equals(location, that.location) && + Objects.equals(startDate, that.startDate) && + Objects.equals(endDate, that.endDate) && + Objects.equals(meetingTime, that.meetingTime) && + Objects.equals(duration, that.duration) && + Objects.equals(type, that.type) && + Objects.equals(recurrence, that.recurrence) && + Objects.equals(frequency, that.frequency) && + Objects.equals(interval, that.interval) && + Objects.equals(repeatsOnDay, that.repeatsOnDay) && + Objects.equals(repeatsOnNthDayOfMonth, that.repeatsOnNthDayOfMonth) && + Objects.equals(remindBy, that.remindBy) && + Objects.equals(firstReminder, that.firstReminder) && + Objects.equals(secondReminder, that.secondReminder) && + Objects.equals(recurringDates, that.recurringDates) && + Objects.equals(nextTenRecurringDates, that.nextTenRecurringDates) && + Objects.equals(humanReadable, that.humanReadable) && + Objects.equals(recentEligibleMeetingDate, that.recentEligibleMeetingDate) && + Objects.equals(createdDate, that.createdDate) && + Objects.equals(lastUpdatedDate, that.lastUpdatedDate) && + Objects.equals(createdByUserId, that.createdByUserId) && + Objects.equals(createdByUsername, that.createdByUsername) && + Objects.equals(lastUpdatedByUserId, that.lastUpdatedByUserId) && + Objects.equals(lastUpdatedByUsername, that.lastUpdatedByUsername) && + Objects.equals(repeatsOnDayOfMonth, that.repeatsOnDayOfMonth) && + Objects.equals(entityTypeOptions, that.entityTypeOptions) && + Objects.equals(calendarTypeOptions, that.calendarTypeOptions) && + Objects.equals(remindByOptions, that.remindByOptions) && + Objects.equals(frequencyOptions, that.frequencyOptions) && + Objects.equals(repeatsOnDayOptions, that.repeatsOnDayOptions) && + Objects.equals(frequencyNthDayTypeOptions, that.frequencyNthDayTypeOptions) && + Objects.equals(rowIndex, that.rowIndex) && + Objects.equals(dateFormat, that.dateFormat) && + Objects.equals(locale, that.locale) && + Objects.equals(centerId, that.centerId) && + Objects.equals(typeId, that.typeId); + } + + @Override + public int hashCode() { + return Objects.hash(id, calendarInstanceId, entityId, entityType, title, description, location, startDate, endDate, meetingTime, duration, type, repeating, recurrence, frequency, interval, repeatsOnDay, repeatsOnNthDayOfMonth, remindBy, firstReminder, secondReminder, recurringDates, nextTenRecurringDates, humanReadable, recentEligibleMeetingDate, createdDate, lastUpdatedDate, createdByUserId, createdByUsername, lastUpdatedByUserId, lastUpdatedByUsername, repeatsOnDayOfMonth, entityTypeOptions, calendarTypeOptions, remindByOptions, frequencyOptions, repeatsOnDayOptions, frequencyNthDayTypeOptions, rowIndex, dateFormat, locale, centerId, typeId); + } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/Calendar.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/Calendar.java index f2fa718c5..63ca03b6f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/Calendar.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/calendar/domain/Calendar.java @@ -427,7 +427,7 @@ public class Calendar extends AbstractAuditableCustom { final Integer interval, final Integer repeatsOnDay, final Integer repeatsOnNthDay) { final Map actualChanges = new LinkedHashMap<>(9); - if (calendarStartDate != null & this.startDate != null) { + if (calendarStartDate != null && this.startDate != null) { if (!calendarStartDate.equals(this.getStartDateLocalDate())) { actualChanges.put("startDate", calendarStartDate); this.startDate = calendarStartDate.toDate(); @@ -609,12 +609,12 @@ public class Calendar extends AbstractAuditableCustom { } } if (frequencyType.isMonthly()) { - if (repeatsOnNthDayOfMonth != null && (repeatsOnDay == null || repeatsOnDay == CalendarWeekDaysType.INVALID.getValue())) { + if (repeatsOnNthDayOfMonth != null && (repeatsOnDay == null || repeatsOnDay.equals(CalendarWeekDaysType.INVALID.getValue()))) { if (repeatsOnNthDayOfMonth >= -1 && repeatsOnNthDayOfMonth <= 28) { recurrenceBuilder.append(";BYMONTHDAY="); recurrenceBuilder.append(repeatsOnNthDayOfMonth); } - } else if (repeatsOnNthDayOfMonth != null && repeatsOnDay != null && repeatsOnDay != CalendarWeekDaysType.INVALID.getValue()) { + } else if (repeatsOnNthDayOfMonth != null && repeatsOnDay != null && !repeatsOnDay.equals(CalendarWeekDaysType.INVALID.getValue())) { final NthDayType nthDay = NthDayType.fromInt(repeatsOnNthDayOfMonth); if (!nthDay.isInvalid()) { recurrenceBuilder.append(";BYSETPOS="); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java index 19c46b35d..ff8b5388a 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java @@ -19,10 +19,7 @@ package org.apache.fineract.portfolio.charge.domain; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import javax.persistence.Column; import javax.persistence.Entity; @@ -210,24 +207,6 @@ public class Charge extends AbstractPersistableCustom { if (!dataValidationErrors.isEmpty()) { throw new PlatformApiDataValidationException(dataValidationErrors); } } - @Override - public boolean equals(final Object obj) { - if (obj == null) { return false; } - if (obj == this) { return true; } - if (obj.getClass() != getClass()) { return false; } - final LoanCharge rhs = (LoanCharge) obj; - return new EqualsBuilder().appendSuper(super.equals(obj)) // - .append(getId(), rhs.getId()) // - .isEquals(); - } - - @Override - public int hashCode() { - return new HashCodeBuilder(3, 5) // - .append(getId()) // - .toHashCode(); - } - public String getName() { return this.name; } @@ -428,14 +407,14 @@ public class Charge extends AbstractPersistableCustom { final MonthDay monthDay = command.extractMonthDayNamed("feeOnMonthDay"); final String actualValueEntered = command.stringValueOfParameterNamed("feeOnMonthDay"); final Integer dayOfMonthValue = monthDay.getDayOfMonth(); - if (this.feeOnDay != dayOfMonthValue) { + if (!this.feeOnDay.equals(dayOfMonthValue)) { actualChanges.put("feeOnMonthDay", actualValueEntered); actualChanges.put("locale", localeAsInput); this.feeOnDay = dayOfMonthValue; } final Integer monthOfYear = monthDay.getMonthOfYear(); - if (this.feeOnMonth != monthOfYear) { + if (!this.feeOnMonth.equals(monthOfYear)) { actualChanges.put("feeOnMonthDay", actualValueEntered); actualChanges.put("locale", localeAsInput); this.feeOnMonth = monthOfYear; @@ -621,4 +600,36 @@ public class Charge extends AbstractPersistableCustom { public void setTaxGroup(TaxGroup taxGroup) { this.taxGroup = taxGroup; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Charge)) return false; + Charge charge = (Charge) o; + return Objects.equals(name, charge.name) && + Objects.equals(amount, charge.amount) && + Objects.equals(currencyCode, charge.currencyCode) && + Objects.equals(chargeAppliesTo, charge.chargeAppliesTo) && + Objects.equals(chargeTimeType, charge.chargeTimeType) && + Objects.equals(chargeCalculation, charge.chargeCalculation) && + Objects.equals(chargePaymentMode, charge.chargePaymentMode) && + Objects.equals(feeOnDay, charge.feeOnDay) && + Objects.equals(feeInterval, charge.feeInterval) && + Objects.equals(feeOnMonth, charge.feeOnMonth) && + Objects.equals(penalty, charge.penalty) && + Objects.equals(active, charge.active) && + Objects.equals(deleted, charge.deleted) && + Objects.equals(minCap, charge.minCap) && + Objects.equals(maxCap, charge.maxCap) && + Objects.equals(feeFrequency, charge.feeFrequency) && + Objects.equals(account, charge.account) && + Objects.equals(taxGroup, charge.taxGroup); + + } + + @Override + public int hashCode() { + return Objects.hash(name, amount, currencyCode, chargeAppliesTo, chargeTimeType, chargeCalculation, + chargePaymentMode, feeOnDay, feeInterval, feeOnMonth, penalty, active, deleted, minCap, maxCap, feeFrequency, account, taxGroup); + } } \ No newline at end of file diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeReadPlatformServiceImpl.java index f3ca619bd..c53b24c7f 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/charge/service/ChargeReadPlatformServiceImpl.java @@ -18,14 +18,6 @@ */ package org.apache.fineract.portfolio.charge.service; -import java.math.BigDecimal; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import org.apache.fineract.accounting.common.AccountingDropdownReadPlatformService; import org.apache.fineract.accounting.glaccount.data.GLAccountData; import org.apache.fineract.infrastructure.core.data.EnumOptionData; @@ -52,6 +44,14 @@ import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * @author vishwas * @@ -225,6 +225,7 @@ public class ChargeReadPlatformServiceImpl implements ChargeReadPlatformService sb.append(excludeChargeTimes[i].getValue()); } excludeClause = excludeClause.append(" and c.charge_time_enum not in(" + sb.toString() + ") "); + excludeClause.append(" "); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientData.java index 14ab255bf..7acedf348 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientData.java @@ -18,9 +18,6 @@ */ package org.apache.fineract.portfolio.client.data; -import java.util.Collection; -import java.util.List; - import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.builder.CompareToBuilder; import org.apache.commons.lang.builder.EqualsBuilder; @@ -36,11 +33,15 @@ import org.apache.fineract.portfolio.savings.data.SavingsAccountData; import org.apache.fineract.portfolio.savings.data.SavingsProductData; import org.joda.time.LocalDate; +import java.io.Serializable; +import java.util.Collection; +import java.util.List; + /** * Immutable data object representing client data. */ @SuppressWarnings("unused") -final public class ClientData implements Comparable { +final public class ClientData implements Comparable, Serializable { private final Long id; private final String accountNo; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientFamilyMembersData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientFamilyMembersData.java index 305ba4b99..a5e127f5a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientFamilyMembersData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientFamilyMembersData.java @@ -19,12 +19,13 @@ package org.apache.fineract.portfolio.client.data; -import java.util.Collection; - import org.apache.fineract.infrastructure.codes.data.CodeValueData; import org.joda.time.LocalDate; -public class ClientFamilyMembersData { +import java.io.Serializable; +import java.util.Collection; + +public class ClientFamilyMembersData implements Serializable { private final Long id; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientNonPersonData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientNonPersonData.java index f81c92158..e3b628268 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientNonPersonData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientNonPersonData.java @@ -18,15 +18,16 @@ */ package org.apache.fineract.portfolio.client.data; -import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants; import org.apache.fineract.infrastructure.codes.data.CodeValueData; import org.joda.time.LocalDate; +import java.io.Serializable; + /** * Immutable data object representing the ClientNonPerson */ @SuppressWarnings("unused") -public class ClientNonPersonData { +public class ClientNonPersonData implements Serializable { private final CodeValueData constitution; private final String incorpNumber; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientTimelineData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientTimelineData.java index 2189ffd26..99c3c035c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientTimelineData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/data/ClientTimelineData.java @@ -18,18 +18,16 @@ */ package org.apache.fineract.portfolio.client.data; -import org.apache.fineract.organisation.monetary.data.CurrencyData; -import org.apache.fineract.portfolio.loanaccount.data.RepaymentScheduleRelatedLoanData; import org.joda.time.LocalDate; -import java.math.BigDecimal; +import java.io.Serializable; /** * Immutable data object represent the important time-line events of a loan * application and loan. */ @SuppressWarnings("unused") -public class ClientTimelineData { +public class ClientTimelineData implements Serializable { private final LocalDate submittedOnDate; private final String submittedByUsername; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateData.java index ec64b03e0..7116a0c59 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRateData.java @@ -18,15 +18,16 @@ */ package org.apache.fineract.portfolio.floatingrates.data; -import java.util.List; - import org.apache.commons.lang.builder.CompareToBuilder; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.joda.time.LocalDate; -public class FloatingRateData implements Comparable { +import java.io.Serializable; +import java.util.List; + +public class FloatingRateData implements Comparable , Serializable { private final Long id; private final String name; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodData.java index d7b03b5fb..a9edce031 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/floatingrates/data/FloatingRatePeriodData.java @@ -18,15 +18,16 @@ */ package org.apache.fineract.portfolio.floatingrates.data; -import java.math.BigDecimal; - import org.apache.commons.lang.builder.CompareToBuilder; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.joda.time.LocalDate; +import java.io.Serializable; +import java.math.BigDecimal; + public class FloatingRatePeriodData implements - Comparable { + Comparable, Serializable { private Long id; private LocalDate fromDate; 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 74b017d1c..32faa0115 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 @@ -18,16 +18,9 @@ */ package org.apache.fineract.portfolio.floatingrates.serialization; -import java.lang.reflect.Type; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.reflect.TypeToken; import org.apache.fineract.infrastructure.core.data.ApiParameterError; import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; @@ -39,9 +32,9 @@ import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.reflect.TypeToken; +import java.lang.reflect.Type; +import java.math.BigDecimal; +import java.util.*; @Component public class FloatingRateDataValidator { @@ -258,9 +251,7 @@ public class FloatingRateDataValidator { baseDataValidator.reset().parameter("isBaseLendingRate") .trueOrFalseRequired(false); } else if (isBaseLendingRate) { - if (baseLendingRate != null - && baseLendingRate.getId() != floatingRateForUpdate - .getId()) { + if (baseLendingRate != null && !baseLendingRate.getId().equals(floatingRateForUpdate.getId())) { baseDataValidator .reset() .parameter("isBaseLendingRate") @@ -289,9 +280,7 @@ public class FloatingRateDataValidator { isActive = floatingRateForUpdate.isActive(); } - if(baseLendingRate != null - && baseLendingRate.getId() == floatingRateForUpdate - .getId()){ + if(baseLendingRate != null && baseLendingRate.getId().equals(floatingRateForUpdate.getId())){ if(!isBaseLendingRate || !isActive){ isBLRModifiedAsNonBLR = true; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/CenterData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/CenterData.java index 7369a206f..c57dd9691 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/CenterData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/CenterData.java @@ -18,11 +18,6 @@ */ package org.apache.fineract.portfolio.group.data; -import java.math.BigDecimal; -import java.util.Collection; -import java.util.List; - -import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants; import org.apache.fineract.infrastructure.codes.data.CodeValueData; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.dataqueries.data.DatatableData; @@ -31,10 +26,16 @@ import org.apache.fineract.organisation.staff.data.StaffData; import org.apache.fineract.portfolio.calendar.data.CalendarData; import org.joda.time.LocalDate; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Collection; +import java.util.List; +import java.util.Objects; + /** * Immutable data object representing groups. */ -public class CenterData { +public class CenterData implements Serializable { private final Long id; private String accountNo; @@ -266,4 +267,44 @@ public class CenterData { public void setDatatables(final List datatables) { this.datatables = datatables; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof CenterData)) return false; + CenterData that = (CenterData) o; + return Objects.equals(active, that.active) && + Objects.equals(id, that.id) && + Objects.equals(accountNo, that.accountNo) && + Objects.equals(name, that.name) && + Objects.equals(externalId, that.externalId) && + Objects.equals(officeId, that.officeId) && + Objects.equals(officeName, that.officeName) && + Objects.equals(staffId, that.staffId) && + Objects.equals(staffName, that.staffName) && + Objects.equals(hierarchy, that.hierarchy) && + Objects.equals(status, that.status) && + Objects.equals(activationDate, that.activationDate) && + Objects.equals(timeline, that.timeline) && + Objects.equals(groupMembers, that.groupMembers) && + Objects.equals(groupMembersOptions, that.groupMembersOptions) && + Objects.equals(collectionMeetingCalendar, that.collectionMeetingCalendar) && + Objects.equals(closureReasons, that.closureReasons) && + Objects.equals(officeOptions, that.officeOptions) && + Objects.equals(staffOptions, that.staffOptions) && + Objects.equals(totalCollected, that.totalCollected) && + Objects.equals(totalOverdue, that.totalOverdue) && + Objects.equals(totaldue, that.totaldue) && + Objects.equals(installmentDue, that.installmentDue) && + Objects.equals(datatables, that.datatables) && + Objects.equals(rowIndex, that.rowIndex) && + Objects.equals(dateFormat, that.dateFormat) && + Objects.equals(locale, that.locale) && + Objects.equals(submittedOnDate, that.submittedOnDate); + } + + @Override + public int hashCode() { + return Objects.hash(id, accountNo, name, externalId, officeId, officeName, staffId, staffName, hierarchy, status, active, activationDate, timeline, groupMembers, groupMembersOptions, collectionMeetingCalendar, closureReasons, officeOptions, staffOptions, totalCollected, totalOverdue, totaldue, installmentDue, datatables, rowIndex, dateFormat, locale, submittedOnDate); + } } \ No newline at end of file diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupGeneralData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupGeneralData.java index 5781bb8d4..6d5c4e3d3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupGeneralData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupGeneralData.java @@ -18,10 +18,6 @@ */ package org.apache.fineract.portfolio.group.data; -import java.util.Collection; -import java.util.List; - -import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants; import org.apache.fineract.infrastructure.codes.data.CodeValueData; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.dataqueries.data.DatatableData; @@ -31,11 +27,16 @@ import org.apache.fineract.portfolio.calendar.data.CalendarData; import org.apache.fineract.portfolio.client.data.ClientData; import org.joda.time.LocalDate; +import java.io.Serializable; +import java.util.Collection; +import java.util.List; +import java.util.Objects; + /** * Immutable data object representing a general group (so may or may not have a * parent). */ -public class GroupGeneralData { +public class GroupGeneralData implements Serializable { private final Long id; private final String accountNo; @@ -363,4 +364,49 @@ public class GroupGeneralData { public void setDatatables(final List datatables) { this.datatables = datatables; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof GroupGeneralData)) return false; + GroupGeneralData that = (GroupGeneralData) o; + return Objects.equals(id, that.id) && + Objects.equals(accountNo, that.accountNo) && + Objects.equals(name, that.name) && + Objects.equals(externalId, that.externalId) && + Objects.equals(status, that.status) && + Objects.equals(active, that.active) && + Objects.equals(activationDate, that.activationDate) && + Objects.equals(officeId, that.officeId) && + Objects.equals(officeName, that.officeName) && + Objects.equals(centerId, that.centerId) && + Objects.equals(centerName, that.centerName) && + Objects.equals(staffId, that.staffId) && + Objects.equals(staffName, that.staffName) && + Objects.equals(hierarchy, that.hierarchy) && + Objects.equals(groupLevel, that.groupLevel) && + Objects.equals(clientMembers, that.clientMembers) && + Objects.equals(activeClientMembers, that.activeClientMembers) && + Objects.equals(groupRoles, that.groupRoles) && + Objects.equals(calendarsData, that.calendarsData) && + Objects.equals(collectionMeetingCalendar, that.collectionMeetingCalendar) && + Objects.equals(centerOptions, that.centerOptions) && + Objects.equals(officeOptions, that.officeOptions) && + Objects.equals(staffOptions, that.staffOptions) && + Objects.equals(clientOptions, that.clientOptions) && + Objects.equals(availableRoles, that.availableRoles) && + Objects.equals(selectedRole, that.selectedRole) && + Objects.equals(closureReasons, that.closureReasons) && + Objects.equals(timeline, that.timeline) && + Objects.equals(datatables, that.datatables) && + Objects.equals(rowIndex, that.rowIndex) && + Objects.equals(dateFormat, that.dateFormat) && + Objects.equals(locale, that.locale) && + Objects.equals(submittedOnDate, that.submittedOnDate); + } + + @Override + public int hashCode() { + return Objects.hash(id, accountNo, name, externalId, status, active, activationDate, officeId, officeName, centerId, centerName, staffId, staffName, hierarchy, groupLevel, clientMembers, activeClientMembers, groupRoles, calendarsData, collectionMeetingCalendar, centerOptions, officeOptions, staffOptions, clientOptions, availableRoles, selectedRole, closureReasons, timeline, datatables, rowIndex, dateFormat, locale, submittedOnDate); + } } \ No newline at end of file diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupRoleData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupRoleData.java index 337924c13..b3be59fe4 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupRoleData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupRoleData.java @@ -20,7 +20,10 @@ package org.apache.fineract.portfolio.group.data; import org.apache.fineract.infrastructure.codes.data.CodeValueData; -public class GroupRoleData { +import java.io.Serializable; +import java.util.Objects; + +public class GroupRoleData implements Serializable { @SuppressWarnings("unused") private final Long id; @@ -42,4 +45,19 @@ public class GroupRoleData { this.clientName = clientName; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof GroupRoleData)) return false; + GroupRoleData that = (GroupRoleData) o; + return Objects.equals(id, that.id) && + Objects.equals(role, that.role) && + Objects.equals(clientId, that.clientId) && + Objects.equals(clientName, that.clientName); + } + + @Override + public int hashCode() { + return Objects.hash(id, role, clientId, clientName); + } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupSummary.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupSummary.java index cff323dae..71a874640 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupSummary.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupSummary.java @@ -18,10 +18,10 @@ */ package org.apache.fineract.portfolio.group.data; -import java.util.Collection; - import org.apache.fineract.organisation.monetary.data.MoneyData; +import java.util.Collection; + public class GroupSummary { private final Long totalActiveClients; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupTimelineData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupTimelineData.java index 8abde9cc4..2726d86a3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupTimelineData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/data/GroupTimelineData.java @@ -20,13 +20,16 @@ package org.apache.fineract.portfolio.group.data; import org.joda.time.LocalDate; +import java.io.Serializable; +import java.util.Objects; + /** * Immutable data object represent the important time-line events of a * group/center. * */ @SuppressWarnings("unused") -public class GroupTimelineData { +public class GroupTimelineData implements Serializable { private final LocalDate submittedOnDate; private final String submittedByUsername; @@ -64,4 +67,27 @@ public class GroupTimelineData { } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof GroupTimelineData)) return false; + GroupTimelineData that = (GroupTimelineData) o; + return Objects.equals(submittedOnDate, that.submittedOnDate) && + Objects.equals(submittedByUsername, that.submittedByUsername) && + Objects.equals(submittedByFirstname, that.submittedByFirstname) && + Objects.equals(submittedByLastname, that.submittedByLastname) && + Objects.equals(activatedOnDate, that.activatedOnDate) && + Objects.equals(activatedByUsername, that.activatedByUsername) && + Objects.equals(activatedByFirstname, that.activatedByFirstname) && + Objects.equals(activatedByLastname, that.activatedByLastname) && + Objects.equals(closedOnDate, that.closedOnDate) && + Objects.equals(closedByUsername, that.closedByUsername) && + Objects.equals(closedByFirstname, that.closedByFirstname) && + Objects.equals(closedByLastname, that.closedByLastname); + } + + @Override + public int hashCode() { + return Objects.hash(submittedOnDate, submittedByUsername, submittedByFirstname, submittedByLastname, activatedOnDate, activatedByUsername, activatedByFirstname, activatedByLastname, closedOnDate, closedByUsername, closedByFirstname, closedByLastname); + } } \ No newline at end of file diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/GroupRepositoryWrapper.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/GroupRepositoryWrapper.java index d74369e6c..d25989174 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/GroupRepositoryWrapper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/GroupRepositoryWrapper.java @@ -18,14 +18,14 @@ */ package org.apache.fineract.portfolio.group.domain; -import java.util.Date; - import org.apache.fineract.organisation.office.domain.Office; import org.apache.fineract.portfolio.group.exception.GroupNotFoundException; import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Date; + /** *

* Wrapper for {@link GroupRepository} that adds NULL checking and Error @@ -49,7 +49,7 @@ public class GroupRepositoryWrapper { public Group findByOfficeWithNotFoundDetection(final Long id, final Office office) { final Group group = findOneWithNotFoundDetection(id); - if (group.getOffice().getId() != office.getId()) { throw new GroupNotFoundException(id); } + if (!group.getOffice().getId().equals(office.getId())) { throw new GroupNotFoundException(id); } return group; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/GroupTypes.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/GroupTypes.java index 28ed8cbc4..20331f0b1 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/GroupTypes.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/GroupTypes.java @@ -58,7 +58,7 @@ public enum GroupTypes { } public static GroupTypes fromInt(final int i) { - final GroupTypes type = intToEnumMap.get(Integer.valueOf(i)); + final GroupTypes type = intToEnumMap.get(Integer.toUnsignedLong(i)); return type; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/GroupingTypeStatus.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/GroupingTypeStatus.java index 2d9ab4dc7..a50142e1a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/GroupingTypeStatus.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/group/domain/GroupingTypeStatus.java @@ -43,6 +43,12 @@ public enum GroupingTypeStatus { case 300: enumeration = GroupingTypeStatus.ACTIVE; break; + case 303: + enumeration = GroupingTypeStatus.TRANSFER_IN_PROGRESS; + break; + case 304: + enumeration = GroupingTypeStatus.TRANSFER_ON_HOLD; + break; case 600: enumeration = GroupingTypeStatus.CLOSED; break; @@ -50,7 +56,7 @@ public enum GroupingTypeStatus { return enumeration; } - private GroupingTypeStatus(final Integer value, final String code) { + GroupingTypeStatus(final Integer value, final String code) { this.value = value; this.code = code; } @@ -80,11 +86,11 @@ public enum GroupingTypeStatus { } public boolean isTransferInProgress() { - return isTransferInProgress(); + return this.value.equals(GroupingTypeStatus.TRANSFER_IN_PROGRESS.getValue()); } public boolean isTransferOnHold() { - return isTransferOnHold(); + return this.value.equals(GroupingTypeStatus.TRANSFER_ON_HOLD.getValue()); } public boolean isUnderTransfer() { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTransactionData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTransactionData.java index 7b6501769..d3c68adc6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTransactionData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/data/LoanTransactionData.java @@ -319,7 +319,7 @@ public class LoanTransactionData { } public boolean isNotDisbursement() { - return Integer.valueOf(1).equals(this.type.id()); + return type.id() == 1; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java index c7b6cc3ca..a8e386e58 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java @@ -18,40 +18,12 @@ */ package org.apache.fineract.portfolio.loanaccount.domain; -import java.math.BigDecimal; -import java.math.MathContext; -import java.math.RoundingMode; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.ListIterator; -import java.util.Locale; -import java.util.Map; -import java.util.Set; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Embedded; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; -import javax.persistence.OneToOne; -import javax.persistence.OrderBy; -import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; -import javax.persistence.Transient; -import javax.persistence.UniqueConstraint; -import javax.persistence.Version; +import net.sf.ehcache.util.FindBugsSuppressWarnings; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.StringUtils; @@ -102,34 +74,10 @@ import org.apache.fineract.portfolio.loanaccount.data.HolidayDetailDTO; import org.apache.fineract.portfolio.loanaccount.data.LoanTermVariationsData; import org.apache.fineract.portfolio.loanaccount.data.ScheduleGeneratorDTO; import org.apache.fineract.portfolio.loanaccount.domain.transactionprocessor.LoanRepaymentScheduleTransactionProcessor; -import org.apache.fineract.portfolio.loanaccount.exception.ExceedingTrancheCountException; -import org.apache.fineract.portfolio.loanaccount.exception.InvalidLoanStateTransitionException; -import org.apache.fineract.portfolio.loanaccount.exception.InvalidLoanTransactionTypeException; -import org.apache.fineract.portfolio.loanaccount.exception.InvalidRefundDateException; -import org.apache.fineract.portfolio.loanaccount.exception.LoanApplicationDateException; -import org.apache.fineract.portfolio.loanaccount.exception.LoanDisbursalException; -import org.apache.fineract.portfolio.loanaccount.exception.LoanForeclosureException; -import org.apache.fineract.portfolio.loanaccount.exception.LoanOfficerAssignmentDateException; -import org.apache.fineract.portfolio.loanaccount.exception.LoanOfficerAssignmentException; -import org.apache.fineract.portfolio.loanaccount.exception.LoanOfficerUnassignmentDateException; -import org.apache.fineract.portfolio.loanaccount.exception.MultiDisbursementDataRequiredException; -import org.apache.fineract.portfolio.loanaccount.exception.UndoLastTrancheDisbursementException; +import org.apache.fineract.portfolio.loanaccount.exception.*; import org.apache.fineract.portfolio.loanaccount.loanschedule.data.LoanScheduleDTO; -import org.apache.fineract.portfolio.loanaccount.loanschedule.data.LoanScheduleParams; -import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.AprCalculator; -import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanApplicationTerms; -import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleGenerator; -import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleModel; -import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleModelPeriod; -import org.apache.fineract.portfolio.loanproduct.domain.AmortizationMethod; -import org.apache.fineract.portfolio.loanproduct.domain.InterestCalculationPeriodMethod; -import org.apache.fineract.portfolio.loanproduct.domain.InterestMethod; -import org.apache.fineract.portfolio.loanproduct.domain.InterestRecalculationCompoundingMethod; -import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct; -import org.apache.fineract.portfolio.loanproduct.domain.LoanProductRelatedDetail; -import org.apache.fineract.portfolio.loanproduct.domain.LoanRescheduleStrategyMethod; -import org.apache.fineract.portfolio.loanproduct.domain.LoanTransactionProcessingStrategy; -import org.apache.fineract.portfolio.loanproduct.domain.RecalculationFrequencyType; +import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.*; +import org.apache.fineract.portfolio.loanproduct.domain.*; import org.apache.fineract.portfolio.loanproduct.service.LoanEnumerations; import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail; import org.apache.fineract.useradministration.domain.AppUser; @@ -140,10 +88,11 @@ import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import org.springframework.stereotype.Component; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; +import javax.persistence.*; +import java.math.BigDecimal; +import java.math.MathContext; +import java.math.RoundingMode; +import java.util.*; @Entity @Component @@ -785,6 +734,9 @@ public class Loan extends AbstractPersistableCustom { updateLoanSummaryDerivedFields(); } + // TODO Fix this correctly... + // See this review: https://github.com/apache/fineract/pull/670/files/0409af3903d350afe43ef4837e4d915ccbe14285#r357920211 + @FindBugsSuppressWarnings("GC_UNRELATED_TYPES") private void removeOrModifyTransactionAssociatedWithLoanChargeIfDueAtDisbursement(final LoanCharge loanCharge) { if (loanCharge.isDueAtDisbursement()) { LoanTransaction transactionToRemove = null; @@ -792,19 +744,18 @@ public class Loan extends AbstractPersistableCustom { for (final LoanTransaction transaction : transactions) { if (transaction.isRepaymentAtDisbursement() && transaction.getLoanChargesPaid().contains(loanCharge)) { - final MonetaryCurrency currency = loanCurrency(); - final Money chargeAmount = Money.of(currency, loanCharge.amount()); - if (transaction.isGreaterThan(chargeAmount)) { - final Money principalPortion = Money.zero(currency); - final Money interestPortion = Money.zero(currency); - final Money penaltychargesPortion = Money.zero(currency); + final MonetaryCurrency currency = loanCurrency(); + final Money chargeAmount = Money.of(currency, loanCharge.amount()); + if (transaction.isGreaterThan(chargeAmount)) { + final Money principalPortion = Money.zero(currency); + final Money interestPortion = Money.zero(currency); + final Money penaltychargesPortion = Money.zero(currency); - final Money feeChargesPortion = chargeAmount; - transaction.updateComponentsAndTotal(principalPortion, interestPortion, feeChargesPortion, penaltychargesPortion); - } else { - transactionToRemove = transaction; + transaction.updateComponentsAndTotal(principalPortion, interestPortion, chargeAmount, penaltychargesPortion); + } else { + transactionToRemove = transaction; + } } - } } if (transactionToRemove != null) { @@ -2687,10 +2638,10 @@ public class Loan extends AbstractPersistableCustom { final Integer installmentNumber = null; for (final LoanCharge charge : charges()) { Date actualDisbursementDate = getActualDisbursementDate(charge); - if ((charge.getCharge().getChargeTimeType() == ChargeTimeType.DISBURSEMENT.getValue() + if ((charge.getCharge().getChargeTimeType().equals(ChargeTimeType.DISBURSEMENT.getValue()) && disbursedOn.equals(new LocalDate(actualDisbursementDate)) && actualDisbursementDate != null && !charge.isWaived() && !charge .isFullyPaid()) - || (charge.getCharge().getChargeTimeType() == ChargeTimeType.TRANCHE_DISBURSEMENT.getValue() + || (charge.getCharge().getChargeTimeType().equals(ChargeTimeType.TRANCHE_DISBURSEMENT.getValue()) && disbursedOn.equals(new LocalDate(actualDisbursementDate)) && actualDisbursementDate != null && !charge.isWaived() && !charge.isFullyPaid())) { if (totalFeeChargesDueAtDisbursement.isGreaterThanZero() && !charge.getChargePaymentMode().isPaymentModeAccountTransfer()) { @@ -2768,6 +2719,8 @@ public class Loan extends AbstractPersistableCustom { return chargesPayment; } + // TODO FIX THIS + @FindBugsSuppressWarnings("EC_UNRELATED_TYPES") // see this review: https://github.com/apache/fineract/pull/670/files/0409af3903d350afe43ef4837e4d915ccbe14285#r357920364 public Map undoDisbursal(final ScheduleGeneratorDTO scheduleGeneratorDTO, final List existingTransactionIds, final List existingReversedTransactionIds, AppUser currentUser) { @@ -2787,7 +2740,8 @@ public class Loan extends AbstractPersistableCustom { final boolean isScheduleRegenerateRequired = isRepaymentScheduleRegenerationRequiredForDisbursement(actualDisbursementDate); this.actualDisbursementDate = null; this.disbursedBy = null; - boolean isDisbursedAmountChanged = !this.approvedPrincipal.equals(this.loanRepaymentScheduleDetail.getPrincipal()); + boolean isDisbursedAmountChanged = + !this.approvedPrincipal.equals(this.loanRepaymentScheduleDetail.getPrincipal()); this.loanRepaymentScheduleDetail.setPrincipal(this.approvedPrincipal); if (this.loanProduct.isMultiDisburseLoan()) { for (final LoanDisbursementDetails details : this.disbursementDetails) { @@ -6092,7 +6046,7 @@ public class Loan extends AbstractPersistableCustom { public BigDecimal getDerivedAmountForCharge(final LoanCharge loanCharge) { BigDecimal amount = BigDecimal.ZERO; - if (isMultiDisburmentLoan() && (loanCharge.getCharge().getChargeTimeType() == ChargeTimeType.DISBURSEMENT.getValue())) { + if (isMultiDisburmentLoan() && (loanCharge.getCharge().getChargeTimeType().equals(ChargeTimeType.DISBURSEMENT.getValue()))) { amount = getApprovedPrincipal(); } else { // If charge type is specified due date and loan is multi disburment diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanDisbursementDetails.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanDisbursementDetails.java index d19b60f84..d18bff00c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanDisbursementDetails.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanDisbursementDetails.java @@ -20,6 +20,7 @@ package org.apache.fineract.portfolio.loanaccount.domain; import java.math.BigDecimal; import java.util.Date; +import java.util.Objects; import javax.persistence.Column; import javax.persistence.Entity; @@ -75,6 +76,11 @@ public class LoanDisbursementDetails extends AbstractPersistableCustom { return false; } + @Override + public int hashCode() { + return Objects.hash(expectedDisbursementDate, principal); + } + public void copy(final LoanDisbursementDetails disbursementDetails) { this.principal = disbursementDetails.principal; this.expectedDisbursementDate = disbursementDetails.expectedDisbursementDate; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/GuarantorConstants.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/GuarantorConstants.java index 886bf7167..067b34e63 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/GuarantorConstants.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/GuarantorConstants.java @@ -28,7 +28,7 @@ public class GuarantorConstants { /*** * Enum of all parameters passed in while creating/updating a loan product ***/ - public static enum GUARANTOR_JSON_INPUT_PARAMS { + public enum GUARANTOR_JSON_INPUT_PARAMS { LOAN_ID("loanId"), CLIENT_RELATIONSHIP_TYPE_ID("clientRelationshipTypeId"), GUARANTOR_TYPE_ID("guarantorTypeId"), ENTITY_ID( "entityId"), FIRSTNAME("firstname"), LASTNAME("lastname"), ADDRESS_LINE_1("addressLine1"), ADDRESS_LINE_2("addressLine2"), CITY( "city"), STATE("state"), ZIP("zip"), COUNTRY("country"), MOBILE_NUMBER("mobileNumber"), PHONE_NUMBER("housePhoneNumber"), COMMENT( @@ -36,7 +36,7 @@ public class GuarantorConstants { private final String value; - private GUARANTOR_JSON_INPUT_PARAMS(final String value) { + GUARANTOR_JSON_INPUT_PARAMS(final String value) { this.value = value; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/Guarantor.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/Guarantor.java index 730f60af9..a98a9da27 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/Guarantor.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/Guarantor.java @@ -18,29 +18,15 @@ */ package org.apache.fineract.portfolio.loanaccount.guarantor.domain; -import java.util.ArrayList; -import java.util.Date; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; - import org.apache.commons.lang.StringUtils; import org.apache.fineract.infrastructure.codes.domain.CodeValue; import org.apache.fineract.infrastructure.core.api.JsonCommand; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.guarantor.GuarantorConstants.GUARANTOR_JSON_INPUT_PARAMS; -import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; + +import javax.persistence.*; +import java.util.*; @Entity @Table(name = "m_guarantor") @@ -208,7 +194,7 @@ public class Guarantor extends AbstractPersistableCustom { newValue = command.integerValueOfParameterNamed(paramName); } actualChanges.put(paramName, newValue); - propertyToBeUpdated = newValue; + //propertyToBeUpdated = newValue; // now update actual property if (paramName.equals(GUARANTOR_JSON_INPUT_PARAMS.GUARANTOR_TYPE_ID.getValue())) { @@ -222,7 +208,7 @@ public class Guarantor extends AbstractPersistableCustom { if (command.isChangeInStringParameterNamed(paramName, propertyToBeUpdated)) { final String newValue = command.stringValueOfParameterNamed(paramName); actualChanges.put(paramName, newValue); - propertyToBeUpdated = newValue; + //propertyToBeUpdated = newValue; // now update actual property if (paramName.equals(GUARANTOR_JSON_INPUT_PARAMS.FIRSTNAME.getValue())) { @@ -256,7 +242,7 @@ public class Guarantor extends AbstractPersistableCustom { if (command.isChangeInDateParameterNamed(paramName, propertyToBeUpdated)) { final Date newValue = command.DateValueOfParameterNamed(paramName); actualChanges.put(paramName, newValue); - propertyToBeUpdated = newValue; + //propertyToBeUpdated = newValue; // now update actual property if (paramName.equals(GUARANTOR_JSON_INPUT_PARAMS.DATE_OF_BIRTH.getValue())) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorWritePlatformServiceJpaRepositoryIImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorWritePlatformServiceJpaRepositoryIImpl.java index fd6a63495..5bc70a335 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorWritePlatformServiceJpaRepositoryIImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/service/GuarantorWritePlatformServiceJpaRepositoryIImpl.java @@ -18,11 +18,6 @@ */ package org.apache.fineract.portfolio.loanaccount.guarantor.service; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; - import org.apache.fineract.infrastructure.codes.domain.CodeValue; import org.apache.fineract.infrastructure.codes.domain.CodeValueRepositoryWrapper; import org.apache.fineract.infrastructure.core.api.JsonCommand; @@ -43,11 +38,7 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanRepositoryWrapper; import org.apache.fineract.portfolio.loanaccount.guarantor.GuarantorConstants; import org.apache.fineract.portfolio.loanaccount.guarantor.GuarantorConstants.GUARANTOR_JSON_INPUT_PARAMS; import org.apache.fineract.portfolio.loanaccount.guarantor.command.GuarantorCommand; -import org.apache.fineract.portfolio.loanaccount.guarantor.domain.Guarantor; -import org.apache.fineract.portfolio.loanaccount.guarantor.domain.GuarantorFundStatusType; -import org.apache.fineract.portfolio.loanaccount.guarantor.domain.GuarantorFundingDetails; -import org.apache.fineract.portfolio.loanaccount.guarantor.domain.GuarantorRepository; -import org.apache.fineract.portfolio.loanaccount.guarantor.domain.GuarantorType; +import org.apache.fineract.portfolio.loanaccount.guarantor.domain.*; import org.apache.fineract.portfolio.loanaccount.guarantor.exception.DuplicateGuarantorException; import org.apache.fineract.portfolio.loanaccount.guarantor.exception.GuarantorNotFoundException; import org.apache.fineract.portfolio.loanaccount.guarantor.exception.InvalidGuarantorException; @@ -62,6 +53,11 @@ import org.springframework.dao.DataIntegrityViolationException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + @Service public class GuarantorWritePlatformServiceJpaRepositoryIImpl implements GuarantorWritePlatformService { @@ -229,8 +225,8 @@ public class GuarantorWritePlatformServiceJpaRepositoryIImpl implements Guaranto } } - if (changesOnly.containsKey(GUARANTOR_JSON_INPUT_PARAMS.ENTITY_ID) - || changesOnly.containsKey(GUARANTOR_JSON_INPUT_PARAMS.GUARANTOR_TYPE_ID)) { + if (changesOnly.containsKey(GUARANTOR_JSON_INPUT_PARAMS.ENTITY_ID.getValue()) + || changesOnly.containsKey(GUARANTOR_JSON_INPUT_PARAMS.GUARANTOR_TYPE_ID.getValue())) { validateGuarantorBusinessRules(guarantorForUpdate); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java index 72b195ce0..8b6edd1d4 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleAssembler.java @@ -259,7 +259,7 @@ public class LoanScheduleAssembler { validateRepaymentFrequencyIsSameAsMeetingFrequency(meetingPeriodFrequency.getValue(), repaymentFrequencyType, CalendarUtils.getInterval(calendar.getRecurrence()), repaymentEvery); } else { - if (repaymentPeriodFrequencyType == PeriodFrequencyType.MONTHS && nthDay != null && nthDay != NthDayType.INVALID.getValue()) { + if (repaymentPeriodFrequencyType == PeriodFrequencyType.MONTHS && nthDay != null && !nthDay.equals(NthDayType.INVALID.getValue())) { LocalDate calendarStartDate = repaymentsStartingFromDate; if (calendarStartDate == null) calendarStartDate = expectedDisbursementDate; calendar = createLoanCalendar(calendarStartDate, repaymentEvery, CalendarFrequencyType.MONTHLY, dayOfWeek, nthDay); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/RescheduleLoansApiConstants.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/RescheduleLoansApiConstants.java index 516d66a1b..3e5f4248e 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/RescheduleLoansApiConstants.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/RescheduleLoansApiConstants.java @@ -19,6 +19,7 @@ package org.apache.fineract.portfolio.loanaccount.rescheduleloan; import java.util.Arrays; +import java.util.Collections; import java.util.HashSet; import java.util.Set; @@ -58,8 +59,11 @@ public class RescheduleLoansApiConstants { // approve action request parameters public static final String approvedOnDateParam = "approvedOnDate"; - public static final Set APPROVE_REQUEST_DATA_PARAMETERS = new HashSet<>(Arrays.asList(localeParamName, dateFormatParamName, - approvedOnDateParam)); + public static final Set APPROVE_REQUEST_DATA_PARAMETERS = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList(localeParamName, dateFormatParamName, + approvedOnDateParam))); - public static final Set commandParams = new HashSet<>(Arrays.asList(allCommandParamName, approveCommandParamName, pendingCommandParamName, rejectCommandParamName)); + public static final Set commandParams = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList(allCommandParamName, approveCommandParamName, + pendingCommandParamName, rejectCommandParamName))); } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationCommandFromApiJsonHelper.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationCommandFromApiJsonHelper.java index 466ec016c..3366ddeb4 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationCommandFromApiJsonHelper.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/serialization/LoanApplicationCommandFromApiJsonHelper.java @@ -1050,7 +1050,7 @@ public final class LoanApplicationCommandFromApiJsonHelper { "Linked Savings account with id:" + savingsAccount.getId() + " is not in active state", "linkAccountId", savingsAccount.getId()); dataValidationErrors.add(error); - } else if (loanApplication.getClientId() != savingsAccount.clientId()) { + } else if (!loanApplication.getClientId().equals(savingsAccount.clientId())) { final ApiParameterError error = ApiParameterError.parameterError( "validation.msg.loan.linked.savings.account.not.belongs.to.same.client", "Linked Savings account with id:" + savingsAccount.getId() + " is not belongs to the same client", "linkAccountId", savingsAccount.getId()); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeAssembler.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeAssembler.java index 07d7457c7..d89314c81 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeAssembler.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanChargeAssembler.java @@ -18,19 +18,11 @@ */ package org.apache.fineract.portfolio.loanaccount.service; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Locale; -import java.util.Set; - +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; -import org.apache.fineract.portfolio.charge.domain.Charge; -import org.apache.fineract.portfolio.charge.domain.ChargeCalculationType; -import org.apache.fineract.portfolio.charge.domain.ChargePaymentMode; -import org.apache.fineract.portfolio.charge.domain.ChargeRepositoryWrapper; -import org.apache.fineract.portfolio.charge.domain.ChargeTimeType; +import org.apache.fineract.portfolio.charge.domain.*; import org.apache.fineract.portfolio.charge.exception.LoanChargeCannotBeAddedException; import org.apache.fineract.portfolio.loanaccount.api.LoanApiConstants; import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge; @@ -44,9 +36,8 @@ import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; +import java.math.BigDecimal; +import java.util.*; @Service public class LoanChargeAssembler { @@ -231,7 +222,7 @@ public class LoanChargeAssembler { final Long chargeId = this.fromApiJsonHelper.extractLongNamed("chargeId", loanChargeElement); if (id == null) { final Charge chargeDefinition = this.chargeRepository.findOneWithNotFoundDetection(chargeId); - if (chargeDefinition.getChargeTimeType() == ChargeTimeType.TRANCHE_DISBURSEMENT.getValue()) { + if (chargeDefinition.getChargeTimeType().equals(ChargeTimeType.TRANCHE_DISBURSEMENT.getValue())) { associatedChargesForLoan.add(chargeDefinition); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanSchedularServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanSchedularServiceImpl.java index 59196cde7..cdd1d21fe 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanSchedularServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/service/LoanSchedularServiceImpl.java @@ -18,9 +18,6 @@ */ package org.apache.fineract.portfolio.loanaccount.service; -import java.util.*; -import java.util.concurrent.*; - import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService; import org.apache.fineract.infrastructure.core.data.ApiParameterError; import org.apache.fineract.infrastructure.core.exception.AbstractPlatformDomainRuleException; @@ -42,6 +39,9 @@ import org.springframework.orm.ObjectOptimisticLockingFailureException; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.util.*; +import java.util.concurrent.*; + @Service public class LoanSchedularServiceImpl implements LoanSchedularService { @@ -240,14 +240,15 @@ public class LoanSchedularServiceImpl implements LoanSchedularService { private void recalculateInterest(List loanIds, int threadPoolSize, int batchSize, final ExecutorService executorService) { - StringBuilder sb = new StringBuilder(); + //StringBuilder sb = new StringBuilder(); List> posters = new ArrayList>(); int fromIndex = 0; // get the size of current paginated dataset int size = loanIds.size(); //calculate the batch size - batchSize = (int) Math.ceil(size / threadPoolSize); + double toGetCeilValue = (double) (size / threadPoolSize); + batchSize = (int) Math.ceil(toGetCeilValue); if(batchSize == 0) return; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductBorrowerCycleVariationData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductBorrowerCycleVariationData.java index e97f61f2a..2e1620276 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductBorrowerCycleVariationData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductBorrowerCycleVariationData.java @@ -18,13 +18,14 @@ */ package org.apache.fineract.portfolio.loanproduct.data; -import java.math.BigDecimal; - import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.portfolio.loanproduct.domain.LoanProductParamType; import org.apache.fineract.portfolio.loanproduct.domain.LoanProductValueConditionType; -public class LoanProductBorrowerCycleVariationData { +import java.io.Serializable; +import java.math.BigDecimal; + +public class LoanProductBorrowerCycleVariationData implements Serializable { @SuppressWarnings("unused") private final Long id; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductData.java index 9d0af8be3..cd28c6b72 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductData.java @@ -18,12 +18,6 @@ */ package org.apache.fineract.portfolio.loanproduct.data; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; - import org.apache.fineract.accounting.common.AccountingEnumerations; import org.apache.fineract.accounting.common.AccountingRuleType; import org.apache.fineract.accounting.glaccount.data.GLAccountData; @@ -49,10 +43,17 @@ import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; import org.joda.time.LocalDate; import org.springframework.util.CollectionUtils; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + /** * Immutable data object to represent loan products. */ -public class LoanProductData { +public class LoanProductData implements Serializable { private final Long id; private final String name; @@ -1134,12 +1135,16 @@ public class LoanProductData { return null; } public Boolean isCompoundingToBePostedAsTransaction() { - if (isInterestRecalculationEnabled()) { return this.interestRecalculationData.isCompoundingToBePostedAsTransaction(); } - return null; + if (isInterestRecalculationEnabled()) { + return this.interestRecalculationData.isCompoundingToBePostedAsTransaction(); + } else { + return !this.interestRecalculationData.isCompoundingToBePostedAsTransaction(); + } } public Boolean allowCompoundingOnEod() { - if (isInterestRecalculationEnabled()) { return this.interestRecalculationData.allowCompoundingOnEod(); } - return null; + if (isInterestRecalculationEnabled()) { + return this.interestRecalculationData.allowCompoundingOnEod(); + } return !this.interestRecalculationData.allowCompoundingOnEod(); } public boolean canDefineInstallmentAmount() { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductGuaranteeData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductGuaranteeData.java index c71fb9090..cbb7eeb33 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductGuaranteeData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductGuaranteeData.java @@ -18,9 +18,10 @@ */ package org.apache.fineract.portfolio.loanproduct.data; +import java.io.Serializable; import java.math.BigDecimal; -public class LoanProductGuaranteeData { +public class LoanProductGuaranteeData implements Serializable { @SuppressWarnings("unused") private final Long id; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductInterestRecalculationData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductInterestRecalculationData.java index 12dc470b2..9f08d0cef 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductInterestRecalculationData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/LoanProductInterestRecalculationData.java @@ -18,16 +18,16 @@ */ package org.apache.fineract.portfolio.loanproduct.data; -import static org.apache.fineract.portfolio.loanproduct.service.LoanEnumerations.interestRecalculationCompoundingType; -import static org.apache.fineract.portfolio.loanproduct.service.LoanEnumerations.preCloseInterestCalculationStrategy; -import static org.apache.fineract.portfolio.loanproduct.service.LoanEnumerations.rescheduleStrategyType; - import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.portfolio.loanproduct.domain.InterestRecalculationCompoundingMethod; import org.apache.fineract.portfolio.loanproduct.domain.LoanPreClosureInterestCalculationStrategy; import org.apache.fineract.portfolio.loanproduct.domain.LoanRescheduleStrategyMethod; -public class LoanProductInterestRecalculationData { +import java.io.Serializable; + +import static org.apache.fineract.portfolio.loanproduct.service.LoanEnumerations.*; + +public class LoanProductInterestRecalculationData implements Serializable { @SuppressWarnings("unused") private final Long id; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/TransactionProcessingStrategyData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/TransactionProcessingStrategyData.java index 786fedcc0..45f9dc94c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/TransactionProcessingStrategyData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/data/TransactionProcessingStrategyData.java @@ -18,10 +18,12 @@ */ package org.apache.fineract.portfolio.loanproduct.data; +import java.io.Serializable; + /** * Immutable data object representing a transaction strategy option for a loan. */ -public final class TransactionProcessingStrategyData { +public final class TransactionProcessingStrategyData implements Serializable { private final Long id; @SuppressWarnings("unused") diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java index 723166c4f..b7336846f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java @@ -18,36 +18,12 @@ */ package org.apache.fineract.portfolio.loanproduct.domain; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Embedded; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.JoinColumn; -import javax.persistence.JoinTable; -import javax.persistence.ManyToMany; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; -import javax.persistence.OneToOne; -import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; -import javax.persistence.UniqueConstraint; - +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; import org.apache.commons.lang.StringUtils; import org.apache.fineract.accounting.common.AccountingRuleType; import org.apache.fineract.infrastructure.core.api.JsonCommand; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.portfolio.charge.domain.Charge; @@ -61,10 +37,10 @@ import org.apache.fineract.portfolio.fund.domain.Fund; import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.AprCalculator; import org.apache.fineract.portfolio.loanproduct.LoanProductConstants; import org.joda.time.LocalDate; -import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; +import javax.persistence.*; +import java.math.BigDecimal; +import java.util.*; /** * Loan products allow for categorisation of an organisations loans into @@ -1234,7 +1210,7 @@ public class LoanProduct extends AbstractPersistableCustom { Integer interestCycleUsed = 0; Integer repaymentCycleUsed = 0; for (LoanProductBorrowerCycleVariations cycleVariation : this.borrowerCycleVariations) { - if (cycleVariation.getBorrowerCycleNumber() == cycleNumber + if (cycleVariation.getBorrowerCycleNumber().equals(cycleNumber) && cycleVariation.getValueConditionType().equals(LoanProductValueConditionType.EQUAL)) { switch (cycleVariation.getParamType()) { case PRINCIPAL: diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductBorrowerCycleVariations.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductBorrowerCycleVariations.java index 85f103d9b..8530758f8 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductBorrowerCycleVariations.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductBorrowerCycleVariations.java @@ -19,6 +19,7 @@ package org.apache.fineract.portfolio.loanproduct.domain; import java.math.BigDecimal; +import java.util.Objects; import javax.persistence.Column; import javax.persistence.Entity; @@ -103,6 +104,11 @@ public class LoanProductBorrowerCycleVariations extends AbstractPersistableCusto return false; } + @Override + public int hashCode() { + return Objects.hash(borrowerCycleNumber, minValue, maxValue); + } + public void copy(final LoanProductBorrowerCycleVariations borrowerCycleVariations) { this.defaultValue = borrowerCycleVariations.defaultValue; this.minValue = borrowerCycleVariations.minValue; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductConfigurableAttributes.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductConfigurableAttributes.java index e982b929c..4da1efc17 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductConfigurableAttributes.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductConfigurableAttributes.java @@ -18,19 +18,19 @@ */ package org.apache.fineract.portfolio.loanproduct.domain; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; - +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.portfolio.loanproduct.LoanProductConstants; +import javax.persistence.*; +import java.io.Serializable; +import java.util.Objects; + @Entity @Table(name = "m_product_loan_configurable_attributes") -public class LoanProductConfigurableAttributes extends AbstractPersistableCustom { +public class LoanProductConfigurableAttributes extends AbstractPersistableCustom implements Serializable { @ManyToOne @JoinColumn(name = "loan_product_id", nullable = false) @@ -209,4 +209,27 @@ public class LoanProductConfigurableAttributes extends AbstractPersistableCustom this.graceOnArrearsAgeing = graceOnArrearsAgeing; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + + if (!(o instanceof LoanProductConfigurableAttributes)) return false; + + LoanProductConfigurableAttributes that = (LoanProductConfigurableAttributes) o; + + return Objects.equals(loanProduct, that.loanProduct) && + Objects.equals(amortizationType, that.amortizationType) && + Objects.equals(interestType, that.interestType) && + Objects.equals(transactionProcessingStrategyId, that.transactionProcessingStrategyId) && + Objects.equals(interestCalculationPeriodType, that.interestCalculationPeriodType) && + Objects.equals(inArrearsTolerance, that.inArrearsTolerance) && + Objects.equals(repaymentEvery, that.repaymentEvery) && + Objects.equals(graceOnPrincipalAndInterestPayment, that.graceOnPrincipalAndInterestPayment) && + Objects.equals(graceOnArrearsAgeing, that.graceOnArrearsAgeing); + } + + @Override + public int hashCode() { + return Objects.hash(loanProduct, amortizationType, interestType, transactionProcessingStrategyId, interestCalculationPeriodType, inArrearsTolerance, repaymentEvery, graceOnPrincipalAndInterestPayment, graceOnArrearsAgeing); + } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/serialization/LoanProductDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/serialization/LoanProductDataValidator.java index 56446d0a8..d2b836925 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/serialization/LoanProductDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/serialization/LoanProductDataValidator.java @@ -320,7 +320,7 @@ public final class LoanProductDataValidator { .value(isInterestRecalculationEnabled).notNull().isOneOfTheseValues(true, false); if (isInterestRecalculationEnabled != null) { - if (isInterestRecalculationEnabled.booleanValue()) { + if (isInterestRecalculationEnabled) { if (isEqualAmortization) { throw new EqualAmortizationUnsupportedFeatureException("interest.recalculation", "interest recalculation"); } validateInterestRecalculationParams(element, baseDataValidator, null); @@ -363,7 +363,7 @@ public final class LoanProductDataValidator { .failWithCode("not.supported.when.isLinkedToFloatingInterestRates.is.true", "interestRateFrequencyType param is not supported when isLinkedToFloatingInterestRates is true"); } - if ((interestType == null || interestType != InterestMethod.DECLINING_BALANCE.getValue()) + if ((interestType == null || !interestType.equals(InterestMethod.DECLINING_BALANCE.getValue())) || (isInterestRecalculationEnabled == null || isInterestRecalculationEnabled == false)) { baseDataValidator .reset() @@ -1208,7 +1208,7 @@ public final class LoanProductDataValidator { Integer interestType = this.fromApiJsonHelper.parameterExists("interestType", element) ? this.fromApiJsonHelper .extractIntegerNamed("interestType", element, Locale.getDefault()) : loanProduct.getLoanProductRelatedDetail() .getInterestMethod().getValue(); - if ((interestType == null || interestType != InterestMethod.DECLINING_BALANCE.getValue()) + if ((interestType == null || !interestType.equals(InterestMethod.DECLINING_BALANCE.getValue())) || (isInterestRecalculationEnabled == null || isInterestRecalculationEnabled == false)) { baseDataValidator .reset() diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/paymentdetail/data/PaymentDetailData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/paymentdetail/data/PaymentDetailData.java index cc519da16..346332b00 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/paymentdetail/data/PaymentDetailData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/paymentdetail/data/PaymentDetailData.java @@ -20,10 +20,13 @@ package org.apache.fineract.portfolio.paymentdetail.data; import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; +import java.io.Serializable; +import java.util.Objects; + /** * Immutable data object representing a payment. */ -public class PaymentDetailData { +public class PaymentDetailData implements Serializable { @SuppressWarnings("unused") private final Long id; @@ -50,7 +53,23 @@ public class PaymentDetailData { this.receiptNumber = receiptNumber; this.bankNumber = bankNumber; } - - + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof PaymentDetailData)) return false; + PaymentDetailData that = (PaymentDetailData) o; + return Objects.equals(id, that.id) && + Objects.equals(paymentType, that.paymentType) && + Objects.equals(accountNumber, that.accountNumber) && + Objects.equals(checkNumber, that.checkNumber) && + Objects.equals(routingCode, that.routingCode) && + Objects.equals(receiptNumber, that.receiptNumber) && + Objects.equals(bankNumber, that.bankNumber); + } + + @Override + public int hashCode() { + return Objects.hash(id, paymentType, accountNumber, checkNumber, routingCode, receiptNumber, bankNumber); + } } \ No newline at end of file diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/paymenttype/data/PaymentTypeData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/paymenttype/data/PaymentTypeData.java index 03331f836..b7d0f1458 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/paymenttype/data/PaymentTypeData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/paymenttype/data/PaymentTypeData.java @@ -18,7 +18,13 @@ */ package org.apache.fineract.portfolio.paymenttype.data; -public class PaymentTypeData { +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; + +import java.io.Serializable; +import java.util.Objects; + +public class PaymentTypeData implements Serializable { @SuppressWarnings("unused") private Long id; @@ -58,4 +64,24 @@ public class PaymentTypeData { public String getName() { return name; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + + if (!(o instanceof PaymentTypeData)) return false; + + PaymentTypeData that = (PaymentTypeData) o; + + return Objects.equals(id, that.id) && + Objects.equals(name, that.name) && + Objects.equals(description, that.description) && + Objects.equals(isCashPayment, that.isCashPayment) && + Objects.equals(position, that.position); + } + + @Override + public int hashCode() { + return Objects.hash(id, name, description, isCashPayment, position); + } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountDataValidator.java index 50c393499..d793f1536 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/DepositAccountDataValidator.java @@ -18,27 +18,31 @@ */ package org.apache.fineract.portfolio.savings.data; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.adjustAdvanceTowardsFuturePaymentsParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.allowWithdrawalParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.depositAmountParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.depositPeriodFrequencyIdParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.depositPeriodParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.inMultiplesOfDepositTermParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.inMultiplesOfDepositTermTypeIdParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.isCalendarInheritedParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.isMandatoryDepositParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.linkedAccountParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.mandatoryRecommendedDepositAmountParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.maxDepositTermParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.maxDepositTermTypeIdParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.minDepositTermParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.minDepositTermTypeIdParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.preClosurePenalApplicableParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.preClosurePenalInterestOnTypeIdParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.preClosurePenalInterestParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.recurringFrequencyParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.recurringFrequencyTypeParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.transferInterestToSavingsParamName; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.reflect.TypeToken; +import org.apache.commons.lang.StringUtils; +import org.apache.fineract.infrastructure.core.data.ApiParameterError; +import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; +import org.apache.fineract.infrastructure.core.exception.InvalidJsonException; +import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; +import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; +import org.apache.fineract.portfolio.savings.*; +import org.apache.fineract.portfolio.savings.domain.SavingsAccount; +import org.joda.time.LocalDate; +import org.joda.time.MonthDay; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Type; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import static org.apache.fineract.portfolio.savings.DepositsApiConstants.*; import static org.apache.fineract.portfolio.savings.SavingsApiConstants.accountNoParamName; import static org.apache.fineract.portfolio.savings.SavingsApiConstants.amountParamName; import static org.apache.fineract.portfolio.savings.SavingsApiConstants.chargeIdParamName; @@ -55,43 +59,10 @@ import static org.apache.fineract.portfolio.savings.SavingsApiConstants.interest import static org.apache.fineract.portfolio.savings.SavingsApiConstants.interestPostingPeriodTypeParamName; import static org.apache.fineract.portfolio.savings.SavingsApiConstants.lockinPeriodFrequencyParamName; import static org.apache.fineract.portfolio.savings.SavingsApiConstants.lockinPeriodFrequencyTypeParamName; -import static org.apache.fineract.portfolio.savings.SavingsApiConstants.minRequiredOpeningBalanceParamName; import static org.apache.fineract.portfolio.savings.SavingsApiConstants.nominalAnnualInterestRateParamName; import static org.apache.fineract.portfolio.savings.SavingsApiConstants.productIdParamName; import static org.apache.fineract.portfolio.savings.SavingsApiConstants.submittedOnDateParamName; -import static org.apache.fineract.portfolio.savings.SavingsApiConstants.withHoldTaxParamName; - -import java.lang.reflect.Type; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -import org.apache.commons.lang.StringUtils; -import org.apache.fineract.infrastructure.core.data.ApiParameterError; -import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder; -import org.apache.fineract.infrastructure.core.exception.InvalidJsonException; -import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; -import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; -import org.apache.fineract.portfolio.savings.DepositAccountType; -import org.apache.fineract.portfolio.savings.DepositsApiConstants; -import org.apache.fineract.portfolio.savings.PreClosurePenalInterestOnType; -import org.apache.fineract.portfolio.savings.SavingsCompoundingInterestPeriodType; -import org.apache.fineract.portfolio.savings.SavingsInterestCalculationDaysInYearType; -import org.apache.fineract.portfolio.savings.SavingsInterestCalculationType; -import org.apache.fineract.portfolio.savings.SavingsPeriodFrequencyType; -import org.apache.fineract.portfolio.savings.SavingsPostingInterestPeriodType; -import org.apache.fineract.portfolio.savings.domain.SavingsAccount; -import org.joda.time.LocalDate; -import org.joda.time.MonthDay; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.reflect.TypeToken; +import static org.apache.fineract.portfolio.savings.SavingsApiConstants.*; @Component public class DepositAccountDataValidator { @@ -662,7 +633,7 @@ public class DepositAccountDataValidator { "Linked Savings account with id:" + linkedSavingsAccount.getId() + " is not in active state", "linkAccountId", linkedSavingsAccount.getId()); dataValidationErrors.add(error); - } else if (savingsAccount.clientId() != linkedSavingsAccount.clientId()) { + } else if (!savingsAccount.clientId().equals(linkedSavingsAccount.clientId())) { final ApiParameterError error = ApiParameterError.parameterError( "validation.msg.deposit.linked.savings.account.not.belongs.to.same.client", "Linked Savings account with id:" + linkedSavingsAccount.getId() + " is not belongs to the same client", "linkAccountId", diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountApplicationTimelineData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountApplicationTimelineData.java index e3f8e68a6..71bce90b6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountApplicationTimelineData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountApplicationTimelineData.java @@ -20,12 +20,14 @@ package org.apache.fineract.portfolio.savings.data; import org.joda.time.LocalDate; +import java.io.Serializable; + /** * Immutable data object represent the important time-line events of a savings * account application. */ @SuppressWarnings("unused") -public class SavingsAccountApplicationTimelineData { +public class SavingsAccountApplicationTimelineData implements Serializable { private final LocalDate submittedOnDate; private final String submittedByUsername; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountChargeData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountChargeData.java index ba158d01f..88be5c7f6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountChargeData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountChargeData.java @@ -18,9 +18,6 @@ */ package org.apache.fineract.portfolio.savings.data; -import java.math.BigDecimal; -import java.util.Collection; - import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.portfolio.charge.data.ChargeData; @@ -28,11 +25,15 @@ import org.apache.fineract.portfolio.charge.domain.ChargeTimeType; import org.joda.time.LocalDate; import org.joda.time.MonthDay; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Collection; + /** * Immutable data object for Savings Account charge data. */ @SuppressWarnings("unused") -public class SavingsAccountChargeData { +public class SavingsAccountChargeData implements Serializable { private final Long id; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountData.java index 64ff43ae1..4396e3ed9 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountData.java @@ -18,12 +18,8 @@ */ package org.apache.fineract.portfolio.savings.data; -import java.math.BigDecimal; -import java.util.*; - import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; -import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.infrastructure.dataqueries.data.DatatableData; import org.apache.fineract.organisation.monetary.data.CurrencyData; @@ -32,10 +28,14 @@ import org.apache.fineract.portfolio.charge.data.ChargeData; import org.apache.fineract.portfolio.tax.data.TaxGroupData; import org.joda.time.LocalDate; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.*; + /** * Immutable data object representing a savings account. */ -public class SavingsAccountData { +public class SavingsAccountData implements Serializable { private final Long id; private final String accountNo; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountStatusEnumData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountStatusEnumData.java index 7e7bd7656..f9ba30709 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountStatusEnumData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountStatusEnumData.java @@ -18,10 +18,12 @@ */ package org.apache.fineract.portfolio.savings.data; +import java.io.Serializable; + /** * Immutable data object represent savings account status enumerations. */ -public class SavingsAccountStatusEnumData { +public class SavingsAccountStatusEnumData implements Serializable { private final Long id; @SuppressWarnings("unused") diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountSubStatusEnumData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountSubStatusEnumData.java index 3a7347aab..e0e929dbf 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountSubStatusEnumData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountSubStatusEnumData.java @@ -18,10 +18,12 @@ */ package org.apache.fineract.portfolio.savings.data; +import java.io.Serializable; + /** * Immutable data object represent savings account sub-status enumerations. */ -public class SavingsAccountSubStatusEnumData { +public class SavingsAccountSubStatusEnumData implements Serializable { private final Long id; @SuppressWarnings("unused") diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountSummaryData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountSummaryData.java index a3637c712..1805b8789 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountSummaryData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountSummaryData.java @@ -18,16 +18,17 @@ */ package org.apache.fineract.portfolio.savings.data; -import java.math.BigDecimal; - import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.joda.time.LocalDate; +import java.io.Serializable; +import java.math.BigDecimal; + /** * Immutable data object representing Savings Account summary information. */ @SuppressWarnings("unused") -public class SavingsAccountSummaryData { +public class SavingsAccountSummaryData implements Serializable { private final CurrencyData currency; private final BigDecimal totalDeposits; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionData.java index 98bee0667..c3210bc1c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionData.java @@ -18,9 +18,6 @@ */ package org.apache.fineract.portfolio.savings.data; -import java.math.BigDecimal; -import java.util.Collection; - import org.apache.fineract.infrastructure.codes.data.CodeValueData; import org.apache.fineract.infrastructure.core.service.DateUtils; import org.apache.fineract.organisation.monetary.data.CurrencyData; @@ -31,11 +28,15 @@ import org.apache.fineract.portfolio.savings.SavingsAccountTransactionType; import org.apache.fineract.portfolio.savings.service.SavingsEnumerations; import org.joda.time.LocalDate; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Collection; + /** * Immutable data object representing a savings account transaction. */ @SuppressWarnings("unused") -public class SavingsAccountTransactionData { +public class SavingsAccountTransactionData implements Serializable { private final Long id; private final SavingsAccountTransactionEnumData transactionType; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionEnumData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionEnumData.java index 02651ce57..525c29e11 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionEnumData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsAccountTransactionEnumData.java @@ -20,11 +20,13 @@ package org.apache.fineract.portfolio.savings.data; import org.apache.fineract.portfolio.savings.SavingsAccountTransactionType; +import java.io.Serializable; + /** * Immutable data object represent savings account transaction type * enumerations. */ -public class SavingsAccountTransactionEnumData { +public class SavingsAccountTransactionEnumData implements Serializable { private final Long id; private final String code; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsProductData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsProductData.java index 99538b40b..f4c830870 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsProductData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/data/SavingsProductData.java @@ -18,11 +18,6 @@ */ package org.apache.fineract.portfolio.savings.data; -import java.math.BigDecimal; -import java.util.Collection; -import java.util.List; -import java.util.Map; - import org.apache.fineract.accounting.common.AccountingRuleType; import org.apache.fineract.accounting.glaccount.data.GLAccountData; import org.apache.fineract.accounting.producttoaccountmapping.data.ChargeToGLAccountMapper; @@ -33,10 +28,16 @@ import org.apache.fineract.portfolio.charge.data.ChargeData; import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData; import org.apache.fineract.portfolio.tax.data.TaxGroupData; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Collection; +import java.util.List; +import java.util.Map; + /** * Immutable data object represent a savings product. */ -public class SavingsProductData { +public class SavingsProductData implements Serializable { private final Long id; private final String name; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountCharge.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountCharge.java index 3be7c4711..fd578f20c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountCharge.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountCharge.java @@ -18,33 +18,8 @@ */ package org.apache.fineract.portfolio.savings.domain; -import static org.apache.fineract.portfolio.savings.SavingsApiConstants.amountParamName; -import static org.apache.fineract.portfolio.savings.SavingsApiConstants.dateFormatParamName; -import static org.apache.fineract.portfolio.savings.SavingsApiConstants.dueAsOfDateParamName; -import static org.apache.fineract.portfolio.savings.SavingsApiConstants.feeIntervalParamName; -import static org.apache.fineract.portfolio.savings.SavingsApiConstants.feeOnMonthDayParamName; -import static org.apache.fineract.portfolio.savings.SavingsApiConstants.localeParamName; - -import java.math.BigDecimal; -import java.math.MathContext; -import java.util.Date; -import java.util.LinkedHashMap; -import java.util.Map; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; -import javax.validation.constraints.NotNull; - -import org.apache.commons.lang.builder.EqualsBuilder; -import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; -import org.apache.fineract.organisation.monetary.domain.ApplicationCurrency; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; import org.apache.fineract.organisation.monetary.domain.MoneyHelper; @@ -55,6 +30,17 @@ import org.apache.fineract.portfolio.charge.exception.SavingsAccountChargeWithou import org.joda.time.LocalDate; import org.joda.time.MonthDay; +import javax.persistence.*; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.math.MathContext; +import java.util.Date; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Objects; + +import static org.apache.fineract.portfolio.savings.SavingsApiConstants.*; + /** * @author dv6 * @@ -451,14 +437,14 @@ public class SavingsAccountCharge extends AbstractPersistableCustom { final MonthDay monthDay = command.extractMonthDayNamed(feeOnMonthDayParamName); final String actualValueEntered = command.stringValueOfParameterNamed(feeOnMonthDayParamName); final Integer dayOfMonthValue = monthDay.getDayOfMonth(); - if (this.feeOnDay != dayOfMonthValue) { + if (!this.feeOnDay.equals(dayOfMonthValue)) { actualChanges.put(feeOnMonthDayParamName, actualValueEntered); actualChanges.put(localeParamName, localeAsInput); this.feeOnDay = dayOfMonthValue; } final Integer monthOfYear = monthDay.getMonthOfYear(); - if (this.feeOnMonth != monthOfYear) { + if (!this.feeOnMonth.equals(monthOfYear)) { actualChanges.put(feeOnMonthDayParamName, actualValueEntered); actualChanges.put(localeParamName, localeAsInput); this.feeOnMonth = monthOfYear; @@ -693,17 +679,35 @@ public class SavingsAccountCharge extends AbstractPersistableCustom { } @Override - public boolean equals(final Object obj) { - if (obj == null) { return false; } - if (obj == this) { return true; } - if (obj.getClass() != getClass()) { return false; } - final SavingsAccountCharge rhs = (SavingsAccountCharge) obj; - return new EqualsBuilder().appendSuper(super.equals(obj)) // - .append(getId(), rhs.getId()) // - .append(this.charge.getId(), rhs.charge.getId()) // - .append(this.amount, rhs.amount) // - .append(getDueLocalDate(), rhs.getDueLocalDate()) // - .isEquals(); + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof SavingsAccountCharge)) return false; + SavingsAccountCharge that = (SavingsAccountCharge) o; + return Objects.equals(penaltyCharge, that.penaltyCharge) && + Objects.equals(paid, that.paid) && + Objects.equals(waived, that.waived) && + Objects.equals(status, that.status) && + Objects.equals(savingsAccount, that.savingsAccount) && + Objects.equals(charge, that.charge) && + Objects.equals(chargeTime, that.chargeTime) && + Objects.equals(dueDate, that.dueDate) && + Objects.equals(feeOnMonth, that.feeOnMonth) && + Objects.equals(feeOnDay, that.feeOnDay) && + Objects.equals(feeInterval, that.feeInterval) && + Objects.equals(chargeCalculation, that.chargeCalculation) && + Objects.equals(percentage, that.percentage) && + Objects.equals(amountPercentageAppliedTo, that.amountPercentageAppliedTo) && + Objects.equals(amount, that.amount) && + Objects.equals(amountPaid, that.amountPaid) && + Objects.equals(amountWaived, that.amountWaived) && + Objects.equals(amountWrittenOff, that.amountWrittenOff) && + Objects.equals(amountOutstanding, that.amountOutstanding) && + Objects.equals(inactivationDate, that.inactivationDate); + } + + @Override + public int hashCode() { + return Objects.hash(savingsAccount, charge, chargeTime, dueDate, feeOnMonth, feeOnDay, feeInterval, chargeCalculation, percentage, amountPercentageAppliedTo, amount, amountPaid, amountWaived, amountWrittenOff, amountOutstanding, penaltyCharge, paid, waived, status, inactivationDate); } public BigDecimal calculateWithdralFeeAmount(@NotNull BigDecimal transactionAmount) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl.java index ff222e953..709a4681d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl.java @@ -18,16 +18,6 @@ */ package org.apache.fineract.portfolio.savings.service; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.isCalendarInheritedParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.recurringFrequencyParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.recurringFrequencyTypeParamName; -import static org.apache.fineract.portfolio.savings.DepositsApiConstants.transferInterestToSavingsParamName; - -import java.math.MathContext; -import java.util.*; - -import javax.persistence.PersistenceException; - import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.fineract.infrastructure.accountnumberformat.domain.AccountNumberFormat; @@ -51,11 +41,7 @@ import org.apache.fineract.portfolio.account.domain.AccountAssociationType; import org.apache.fineract.portfolio.account.domain.AccountAssociations; import org.apache.fineract.portfolio.account.domain.AccountAssociationsRepository; import org.apache.fineract.portfolio.calendar.domain.Calendar; -import org.apache.fineract.portfolio.calendar.domain.CalendarEntityType; -import org.apache.fineract.portfolio.calendar.domain.CalendarFrequencyType; -import org.apache.fineract.portfolio.calendar.domain.CalendarInstance; -import org.apache.fineract.portfolio.calendar.domain.CalendarInstanceRepository; -import org.apache.fineract.portfolio.calendar.domain.CalendarType; +import org.apache.fineract.portfolio.calendar.domain.*; import org.apache.fineract.portfolio.calendar.service.CalendarUtils; import org.apache.fineract.portfolio.client.domain.AccountNumberGenerator; import org.apache.fineract.portfolio.client.domain.Client; @@ -77,17 +63,7 @@ import org.apache.fineract.portfolio.savings.DepositAccountType; import org.apache.fineract.portfolio.savings.DepositsApiConstants; import org.apache.fineract.portfolio.savings.SavingsApiConstants; import org.apache.fineract.portfolio.savings.data.DepositAccountDataValidator; -import org.apache.fineract.portfolio.savings.domain.DepositAccountAssembler; -import org.apache.fineract.portfolio.savings.domain.FixedDepositAccount; -import org.apache.fineract.portfolio.savings.domain.FixedDepositAccountRepository; -import org.apache.fineract.portfolio.savings.domain.RecurringDepositAccount; -import org.apache.fineract.portfolio.savings.domain.RecurringDepositAccountRepository; -import org.apache.fineract.portfolio.savings.domain.SavingsAccount; -import org.apache.fineract.portfolio.savings.domain.SavingsAccountCharge; -import org.apache.fineract.portfolio.savings.domain.SavingsAccountChargeAssembler; -import org.apache.fineract.portfolio.savings.domain.SavingsAccountRepositoryWrapper; -import org.apache.fineract.portfolio.savings.domain.SavingsProduct; -import org.apache.fineract.portfolio.savings.domain.SavingsProductRepository; +import org.apache.fineract.portfolio.savings.domain.*; import org.apache.fineract.portfolio.savings.exception.SavingsProductNotFoundException; import org.apache.fineract.useradministration.domain.AppUser; import org.joda.time.LocalDate; @@ -97,8 +73,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.apache.fineract.portfolio.common.BusinessEventNotificationConstants.BUSINESS_ENTITY; -import org.apache.fineract.portfolio.common.BusinessEventNotificationConstants.BUSINESS_EVENTS; + +import javax.persistence.PersistenceException; +import java.math.MathContext; +import java.util.*; + +import static org.apache.fineract.portfolio.savings.DepositsApiConstants.*; @Service public class DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl implements DepositApplicationProcessWritePlatformService { @@ -429,7 +409,7 @@ public class DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl impl isModified = true; } else { final SavingsAccount savingsAccount = accountAssociations.linkedSavingsAccount(); - if (savingsAccount == null || savingsAccount.getId() != savingsAccountId) { + if (savingsAccount == null || !savingsAccount.getId().equals(savingsAccountId)) { isModified = true; } } @@ -460,11 +440,11 @@ public class DepositApplicationProcessWritePlatformServiceJpaRepositoryImpl impl .build(); } catch (final DataAccessException dve) { handleDataIntegrityIssues(command, dve.getMostSpecificCause(), dve); - return new CommandProcessingResult(Long.valueOf(-1)); + return new CommandProcessingResult((long) -1); }catch (final PersistenceException dve) { Throwable throwable = ExceptionUtils.getRootCause(dve.getCause()) ; handleDataIntegrityIssues(command, throwable, dve); - return new CommandProcessingResult(Long.valueOf(-1)); + return new CommandProcessingResult((long) -1); } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/account/service/SelfBeneficiariesTPTWritePlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/account/service/SelfBeneficiariesTPTWritePlatformServiceImpl.java index 441aa02f8..93bc379b9 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/account/service/SelfBeneficiariesTPTWritePlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/account/service/SelfBeneficiariesTPTWritePlatformServiceImpl.java @@ -94,7 +94,7 @@ public class SelfBeneficiariesTPTWritePlatformServiceImpl implements Long officeId = null; boolean validAccountDetails = true; - if (accountType.equals(PortfolioAccountType.LOAN)) { + if (accountType.equals(PortfolioAccountType.LOAN.getValue())) { Loan loan = this.loanRepositoryWrapper.findNonClosedLoanByAccountNumber(accountNumber); if (loan != null && loan.getClientId() != null && loan.getOffice().getName().equals(officeName)) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/loanaccount/api/SelfLoansApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/loanaccount/api/SelfLoansApiResource.java index e3f176cfb..c773f8a39 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/loanaccount/api/SelfLoansApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/loanaccount/api/SelfLoansApiResource.java @@ -141,7 +141,7 @@ public class SelfLoansApiResource { validateAppuserLoanMapping(loanId); - return this.retrieveLoanCharge(loanId, loanChargeId, uriInfo); + return this.loanChargesApiResource.retrieveLoanCharge(loanId, loanChargeId, uriInfo); } @GET diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/loanaccount/data/SelfLoansDataValidator.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/loanaccount/data/SelfLoansDataValidator.java index ef93de0ed..133e54f2b 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/loanaccount/data/SelfLoansDataValidator.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/loanaccount/data/SelfLoansDataValidator.java @@ -40,6 +40,8 @@ import org.springframework.stereotype.Component; import com.google.gson.JsonElement; +import net.sf.ehcache.util.FindBugsSuppressWarnings; + @Component public class SelfLoansDataValidator { private static final Set allowedAssociationParameters = new HashSet<>( @@ -83,6 +85,9 @@ public class SelfLoansDataValidator { } + // TODO fix this! + @FindBugsSuppressWarnings("EC_UNRELATED_TYPES") + // See review here: https://github.com/apache/fineract/pull/670 public HashMap validateLoanApplication(final String json){ if (StringUtils.isBlank(json)) { throw new InvalidJsonException(); } @@ -108,6 +113,9 @@ public class SelfLoansDataValidator { } + // TODO fix this! + @FindBugsSuppressWarnings("EC_UNRELATED_TYPES") + // See review here: https://github.com/apache/fineract/pull/670/files/0409af3903d350afe43ef4837e4d915ccbe14285#r357920937 public HashMap validateModifyLoanApplication(final String json) { final List dataValidationErrors = new ArrayList<>(); final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors).resource("loan"); diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/registration/SelfServiceApiConstants.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/registration/SelfServiceApiConstants.java index 966211bda..0c9a7c312 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/registration/SelfServiceApiConstants.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/registration/SelfServiceApiConstants.java @@ -19,6 +19,7 @@ package org.apache.fineract.portfolio.self.registration; import java.util.Arrays; +import java.util.Collections; import java.util.HashSet; import java.util.Set; @@ -37,13 +38,14 @@ public class SelfServiceApiConstants { public static final String mobileModeParamName = "mobile"; public static final String requestIdParamName = "requestId"; public static final String createRequestSuccessMessage = "Self service request created."; - public static final Set REGISTRATION_REQUEST_DATA_PARAMETERS = new HashSet<>(Arrays.asList(usernameParamName, - accountNumberParamName, passwordParamName, firstNameParamName, mobileNumberParamName, lastNameParamName, emailParamName, - authenticationModeParamName)); - public static final Set CREATE_USER_REQUEST_DATA_PARAMETERS = new HashSet<>(Arrays.asList(requestIdParamName, - authenticationTokenParamName)); - public static final Object[] SUPPORTED_AUTHENTICATION_MODE_PARAMETERS = new Object[] {emailModeParamName, - mobileModeParamName}; + public static final Set REGISTRATION_REQUEST_DATA_PARAMETERS = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList(usernameParamName, accountNumberParamName, + passwordParamName, firstNameParamName, mobileNumberParamName, lastNameParamName, emailParamName, + authenticationModeParamName))); + public static final Set CREATE_USER_REQUEST_DATA_PARAMETERS = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList(requestIdParamName, + authenticationTokenParamName))); + public static final Object[] SUPPORTED_AUTHENTICATION_MODE_PARAMETERS = new Object[] {emailModeParamName, mobileModeParamName}; public static final String SELF_SERVICE_USER_ROLE = "Self Service User"; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountApplicationTimelineData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountApplicationTimelineData.java index 73ef7513b..8c42ec135 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountApplicationTimelineData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountApplicationTimelineData.java @@ -20,8 +20,10 @@ package org.apache.fineract.portfolio.shareaccounts.data; import org.joda.time.LocalDate; +import java.io.Serializable; + @SuppressWarnings("unused") -public class ShareAccountApplicationTimelineData { +public class ShareAccountApplicationTimelineData implements Serializable { private final LocalDate submittedOnDate; private final String submittedByUsername; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountChargeData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountChargeData.java index f1da9f450..ea4eea85c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountChargeData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountChargeData.java @@ -18,18 +18,16 @@ */ package org.apache.fineract.portfolio.shareaccounts.data; -import java.math.BigDecimal; -import java.util.Collection; - import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.portfolio.charge.data.ChargeData; -import org.apache.fineract.portfolio.charge.domain.ChargeCalculationType; -import org.joda.time.LocalDate; -import org.joda.time.MonthDay; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Collection; @SuppressWarnings("unused") -public class ShareAccountChargeData { +public class ShareAccountChargeData implements Serializable { private final Long id; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountData.java index 86ca355cf..5ce3af970 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountData.java @@ -18,12 +18,7 @@ */ package org.apache.fineract.portfolio.shareaccounts.data; -import java.math.BigDecimal; -import java.util.Collection; -import java.util.Date; - import org.apache.fineract.accounting.glaccount.data.GLAccountData; -import org.apache.fineract.infrastructure.bulkimport.constants.TemplatePopulateImportConstants; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.apache.fineract.organisation.monetary.data.CurrencyData; import org.apache.fineract.portfolio.accountdetails.data.ShareAccountSummaryData; @@ -31,11 +26,14 @@ import org.apache.fineract.portfolio.accounts.data.AccountData; import org.apache.fineract.portfolio.charge.data.ChargeData; import org.apache.fineract.portfolio.products.data.ProductData; import org.apache.fineract.portfolio.savings.data.SavingsAccountData; -import org.apache.fineract.portfolio.shareproducts.data.ShareProductData; import org.joda.time.LocalDate; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Collection; + @SuppressWarnings("unused") -public class ShareAccountData implements AccountData { +public class ShareAccountData implements Serializable, AccountData { private Long id; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountDividendData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountDividendData.java index ad195f470..78b1bffe1 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountDividendData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountDividendData.java @@ -18,13 +18,14 @@ */ package org.apache.fineract.portfolio.shareaccounts.data; +import org.apache.fineract.infrastructure.core.data.EnumOptionData; + +import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; -import org.apache.fineract.infrastructure.core.data.EnumOptionData; - @SuppressWarnings("unused") -public class ShareAccountDividendData { +public class ShareAccountDividendData implements Serializable { private final Long id; private final Date postedDate ; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountStatusEnumData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountStatusEnumData.java index c1dffc907..53d9b33c0 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountStatusEnumData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountStatusEnumData.java @@ -18,11 +18,13 @@ */ package org.apache.fineract.portfolio.shareaccounts.data; +import java.io.Serializable; + /** * Immutable data object represent savings account status enumerations. */ @SuppressWarnings("unused") -public class ShareAccountStatusEnumData { +public class ShareAccountStatusEnumData implements Serializable { private final Long id; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountTransactionData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountTransactionData.java index dcb192e01..44976e248 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountTransactionData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountTransactionData.java @@ -18,13 +18,14 @@ */ package org.apache.fineract.portfolio.shareaccounts.data; -import java.math.BigDecimal; - import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.joda.time.LocalDate; +import java.io.Serializable; +import java.math.BigDecimal; + @SuppressWarnings("unused") -public class ShareAccountTransactionData { +public class ShareAccountTransactionData implements Serializable { private final Long id; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountTransactionEnumData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountTransactionEnumData.java index cfc774803..cc8793c8c 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountTransactionEnumData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/data/ShareAccountTransactionEnumData.java @@ -18,7 +18,9 @@ */ package org.apache.fineract.portfolio.shareaccounts.data; -public class ShareAccountTransactionEnumData { +import java.io.Serializable; + +public class ShareAccountTransactionEnumData implements Serializable { private final Long id; private final String code; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccount.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccount.java index d51a99340..d6e6f7917 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccount.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccount.java @@ -20,6 +20,7 @@ package org.apache.fineract.portfolio.shareaccounts.domain; import java.util.Date; import java.util.HashSet; +import java.util.Objects; import java.util.Set; import javax.persistence.CascadeType; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountCharge.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountCharge.java index feed81728..52f3b0aa7 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountCharge.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountCharge.java @@ -28,6 +28,7 @@ import javax.persistence.ManyToOne; import javax.persistence.Table; import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency; import org.apache.fineract.organisation.monetary.domain.Money; @@ -414,17 +415,4 @@ public class ShareAccountCharge extends AbstractPersistableCustom { public void setActive(boolean active) { this.active = active ; } - - @Override - public boolean equals(final Object obj) { - if (obj == null) { return false; } - if (obj == this) { return true; } - if (obj.getClass() != getClass()) { return false; } - final ShareAccountCharge rhs = (ShareAccountCharge) obj; - return new EqualsBuilder().appendSuper(super.equals(obj)) // - .append(getId(), rhs.getId()) // - .append(this.charge.getId(), rhs.charge.getId()) // - .append(this.amount, rhs.amount) // - .isEquals(); - } } diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountTransaction.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountTransaction.java index 9910421ec..b521fdda2 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountTransaction.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountTransaction.java @@ -18,24 +18,14 @@ */ package org.apache.fineract.portfolio.shareaccounts.domain; +import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; + +import javax.persistence.*; import java.math.BigDecimal; import java.util.Date; import java.util.HashSet; import java.util.Set; -import javax.persistence.CascadeType; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; -import javax.persistence.Table; -import javax.persistence.Temporal; -import javax.persistence.TemporalType; - -import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom; - @Entity @Table(name = "m_share_account_transactions") public class ShareAccountTransaction extends AbstractPersistableCustom { diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxComponentData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxComponentData.java index a61ba3325..d7ac1239d 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxComponentData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxComponentData.java @@ -18,6 +18,7 @@ */ package org.apache.fineract.portfolio.tax.data; +import java.io.Serializable; import java.math.BigDecimal; import java.util.Collection; import java.util.List; @@ -27,7 +28,7 @@ import org.apache.fineract.accounting.glaccount.data.GLAccountData; import org.apache.fineract.infrastructure.core.data.EnumOptionData; import org.joda.time.LocalDate; -public class TaxComponentData { +public class TaxComponentData implements Serializable { @SuppressWarnings("unused") private final Long id; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxComponentHistoryData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxComponentHistoryData.java index 400756658..bde0928d6 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxComponentHistoryData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxComponentHistoryData.java @@ -18,11 +18,12 @@ */ package org.apache.fineract.portfolio.tax.data; -import java.math.BigDecimal; - import org.joda.time.LocalDate; -public class TaxComponentHistoryData { +import java.io.Serializable; +import java.math.BigDecimal; + +public class TaxComponentHistoryData implements Serializable { @SuppressWarnings("unused") private final BigDecimal percentage; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxGroupData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxGroupData.java index 78a35f1bc..1d618a48f 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxGroupData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxGroupData.java @@ -18,9 +18,10 @@ */ package org.apache.fineract.portfolio.tax.data; +import java.io.Serializable; import java.util.Collection; -public class TaxGroupData { +public class TaxGroupData implements Serializable { private final Long id; private final String name; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxGroupMappingsData.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxGroupMappingsData.java index da0249217..d2cc723ea 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxGroupMappingsData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/data/TaxGroupMappingsData.java @@ -20,7 +20,9 @@ package org.apache.fineract.portfolio.tax.data; import org.joda.time.LocalDate; -public class TaxGroupMappingsData { +import java.io.Serializable; + +public class TaxGroupMappingsData implements Serializable { @SuppressWarnings("unused") private final Long id; diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/service/TransferWritePlatformServiceJpaRepositoryImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/service/TransferWritePlatformServiceJpaRepositoryImpl.java index f5e677e36..572fac2ac 100755 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/service/TransferWritePlatformServiceJpaRepositoryImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/transfer/service/TransferWritePlatformServiceJpaRepositoryImpl.java @@ -18,10 +18,9 @@ */ package org.apache.fineract.portfolio.transfer.service; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - +import com.google.common.collect.Iterables; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; import org.apache.fineract.infrastructure.core.data.CommandProcessingResultBuilder; @@ -32,17 +31,9 @@ import org.apache.fineract.organisation.office.domain.Office; import org.apache.fineract.organisation.office.domain.OfficeRepositoryWrapper; import org.apache.fineract.organisation.staff.domain.Staff; import org.apache.fineract.organisation.staff.domain.StaffRepositoryWrapper; -import org.apache.fineract.portfolio.calendar.domain.Calendar; -import org.apache.fineract.portfolio.calendar.domain.CalendarEntityType; -import org.apache.fineract.portfolio.calendar.domain.CalendarInstance; -import org.apache.fineract.portfolio.calendar.domain.CalendarInstanceRepository; -import org.apache.fineract.portfolio.calendar.domain.CalendarType; +import org.apache.fineract.portfolio.calendar.domain.*; import org.apache.fineract.portfolio.calendar.service.CalendarUtils; -import org.apache.fineract.portfolio.client.domain.Client; -import org.apache.fineract.portfolio.client.domain.ClientRepositoryWrapper; -import org.apache.fineract.portfolio.client.domain.ClientStatus; -import org.apache.fineract.portfolio.client.domain.ClientTransferDetails; -import org.apache.fineract.portfolio.client.domain.ClientTransferDetailsRepositoryWrapper; +import org.apache.fineract.portfolio.client.domain.*; import org.apache.fineract.portfolio.client.exception.ClientHasBeenClosedException; import org.apache.fineract.portfolio.group.domain.Group; import org.apache.fineract.portfolio.group.domain.GroupRepositoryWrapper; @@ -66,9 +57,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import com.google.common.collect.Iterables; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; @Service public class TransferWritePlatformServiceJpaRepositoryImpl implements TransferWritePlatformService { @@ -132,11 +123,11 @@ public class TransferWritePlatformServiceJpaRepositoryImpl implements TransferWr final List clients = assembleListOfClients(jsonCommand); - if (sourceGroupId == destinationGroupId) { throw new TransferNotSupportedException( + if (sourceGroupId.equals(destinationGroupId)) { throw new TransferNotSupportedException( TRANSFER_NOT_SUPPORTED_REASON.SOURCE_AND_DESTINATION_GROUP_CANNOT_BE_SAME, sourceGroupId, destinationGroupId); } /*** Do not allow bulk client transfers across branches ***/ - if (!(sourceOffice.getId() == destinationGroup.getOffice().getId())) { throw new TransferNotSupportedException( + if (!(sourceOffice.getId().equals(destinationGroup.getOffice().getId()))) { throw new TransferNotSupportedException( TRANSFER_NOT_SUPPORTED_REASON.BULK_CLIENT_TRANSFER_ACROSS_BRANCHES, sourceGroupId, destinationGroupId); } for (final Client client : clients) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/template/service/TemplateMergeService.java b/fineract-provider/src/main/java/org/apache/fineract/template/service/TemplateMergeService.java index a66133341..a74f6f2bc 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/template/service/TemplateMergeService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/template/service/TemplateMergeService.java @@ -18,25 +18,9 @@ */ package org.apache.fineract.template.service; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.StringReader; -import java.io.StringWriter; -import java.net.Authenticator; -import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.PasswordAuthentication; -import java.net.URL; -import java.security.KeyManagementException; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; - -import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil; +import com.github.mustachejava.DefaultMustacheFactory; +import com.github.mustachejava.Mustache; +import com.github.mustachejava.MustacheFactory; import org.apache.fineract.template.domain.Template; import org.apache.fineract.template.domain.TemplateFunctions; import org.codehaus.jackson.map.ObjectMapper; @@ -45,9 +29,18 @@ import org.slf4j.LoggerFactory; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; -import com.github.mustachejava.DefaultMustacheFactory; -import com.github.mustachejava.Mustache; -import com.github.mustachejava.MustacheFactory; +import java.io.*; +import java.net.Authenticator; +import java.net.HttpURLConnection; +import java.net.PasswordAuthentication; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; @Service public class TemplateMergeService { @@ -58,18 +51,13 @@ public class TemplateMergeService { private Map scopes; private String authToken; - // @Autowired - // public TemplateMergeService(final FromJsonHelper fromApiJsonHelper) { - // this.fromApiJsonHelper = fromApiJsonHelper; - // public void setAuthToken(final String authToken) { - //final String auth = ThreadLocalContextUtil.getAuthToken(); this.authToken = authToken; } - public String compile(final Template template, final Map scopes) throws MalformedURLException, IOException { + public String compile(final Template template, final Map scopes) throws IOException { this.scopes = scopes; this.scopes.put("static", new TemplateFunctions()); @@ -111,7 +99,7 @@ public class TemplateMergeService { } @SuppressWarnings("unchecked") - private Map getMapFromUrl(final String url) throws MalformedURLException, IOException { + private Map getMapFromUrl(final String url) throws IOException { final HttpURLConnection connection = getConnection(url); final String response = getStringFromInputStream(connection.getInputStream()); @@ -162,7 +150,7 @@ public class TemplateMergeService { String line; try { - br = new BufferedReader(new InputStreamReader(is)); + br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8)); while ((line = br.readLine()) != null) { sb.append(line); } diff --git a/fineract-provider/src/test/java/org/apache/fineract/commands/provider/CommandHandlerProviderTest.java b/fineract-provider/src/test/java/org/apache/fineract/commands/provider/CommandHandlerProviderTest.java index a3e9aa6db..598e8fdf8 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/commands/provider/CommandHandlerProviderTest.java +++ b/fineract-provider/src/test/java/org/apache/fineract/commands/provider/CommandHandlerProviderTest.java @@ -20,7 +20,6 @@ package org.apache.fineract.commands.provider; import org.apache.fineract.commands.exception.UnsupportedCommandException; import org.apache.fineract.commands.handler.NewCommandSourceHandler; -import org.apache.fineract.commands.provider.CommandHandlerProvider; import org.apache.fineract.infrastructure.configuration.spring.TestsWithoutDatabaseAndNoJobsConfiguration; import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.data.CommandProcessingResult; @@ -28,7 +27,6 @@ import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; diff --git a/fineract-provider/src/test/java/org/apache/fineract/mix/report/service/XBRLBuilderTest.java b/fineract-provider/src/test/java/org/apache/fineract/mix/report/service/XBRLBuilderTest.java index 7edfda0ae..5913b99f8 100644 --- a/fineract-provider/src/test/java/org/apache/fineract/mix/report/service/XBRLBuilderTest.java +++ b/fineract-provider/src/test/java/org/apache/fineract/mix/report/service/XBRLBuilderTest.java @@ -18,20 +18,6 @@ */ package org.apache.fineract.mix.report.service; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.mockito.Mockito.lenient; -import static org.mockito.Mockito.when; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.math.BigDecimal; -import java.sql.Date; -import java.util.HashMap; - -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - import org.apache.fineract.mix.data.MixTaxonomyData; import org.apache.fineract.mix.data.NamespaceData; import org.apache.fineract.mix.service.NamespaceReadPlatformServiceImpl; @@ -47,6 +33,20 @@ import org.mockito.runners.MockitoJUnitRunner; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.math.BigDecimal; +import java.nio.charset.StandardCharsets; +import java.sql.Date; +import java.util.HashMap; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Mockito.lenient; +import static org.mockito.Mockito.when; + @RunWith(MockitoJUnitRunner.class) public class XBRLBuilderTest { @@ -76,7 +76,8 @@ public class XBRLBuilderTest { System.out.println(result); NodeList nodes = null; try { - nodes = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(result.getBytes())) + nodes = + DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(result.getBytes(StandardCharsets.UTF_8))) .getElementsByTagName("Assets"); } catch (final SAXException e) { e.printStackTrace();