FINERACT-1724: Sonar fixes
Fineract Docker build - MariaDB / build (push) Canceled after 0s
Fineract Docker build - PostgreSQL / build (push) Canceled after 0s
Fineract Kafka Smoke / build (push) Canceled after 0s
Fineract Documentation build / build (push) Canceled after 0s
Fineract Build & Test - MariaDB / build (push) Canceled after 0s
Fineract Build & Test - MySQL / build (push) Canceled after 0s
Fineract Build & Test - PostgreSQL / build (push) Canceled after 0s
Fineract ActiveMQ Smoke / build (push) Canceled after 0s

This commit is contained in:
abraham.menyhart
2023-08-10 12:56:45 +02:00
committed by Adam Saghy
parent 33c1aa7874
commit d6c10e8303
31 changed files with 113 additions and 276 deletions
@@ -20,11 +20,8 @@ package org.apache.fineract.infrastructure.core.api;
import jakarta.ws.rs.core.MultivaluedMap;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.apache.fineract.infrastructure.core.serialization.JsonParserHelper;
@@ -148,16 +145,4 @@ public final class ApiParameterHelper {
public static boolean genericResultSetPassed(final MultivaluedMap<String, String> queryParams) {
return queryParams.getFirst("genericResultSet") != null;
}
public static Map<String, String> asMap(final MultivaluedMap<String, String> queryParameters) {
final Map<String, String> map = new HashMap<>(queryParameters.size());
for (final String parameterName : queryParameters.keySet()) {
final List<String> values = queryParameters.get(parameterName);
map.put(parameterName, values.get(0));
}
return map;
}
}
@@ -61,6 +61,7 @@ public class FineractProperties {
private FineractTemplateProperties template;
private FineractJpaProperties jpa;
private FineractDatabaseProperties database;
private FineractQueryProperties query;
private FineractApiProperties api;
private FineractSecurityProperties security;
@@ -398,6 +399,13 @@ public class FineractProperties {
private boolean statementLoggingEnabled;
}
@Getter
@Setter
public static class FineractDatabaseProperties {
private String defaultMasterPassword;
}
@Getter
@Setter
public static class FineractQueryProperties {
@@ -18,8 +18,6 @@
*/
package org.apache.fineract.infrastructure.core.data;
import static java.util.stream.Collectors.toList;
import com.google.common.base.Splitter;
import com.google.gson.JsonArray;
import java.math.BigDecimal;
@@ -176,13 +174,10 @@ public class DataValidatorBuilder {
return this;
}
/*** FIXME: Vishwas, why does this method have a parameter? Seems wrong ***/
/*
* This method is not meant for validation, if you have mandatory boolean param and if it has invalid value or value
* not passed then call this method, this method is always used with input as false
*/
public DataValidatorBuilder trueOrFalseRequired1(final boolean trueOfFalseFieldProvided) {
if (!trueOfFalseFieldProvided && !this.ignoreNullValue) {
public DataValidatorBuilder trueOrFalseRequired(final Object trueOfFalseField) {
if (trueOfFalseField != null && !trueOfFalseField.toString().equalsIgnoreCase("true")
&& !trueOfFalseField.toString().equalsIgnoreCase("false")) {
final StringBuilder validationErrorCode = new StringBuilder("validation.msg.").append(this.resource).append(".")
.append(this.parameter).append(".must.be.true.or.false");
final StringBuilder defaultEnglishMessage = new StringBuilder("The parameter `").append(this.parameter)
@@ -191,22 +186,6 @@ public class DataValidatorBuilder {
defaultEnglishMessage.toString(), this.parameter);
this.dataValidationErrors.add(error);
}
return this;
}
public DataValidatorBuilder trueOrFalseRequired(final Object trueOfFalseField) {
if (trueOfFalseField != null) {
if (!trueOfFalseField.toString().equalsIgnoreCase("true") && !trueOfFalseField.toString().equalsIgnoreCase("false")) {
final StringBuilder validationErrorCode = new StringBuilder("validation.msg.").append(this.resource).append(".")
.append(this.parameter).append(".must.be.true.or.false");
final StringBuilder defaultEnglishMessage = new StringBuilder("The parameter `").append(this.parameter)
.append("` must be set as true or false.");
final ApiParameterError error = ApiParameterError.parameterError(validationErrorCode.toString(),
defaultEnglishMessage.toString(), this.parameter);
this.dataValidationErrors.add(error);
}
}
return this;
}
@@ -320,7 +299,7 @@ public class DataValidatorBuilder {
final List<Object> rawValuesList = Arrays.asList(values);
if (this.value == null || !rawValuesList.contains(this.value)) {
final List<String> valuesList = Arrays.stream(values).map(Object::toString).collect(toList());
final List<String> valuesList = Arrays.stream(values).map(Object::toString).toList();
final String valuesListStr = String.join(", ", valuesList);
final StringBuilder validationErrorCode = new StringBuilder("validation.msg.").append(this.resource).append(".")
.append(this.parameter).append(".is.not.one.of.expected.enumerations");
@@ -349,7 +328,7 @@ public class DataValidatorBuilder {
final List<Object> rawValuesList = Arrays.asList(values);
if (this.value == null || !rawValuesList.contains(this.value.toString().toLowerCase())) {
final List<String> valuesList = Arrays.stream(values).map(Object::toString).collect(toList());
final List<String> valuesList = Arrays.stream(values).map(Object::toString).toList();
final String valuesListStr = String.join(", ", valuesList);
final StringBuilder validationErrorCode = new StringBuilder("validation.msg.").append(this.resource).append(".")
.append(this.parameter).append(".is.not.one.of.expected.enumerations");
@@ -397,7 +376,7 @@ public class DataValidatorBuilder {
final List<Object> rawValuesList = Arrays.asList(values);
if (rawValuesList.contains(this.value)) {
final List<String> valuesList = Arrays.stream(values).map(Object::toString).collect(toList());
final List<String> valuesList = Arrays.stream(values).map(Object::toString).toList();
final String valuesListStr = String.join(", ", valuesList);
final StringBuilder validationErrorCode = new StringBuilder("validation.msg.").append(this.resource).append(".")
.append(this.parameter).append(".is.one.of.unwanted.enumerations");
@@ -879,17 +858,15 @@ public class DataValidatorBuilder {
}
public DataValidatorBuilder compareMinAndMaxOfTwoBigDecmimalNos(final BigDecimal min, final BigDecimal max) {
if (min != null && max != null) {
if (max.compareTo(min) < 0) {
final StringBuilder validationErrorCode = new StringBuilder("validation.msg.").append(this.resource).append(".")
.append(this.parameter).append(".is.not.within.expected.range");
final StringBuilder defaultEnglishMessage = new StringBuilder("The ").append(" min number ").append(min)
.append(" should less than max number ").append(max).append(".");
final ApiParameterError error = ApiParameterError.parameterError(validationErrorCode.toString(),
defaultEnglishMessage.toString(), this.parameter, min, max);
this.dataValidationErrors.add(error);
return this;
}
if (min != null && max != null && max.compareTo(min) < 0) {
final StringBuilder validationErrorCode = new StringBuilder("validation.msg.").append(this.resource).append(".")
.append(this.parameter).append(".is.not.within.expected.range");
final StringBuilder defaultEnglishMessage = new StringBuilder("The ").append(" min number ").append(min)
.append(" should less than max number ").append(max).append(".");
final ApiParameterError error = ApiParameterError.parameterError(validationErrorCode.toString(),
defaultEnglishMessage.toString(), this.parameter, min, max);
this.dataValidationErrors.add(error);
return this;
}
return this;
}
@@ -34,8 +34,6 @@ public class DatabasePasswordEncryptor implements PasswordEncryptor {
public static final String DEFAULT_ENCRYPTION = "AES/CBC/PKCS5Padding";
public static final String DEFAULT_MASTER_PASSWORD = "fineract";
private final FineractProperties fineractProperties;
@SuppressWarnings("checkstyle:regexpsinglelinejava")
@@ -54,7 +52,8 @@ public class DatabasePasswordEncryptor implements PasswordEncryptor {
@Override
public String encrypt(String plainPassword) {
String masterPassword = Optional.ofNullable(fineractProperties.getTenant())
.map(FineractProperties.FineractTenantProperties::getMasterPassword).orElse(DEFAULT_MASTER_PASSWORD);
.map(FineractProperties.FineractTenantProperties::getMasterPassword)
.orElse(fineractProperties.getDatabase().getDefaultMasterPassword());
String encryption = Optional.ofNullable(fineractProperties.getTenant())
.map(FineractProperties.FineractTenantProperties::getEncryption).orElse(DEFAULT_ENCRYPTION);
return EncryptionUtil.encryptToBase64(encryption, masterPassword, plainPassword);
@@ -63,7 +62,8 @@ public class DatabasePasswordEncryptor implements PasswordEncryptor {
@Override
public String decrypt(String encryptedPassword) {
String masterPassword = Optional.ofNullable(fineractProperties.getTenant())
.map(FineractProperties.FineractTenantProperties::getMasterPassword).orElse(DEFAULT_MASTER_PASSWORD);
.map(FineractProperties.FineractTenantProperties::getMasterPassword)
.orElse(fineractProperties.getDatabase().getDefaultMasterPassword());
String encryption = Optional.ofNullable(fineractProperties.getTenant())
.map(FineractProperties.FineractTenantProperties::getEncryption).orElse(DEFAULT_ENCRYPTION);
return EncryptionUtil.decryptFromBase64(encryption, masterPassword, encryptedPassword);
@@ -73,7 +73,7 @@ public class DatabasePasswordEncryptor implements PasswordEncryptor {
String masterPassword = Optional.ofNullable(fineractProperties) //
.map(FineractProperties::getTenant) //
.map(FineractProperties.FineractTenantProperties::getMasterPassword) //
.orElse(DEFAULT_MASTER_PASSWORD);
.orElse(fineractProperties.getDatabase().getDefaultMasterPassword());
return BCrypt.hashpw(masterPassword.getBytes(StandardCharsets.UTF_8), BCrypt.gensalt());
}
@@ -81,7 +81,7 @@ public class DatabasePasswordEncryptor implements PasswordEncryptor {
String masterPassword = Optional.ofNullable(fineractProperties) //
.map(FineractProperties::getTenant) //
.map(FineractProperties.FineractTenantProperties::getMasterPassword) //
.orElse(DEFAULT_MASTER_PASSWORD);
.orElse(fineractProperties.getDatabase().getDefaultMasterPassword());
return BCrypt.checkpw(masterPassword, hashed);
}
}
@@ -71,8 +71,7 @@ public final class WorkingDaysUtil {
adjustedDateDetailsDTO.setChangedScheduleDate(changedScheduleDate);
}
public static RepaymentRescheduleType getRepaymentRescheduleType(final WorkingDays workingDays, final LocalDate date) {
RepaymentRescheduleType rescheduleType = RepaymentRescheduleType.fromInt(workingDays.getRepaymentReschedulingType());
return rescheduleType;
public static RepaymentRescheduleType getRepaymentRescheduleType(final WorkingDays workingDays) {
return RepaymentRescheduleType.fromInt(workingDays.getRepaymentReschedulingType());
}
}
@@ -377,30 +377,16 @@ public final class CalendarData implements Serializable {
}
public boolean isStartDateBeforeOrEqual(final LocalDate compareDate) {
if (this.startDate != null && compareDate != null) {
if (this.startDate.isBefore(compareDate) || this.startDate.equals(compareDate)) {
return true;
}
}
return false;
return this.startDate != null && compareDate != null
&& (this.startDate.isBefore(compareDate) || this.startDate.equals(compareDate));
}
public boolean isEndDateAfterOrEqual(final LocalDate compareDate) {
if (this.endDate != null && compareDate != null) {
if (this.endDate.isAfter(compareDate) || this.endDate.isEqual(compareDate)) {
return true;
}
}
return false;
return this.endDate != null && compareDate != null && (this.endDate.isAfter(compareDate) || this.endDate.isEqual(compareDate));
}
public boolean isBetweenStartAndEndDate(final LocalDate compareDate) {
if (isStartDateBeforeOrEqual(compareDate)) {
if (this.endDate == null || isEndDateAfterOrEqual(compareDate)) {
return true;
}
}
return false;
return isStartDateBeforeOrEqual(compareDate) && (this.endDate == null || isEndDateAfterOrEqual(compareDate));
}
public boolean isValidRecurringDate(final LocalDate compareDate, final Boolean isSkipMeetingOnFirstDay, final Integer numberOfDays) {
@@ -153,10 +153,7 @@ public class Calendar extends AbstractAuditableWithUTCDateTimeCustom {
public static Calendar fromJson(final JsonCommand command) {
// final Long entityId = command.getSupportedEntityId();
// final Integer entityTypeId =
// CalendarEntityType.valueOf(command.getSupportedEntityType().toUpperCase()).getValue();
LocalTime meetingtime = null;
LocalTime meetingtime;
final String title = command.stringValueOfParameterNamed(CalendarSupportedParameters.TITLE.getValue());
final String description = command.stringValueOfParameterNamed(CalendarSupportedParameters.DESCRIPTION.getValue());
final String location = command.stringValueOfParameterNamed(CalendarSupportedParameters.LOCATION.getValue());
@@ -304,10 +301,6 @@ public class Calendar extends AbstractAuditableWithUTCDateTimeCustom {
final String newMeetingType = CalendarType.fromInt(newValue).name();
throw new CalendarParameterUpdateNotSupportedException("meeting.type", defaultUserMessage, newMeetingType, oldMeeingType);
/*
* final Integer newValue = command.integerValueSansLocaleOfParameterNamed(typeParamName);
* actualChanges.put(typeParamName, newValue); this.typeId = newValue;
*/
}
final String repeatingParamName = CalendarSupportedParameters.REPEATING.getValue();
@@ -401,11 +394,9 @@ public class Calendar extends AbstractAuditableWithUTCDateTimeCustom {
final Integer interval, final Integer repeatsOnDay, final Integer repeatsOnNthDay) {
final Map<String, Object> actualChanges = new LinkedHashMap<>(9);
if (calendarStartDate != null && this.startDate != null) {
if (!calendarStartDate.equals(this.getStartDateLocalDate())) {
actualChanges.put("startDate", calendarStartDate);
this.startDate = calendarStartDate;
}
if (calendarStartDate != null && this.startDate != null && !calendarStartDate.equals(this.getStartDateLocalDate())) {
actualChanges.put("startDate", calendarStartDate);
this.startDate = calendarStartDate;
}
final String newRecurrence = Calendar.constructRecurrence(frequencyType, interval, repeatsOnDay, repeatsOnNthDay);
@@ -488,46 +479,21 @@ public class Calendar extends AbstractAuditableWithUTCDateTimeCustom {
}
public boolean isStartDateBeforeOrEqual(final LocalDate compareDate) {
if (this.startDate != null && compareDate != null) {
if (getStartDateLocalDate().isBefore(compareDate) || getStartDateLocalDate().equals(compareDate)) {
return true;
}
}
return false;
return this.startDate != null && compareDate != null
&& (getStartDateLocalDate().isBefore(compareDate) || getStartDateLocalDate().equals(compareDate));
}
public boolean isStartDateAfter(final LocalDate compareDate) {
if (this.startDate != null && compareDate != null && getStartDateLocalDate().isAfter(compareDate)) {
return true;
}
return false;
}
public boolean isStartDateAfterOrEqual(final LocalDate compareDate) {
if (this.startDate != null && compareDate != null) {
if (getStartDateLocalDate().isAfter(compareDate) || getStartDateLocalDate().isEqual(compareDate)) {
return true;
}
}
return false;
return this.startDate != null && compareDate != null && getStartDateLocalDate().isAfter(compareDate);
}
public boolean isEndDateAfterOrEqual(final LocalDate compareDate) {
if (this.endDate != null && compareDate != null) {
if (getEndDateLocalDate().isAfter(compareDate) || getEndDateLocalDate().isEqual(compareDate)) {
return true;
}
}
return false;
return this.endDate != null && compareDate != null
&& (getEndDateLocalDate().isAfter(compareDate) || getEndDateLocalDate().isEqual(compareDate));
}
public boolean isBetweenStartAndEndDate(final LocalDate compareDate) {
if (isStartDateBeforeOrEqual(compareDate)) {
if (getEndDateLocalDate() == null || isEndDateAfterOrEqual(compareDate)) {
return true;
}
}
return false;
return isStartDateBeforeOrEqual(compareDate) && (getEndDateLocalDate() == null || isEndDateAfterOrEqual(compareDate));
}
private static String constructRecurrence(final JsonCommand command, final Calendar calendar) {
@@ -104,30 +104,17 @@ public class CalendarHistory extends AbstractPersistableCustom {
}
public boolean isEndDateAfterOrEqual(final LocalDate compareDate) {
if (this.endDate != null && compareDate != null) {
if (getEndDateLocalDate().isAfter(compareDate) || getEndDateLocalDate().isEqual(compareDate)) {
return true;
}
}
return false;
return this.endDate != null && compareDate != null
&& (getEndDateLocalDate().isAfter(compareDate) || getEndDateLocalDate().isEqual(compareDate));
}
public boolean isStartDateBeforeOrEqual(final LocalDate compareDate) {
if (this.startDate != null && compareDate != null) {
if (getStartDateLocalDate().isBefore(compareDate) || getStartDateLocalDate().equals(compareDate)) {
return true;
}
}
return false;
return this.startDate != null && compareDate != null
&& (getStartDateLocalDate().isBefore(compareDate) || getStartDateLocalDate().equals(compareDate));
}
public boolean isBetweenStartAndEndDate(final LocalDate compareDate) {
if (isStartDateBeforeOrEqual(compareDate)) {
if (getEndDateLocalDate() == null || isEndDateAfterOrEqual(compareDate)) {
return true;
}
}
return false;
return isStartDateBeforeOrEqual(compareDate) && (getEndDateLocalDate() == null || isEndDateAfterOrEqual(compareDate));
}
public void updateEndDate(LocalDate historyCalEndDate) {
@@ -833,7 +833,7 @@ public final class CalendarUtils {
LocalDate nextRepaymentDate = null;
if (applyWorkingDays) {
if (WorkingDaysUtil.isNonWorkingDay(workingDays, newRepaymentDate)
&& WorkingDaysUtil.getRepaymentRescheduleType(workingDays, newRepaymentDate).isMoveToNextRepaymentDay()) {
&& WorkingDaysUtil.getRepaymentRescheduleType(workingDays).isMoveToNextRepaymentDay()) {
newRepaymentDate = getNextRepaymentMeetingDate(recurringRule, seedDate, newRepaymentDate.plusDays(1), loanRepaymentInterval,
frequency, workingDays, isSkipRepaymentOnFirstDayOfMonth, numberOfDays, isCalledFirstTime, applyWorkingDays);
} else {
@@ -851,7 +851,7 @@ public final class CalendarUtils {
final LocalDate newRepaymentDateTemp = adjustRecurringDate(newRepaymentDate, numberOfDays);
if (applyWorkingDays) {
if (WorkingDaysUtil.isNonWorkingDay(workingDays, newRepaymentDateTemp)
&& WorkingDaysUtil.getRepaymentRescheduleType(workingDays, newRepaymentDateTemp).isMoveToNextRepaymentDay()) {
&& WorkingDaysUtil.getRepaymentRescheduleType(workingDays).isMoveToNextRepaymentDay()) {
newRepaymentDate = getNextRepaymentMeetingDate(recurringRule, seedDate, newRepaymentDate.plusDays(1),
loanRepaymentInterval, frequency, workingDays, isSkipRepaymentOnFirstDayOfMonth, numberOfDays,
isCalledFirstTime, applyWorkingDays);
@@ -95,7 +95,7 @@ public enum DepositAccountType {
public String resourceName() {
String resourceName = "INVALID";
String resourceName;
switch (this) {
case FIXED_DEPOSIT:
@@ -28,7 +28,6 @@ import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import java.util.stream.Collectors;
import lombok.Getter;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
@@ -229,14 +228,10 @@ public final class SavingsAccountData implements Serializable {
this.savingsAmountOnHold = null;
}
public static final Comparator<SavingsAccountData> ClientNameComparator = new Comparator<SavingsAccountData>() {
@Override
public int compare(SavingsAccountData savings1, SavingsAccountData savings2) {
String clientOfSavings1 = savings1.getClientName().toUpperCase(Locale.ENGLISH);
String clientOfSavings2 = savings2.getClientName().toUpperCase(Locale.ENGLISH);
return clientOfSavings1.compareTo(clientOfSavings2);
}
public static final Comparator<SavingsAccountData> ClientNameComparator = (savings1, savings2) -> {
String clientOfSavings1 = savings1.getClientName().toUpperCase(Locale.ENGLISH);
String clientOfSavings2 = savings2.getClientName().toUpperCase(Locale.ENGLISH);
return clientOfSavings1.compareTo(clientOfSavings2);
};
public void setNewSavingsAccountTransactionData(final SavingsAccountTransactionData savingsAccountTransactionData) {
@@ -395,7 +390,7 @@ public final class SavingsAccountData implements Serializable {
}
public List<SavingsAccountTransactionData> getSavingsAccountTransactionsWithPivotConfig() {
return this.transactions.stream().collect(Collectors.toList());
return this.transactions.stream().toList();
}
public Boolean isAccrualBasedAccountingEnabledOnSavingsProduct() {
@@ -167,7 +167,7 @@ public class SavingsAccountSummaryData implements Serializable {
this.totalDeposits = wrapper.calculateTotalDeposits(currency, savingsAccountTransactions);
this.totalWithdrawals = wrapper.calculateTotalWithdrawals(currency, savingsAccountTransactions);
final HashMap<String, Money> map = updateRunningBalanceAndPivotDate(true, savingsAccountTransactions, interestTotal,
overdraftInterestTotal, withHoldTaxTotal, currency);
overdraftInterestTotal, withHoldTaxTotal);
interestTotal = map.get("interestTotal");
withHoldTaxTotal = map.get("withHoldTax");
overdraftInterestTotal = map.get("overdraftInterestTotal");
@@ -200,7 +200,7 @@ public class SavingsAccountSummaryData implements Serializable {
@SuppressWarnings("unchecked")
private HashMap<String, Money> updateRunningBalanceAndPivotDate(final boolean backdatedTxnsAllowedTill,
final List<SavingsAccountTransactionData> savingsAccountTransactions, Money interestTotal, Money overdraftInterestTotal,
Money withHoldTaxTotal, CurrencyData currency) {
Money withHoldTaxTotal) {
boolean isUpdated = false;
HashMap<String, Money> map = new HashMap<>();
for (int i = savingsAccountTransactions.size() - 1; i >= 0; i--) {
@@ -257,7 +257,7 @@ public class SavingsAccountSummaryData implements Serializable {
this.totalWithholdTax = wrapper.calculateTotalWithholdTaxWithdrawal(currency, transactions);
// boolean isUpdated = false;
updateRunningBalanceAndPivotDate(false, transactions, null, null, null, currency);
updateRunningBalanceAndPivotDate(false, transactions, null, null, null);
this.accountBalance = Money.of(currency, this.totalDeposits).plus(this.totalInterestPosted).minus(this.totalWithdrawals)
.minus(this.totalWithdrawalFees).minus(this.totalAnnualFees).minus(this.totalFeeCharge).minus(this.totalPenaltyCharge)
@@ -661,16 +661,6 @@ public final class SavingsEnumerations {
return optionData;
}
public static List<EnumOptionData> depositTermFrequencyType(final SavingsPeriodFrequencyType[] types) {
final List<EnumOptionData> optionDatas = new ArrayList<>();
for (final SavingsPeriodFrequencyType type : types) {
if (!type.isInvalid()) {
optionDatas.add(recurringDepositFrequencyType(type));
}
}
return optionDatas;
}
public static EnumOptionData inMultiplesOfDepositTermFrequencyType(final int id) {
return depositTermFrequencyType(SavingsPeriodFrequencyType.fromInt(id));
}
@@ -702,16 +692,6 @@ public final class SavingsEnumerations {
return optionData;
}
public static List<EnumOptionData> inMultiplesOfDepositTermFrequencyType(final SavingsPeriodFrequencyType[] types) {
final List<EnumOptionData> optionDatas = new ArrayList<>();
for (final SavingsPeriodFrequencyType type : types) {
if (!type.isInvalid()) {
optionDatas.add(recurringDepositFrequencyType(type));
}
}
return optionDatas;
}
public static EnumOptionData depositType(final Integer id) {
return depositType(DepositAccountType.fromInt(id));
}