FINERACT-2267: Use the proper not-null annotation in Fineract code base

This commit is contained in:
a7med3del1973
2025-05-27 20:21:19 +02:00
committed by Adam Saghy
parent 8d7d8ca7ef
commit d71c0bd204
44 changed files with 138 additions and 140 deletions
@@ -57,9 +57,9 @@ import org.apache.fineract.infrastructure.core.filters.BatchCallHandler;
import org.apache.fineract.infrastructure.core.filters.BatchFilter;
import org.apache.fineract.infrastructure.core.filters.BatchRequestPreprocessor;
import org.apache.fineract.infrastructure.core.persistence.ExtendedJpaTransactionManager;
import org.jetbrains.annotations.NotNull;
import org.springframework.dao.ConcurrencyFailureException;
import org.springframework.dao.NonTransientDataAccessException;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Service;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionException;
@@ -288,8 +288,8 @@ public class BatchApiServiceImpl implements BatchApiService {
* the current request node
* @return {@code BatchResponse} list of the generated batch responses
*/
private List<BatchResponse> parentRequestFailedRecursive(@NotNull BatchRequest request, @NotNull BatchRequestNode requestNode,
@NotNull BatchResponse response, Long parentId) {
private List<BatchResponse> parentRequestFailedRecursive(@NonNull BatchRequest request, @NonNull BatchRequestNode requestNode,
@NonNull BatchResponse response, Long parentId) {
List<BatchResponse> responseList = new ArrayList<>();
if (parentId == null) { // root
BatchRequestContextHolder.getEnclosingTransaction().ifPresent(TransactionExecution::setRollbackOnly);
@@ -339,8 +339,8 @@ public class BatchApiServiceImpl implements BatchApiService {
return response;
}
@NotNull
private List<BatchResponse> buildErrorResponses(Throwable ex, @NotNull List<BatchResponse> responseList) {
@NonNull
private List<BatchResponse> buildErrorResponses(Throwable ex, @NonNull List<BatchResponse> responseList) {
BatchResponse response = responseList.isEmpty() ? null
: responseList.stream().filter(e -> e.getStatusCode() == null || e.getStatusCode() != SC_OK).findFirst()
.orElse(responseList.get(responseList.size() - 1));
@@ -39,7 +39,7 @@ import org.apache.fineract.infrastructure.core.exception.GeneralPlatformDomainRu
import org.apache.fineract.infrastructure.core.exception.IdempotentCommandProcessUnderProcessingException;
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
import org.apache.fineract.useradministration.domain.AppUser;
import org.jetbrains.annotations.NotNull;
import org.springframework.lang.NonNull;
import org.springframework.orm.jpa.JpaSystemException;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Isolation;
@@ -63,19 +63,19 @@ public class CommandSourceService {
private final ErrorHandler errorHandler;
private final FromJsonHelper fromApiJsonHelper;
@NotNull
@NonNull
@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.REPEATABLE_READ)
public CommandSource saveInitialNewTransaction(CommandWrapper wrapper, JsonCommand jsonCommand, AppUser maker, String idempotencyKey) {
return saveInitial(wrapper, jsonCommand, maker, idempotencyKey);
}
@NotNull
@NonNull
@Transactional(propagation = Propagation.REQUIRED)
public CommandSource saveInitialSameTransaction(CommandWrapper wrapper, JsonCommand jsonCommand, AppUser maker, String idempotencyKey) {
return saveInitial(wrapper, jsonCommand, maker, idempotencyKey);
}
@NotNull
@NonNull
private CommandSource saveInitial(CommandWrapper wrapper, JsonCommand jsonCommand, AppUser maker, String idempotencyKey) {
try {
CommandSource initialCommandSource = getInitialCommandSource(wrapper, jsonCommand, maker, idempotencyKey);
@@ -90,17 +90,17 @@ public class CommandSourceService {
}
@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.REPEATABLE_READ)
public CommandSource saveResultNewTransaction(@NotNull CommandSource commandSource) {
public CommandSource saveResultNewTransaction(@NonNull CommandSource commandSource) {
return saveResult(commandSource);
}
@Transactional(propagation = Propagation.REQUIRED)
public CommandSource saveResultSameTransaction(@NotNull CommandSource commandSource) {
public CommandSource saveResultSameTransaction(@NonNull CommandSource commandSource) {
return saveResult(commandSource);
}
@NotNull
private CommandSource saveResult(@NotNull CommandSource commandSource) {
@NonNull
private CommandSource saveResult(@NonNull CommandSource commandSource) {
return commandSourceRepository.saveAndFlush(commandSource);
}
@@ -151,7 +151,7 @@ public class CommandSourceService {
return result;
}
private void sanitizeJson(@NotNull CommandSource commandSource, Set<String> sanitizeKeys) {
private void sanitizeJson(@NonNull CommandSource commandSource, Set<String> sanitizeKeys) {
if (sanitizeKeys == null || sanitizeKeys.isEmpty()) {
return;
}
@@ -32,7 +32,7 @@ import org.apache.commons.lang3.mutable.MutableObject;
import org.apache.fineract.commands.service.SynchronousCommandProcessingService;
import org.apache.fineract.infrastructure.core.config.FineractProperties;
import org.apache.fineract.infrastructure.core.domain.FineractRequestContextHolder;
import org.jetbrains.annotations.NotNull;
import org.springframework.lang.NonNull;
import org.springframework.web.filter.OncePerRequestFilter;
import org.springframework.web.util.ContentCachingResponseWrapper;
@@ -45,8 +45,8 @@ public class IdempotencyStoreFilter extends OncePerRequestFilter {
private final FineractProperties fineractProperties;
@Override
protected void doFilterInternal(@NotNull HttpServletRequest request, @NotNull HttpServletResponse response,
@NotNull FilterChain filterChain) throws ServletException, IOException {
protected void doFilterInternal(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response,
@NonNull FilterChain filterChain) throws ServletException, IOException {
Mutable<ContentCachingResponseWrapper> wrapper = new MutableObject<>();
if (helper.isAllowedContentTypeRequest(request)) {
wrapper.setValue(new ContentCachingResponseWrapper(response));
@@ -26,7 +26,6 @@ import static org.apache.fineract.infrastructure.dataqueries.api.DataTableApiCon
import static org.apache.fineract.portfolio.search.SearchConstants.API_PARAM_COLUMN;
import com.google.gson.JsonObject;
import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.sql.Date;
import java.sql.Timestamp;
@@ -56,6 +55,7 @@ import org.apache.fineract.infrastructure.security.service.SqlValidator;
import org.apache.fineract.portfolio.search.data.ColumnFilterData;
import org.apache.fineract.portfolio.search.data.FilterData;
import org.springframework.jdbc.support.rowset.SqlRowSet;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component;
@Slf4j
@@ -69,18 +69,18 @@ public class SearchUtil {
private final SqlValidator sqlValidator;
@NotNull
public Map<String, ResultsetColumnHeaderData> mapHeadersToName(@NotNull Collection<ResultsetColumnHeaderData> columnHeaders) {
@NonNull
public Map<String, ResultsetColumnHeaderData> mapHeadersToName(@NonNull Collection<ResultsetColumnHeaderData> columnHeaders) {
return columnHeaders.stream().collect(Collectors.toMap(ResultsetColumnHeaderData::getColumnName, e -> e));
}
public ResultsetColumnHeaderData findFiltered(@NotNull Collection<ResultsetColumnHeaderData> columnHeaders,
@NotNull Predicate<ResultsetColumnHeaderData> filter) {
public ResultsetColumnHeaderData findFiltered(@NonNull Collection<ResultsetColumnHeaderData> columnHeaders,
@NonNull Predicate<ResultsetColumnHeaderData> filter) {
return columnHeaders.stream().filter(filter).findFirst().orElse(null);
}
public ResultsetColumnHeaderData getFiltered(@NotNull Collection<ResultsetColumnHeaderData> columnHeaders,
@NotNull Predicate<ResultsetColumnHeaderData> filter) {
public ResultsetColumnHeaderData getFiltered(@NonNull Collection<ResultsetColumnHeaderData> columnHeaders,
@NonNull Predicate<ResultsetColumnHeaderData> filter) {
ResultsetColumnHeaderData filtered = findFiltered(columnHeaders, filter);
if (filtered == null) {
throw new PlatformDataIntegrityException("error.msg.column.not.exists", "Column filtered does not exist");
@@ -88,8 +88,8 @@ public class SearchUtil {
return filtered;
}
public void extractJsonResult(@NotNull SqlRowSet rowSet, @NotNull List<String> selectColumns, @NotNull List<String> resultColumns,
@NotNull List<JsonObject> results) {
public void extractJsonResult(@NonNull SqlRowSet rowSet, @NonNull List<String> selectColumns, @NonNull List<String> resultColumns,
@NonNull List<JsonObject> results) {
JsonObject json = new JsonObject();
for (int i = 0; i < selectColumns.size(); i++) {
Object rowValue = rowSet.getObject(selectColumns.get(i));
@@ -120,14 +120,14 @@ public class SearchUtil {
}
}
@NotNull
@NonNull
public List<String> validateToJdbcColumnNames(List<String> columns, Map<String, ResultsetColumnHeaderData> headersByName,
boolean allowEmpty) {
List<ResultsetColumnHeaderData> columnHeaders = validateToJdbcColumns(columns, headersByName, allowEmpty);
return columnHeaders.stream().map(e -> e == null ? null : e.getColumnName()).toList();
}
@NotNull
@NonNull
public List<ResultsetColumnHeaderData> validateToJdbcColumns(List<String> columns, Map<String, ResultsetColumnHeaderData> headersByName,
boolean allowEmpty) {
final List<ApiParameterError> errors = new ArrayList<>();
@@ -151,7 +151,7 @@ public class SearchUtil {
return columnHeader == null ? null : columnHeader.getColumnName();
}
public ResultsetColumnHeaderData validateToJdbcColumn(String column, @NotNull Map<String, ResultsetColumnHeaderData> headersByName,
public ResultsetColumnHeaderData validateToJdbcColumn(String column, @NonNull Map<String, ResultsetColumnHeaderData> headersByName,
boolean allowEmpty) {
final List<ApiParameterError> errors = new ArrayList<>();
ResultsetColumnHeaderData columnHeader = validateToJdbcColumnImpl(column, headersByName, errors, allowEmpty);
@@ -161,8 +161,8 @@ public class SearchUtil {
return columnHeader;
}
private ResultsetColumnHeaderData validateToJdbcColumnImpl(String column, @NotNull Map<String, ResultsetColumnHeaderData> headersByName,
@NotNull List<ApiParameterError> errors, boolean allowEmpty) {
private ResultsetColumnHeaderData validateToJdbcColumnImpl(String column, @NonNull Map<String, ResultsetColumnHeaderData> headersByName,
@NonNull List<ApiParameterError> errors, boolean allowEmpty) {
if (!allowEmpty && column == null) {
errors.add(parameterErrorWithValue("error.msg.column.empty", "Column filter is empty", API_PARAM_COLUMN, null));
}
@@ -179,9 +179,9 @@ public class SearchUtil {
return columnHeader;
}
public boolean buildQueryCondition(List<ColumnFilterData> columnFilters, @NotNull StringBuilder where, @NotNull List<Object> params,
public boolean buildQueryCondition(List<ColumnFilterData> columnFilters, @NonNull StringBuilder where, @NonNull List<Object> params,
String alias, Map<String, ResultsetColumnHeaderData> headersByName, String dateFormat, String dateTimeFormat, Locale locale,
boolean embedded, @NotNull DatabaseSpecificSQLGenerator sqlGenerator) {
boolean embedded, @NonNull DatabaseSpecificSQLGenerator sqlGenerator) {
if (columnFilters == null) {
return false;
}
@@ -198,9 +198,9 @@ public class SearchUtil {
return added;
}
public boolean buildFilterCondition(ColumnFilterData columnFilter, @NotNull StringBuilder where, @NotNull List<Object> params,
public boolean buildFilterCondition(ColumnFilterData columnFilter, @NonNull StringBuilder where, @NonNull List<Object> params,
String alias, Map<String, ResultsetColumnHeaderData> headersByName, String dateFormat, String dateTimeFormat, Locale locale,
boolean embedded, @NotNull DatabaseSpecificSQLGenerator sqlGenerator) {
boolean embedded, @NonNull DatabaseSpecificSQLGenerator sqlGenerator) {
String columnName = columnFilter.getColumn();
List<FilterData> filters = columnFilter.getFilters();
int size = filters.size();
@@ -227,8 +227,8 @@ public class SearchUtil {
return size > 0;
}
public void buildCondition(@NotNull String definition, JdbcJavaType columnType, @NotNull SqlOperator operator, List<Object> values,
@NotNull StringBuilder where, @NotNull List<Object> params, String alias, @NotNull DatabaseSpecificSQLGenerator sqlGenerator) {
public void buildCondition(@NonNull String definition, JdbcJavaType columnType, @NonNull SqlOperator operator, List<Object> values,
@NonNull StringBuilder where, @NonNull List<Object> params, String alias, @NonNull DatabaseSpecificSQLGenerator sqlGenerator) {
int paramCount = values == null ? 0 : values.size();
where.append(operator.formatPlaceholder(sqlGenerator, definition, paramCount, alias));
if (values != null) {
@@ -236,14 +236,14 @@ public class SearchUtil {
}
}
public Object parseJdbcColumnValue(@NotNull ResultsetColumnHeaderData columnHeader, String columnValue, String dateFormat,
String dateTimeFormat, Locale locale, boolean strict, @NotNull DatabaseSpecificSQLGenerator sqlGenerator) {
public Object parseJdbcColumnValue(@NonNull ResultsetColumnHeaderData columnHeader, String columnValue, String dateFormat,
String dateTimeFormat, Locale locale, boolean strict, @NonNull DatabaseSpecificSQLGenerator sqlGenerator) {
return columnHeader.getColumnType().toJdbcValue(sqlGenerator.getDialect(),
parseColumnValue(columnHeader, columnValue, dateFormat, dateTimeFormat, locale, strict, sqlGenerator), false);
}
public Object parseColumnValue(@NotNull ResultsetColumnHeaderData columnHeader, String columnValue, String dateFormat,
String dateTimeFormat, Locale locale, boolean strict, @NotNull DatabaseSpecificSQLGenerator sqlGenerator) {
public Object parseColumnValue(@NonNull ResultsetColumnHeaderData columnHeader, String columnValue, String dateFormat,
String dateTimeFormat, Locale locale, boolean strict, @NonNull DatabaseSpecificSQLGenerator sqlGenerator) {
JdbcJavaType colType = columnHeader.getColumnType();
if (!colType.isStringType() || !columnHeader.isMandatory()) {
columnValue = StringUtils.trimToNull(columnValue);
@@ -44,7 +44,7 @@ import org.apache.fineract.organisation.office.domain.Office;
import org.apache.fineract.portfolio.PortfolioProductType;
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
import org.apache.fineract.portfolio.loanaccount.domain.LoanStatus;
import org.jetbrains.annotations.NotNull;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Service;
@Service
@@ -97,7 +97,7 @@ public class AccountingServiceImpl implements AccountingService {
});
}
@NotNull
@NonNull
private List<JournalEntry> createJournalEntries(final Loan loan, final ExternalAssetOwnerTransfer transfer,
final boolean isReversalOrder) {
this.helper.checkForBranchClosures(loan.getOffice().getId(), transfer.getSettlementDate());
@@ -48,7 +48,7 @@ import org.apache.fineract.investor.domain.InvestorBusinessEvent;
import org.apache.fineract.investor.service.ExternalAssetOwnersReadService;
import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency;
import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge;
import org.jetbrains.annotations.NotNull;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component;
@Component
@@ -116,7 +116,7 @@ public class InvestorBusinessEventSerializer extends AbstractBusinessEventWithCu
return builder.build();
}
@NotNull
@NonNull
private static String getType(ExternalTransferStatus transferStatus) {
if (transferStatus == BUYBACK || transferStatus == BUYBACK_INTERMEDIATE) {
return "BUYBACK";
@@ -58,7 +58,7 @@ import org.apache.fineract.portfolio.loanaccount.domain.Loan;
import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment;
import org.apache.fineract.portfolio.loanaccount.domain.LoanRepository;
import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction;
import org.jetbrains.annotations.NotNull;
import org.springframework.lang.NonNull;
import org.springframework.transaction.annotation.Transactional;
@RequiredArgsConstructor
@@ -192,7 +192,7 @@ public class DelinquencyReadPlatformServiceImpl implements DelinquencyReadPlatfo
}
}
@NotNull
@NonNull
private static Collector<InstallmentLevelDelinquency, ?, InstallmentLevelDelinquency> delinquentAmountSummingCollector() {
return Collectors.reducing(new InstallmentLevelDelinquency(), (item1, item2) -> {
final InstallmentLevelDelinquency result = new InstallmentLevelDelinquency();
@@ -213,7 +213,7 @@ public class DelinquencyReadPlatformServiceImpl implements DelinquencyReadPlatfo
collectionData.setDelinquencyPausePeriods(result);
}
@NotNull
@NonNull
private static DelinquencyPausePeriod toDelinquencyPausePeriod(LocalDate businessDate, LoanDelinquencyActionData lda) {
return new DelinquencyPausePeriod(!lda.getStartDate().isAfter(businessDate) && !businessDate.isAfter(lda.getEndDate()),
lda.getStartDate(), lda.getEndDate());
@@ -28,7 +28,7 @@ import java.util.function.Predicate;
import org.apache.fineract.infrastructure.core.service.DateUtils;
import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency;
import org.apache.fineract.organisation.monetary.domain.Money;
import org.jetbrains.annotations.NotNull;
import org.springframework.lang.NonNull;
/**
* A wrapper around loan schedule related data exposing needed behaviour by loan.
@@ -219,7 +219,7 @@ public class LoanRepaymentScheduleProcessingWrapper {
}
}
@NotNull
@NonNull
private BigDecimal getBaseAmount(MonetaryCurrency monetaryCurrency, LoanRepaymentScheduleInstallment period, LoanCharge loanCharge,
BigDecimal amount) {
if (loanCharge.getChargeCalculation().isPercentageOfAmountAndInterest()) {
@@ -21,11 +21,11 @@ package org.apache.fineract.portfolio.loanproduct.domain;
import java.util.List;
import org.apache.fineract.infrastructure.core.domain.ExternalId;
import org.apache.fineract.portfolio.delinquency.domain.DelinquencyBucket;
import org.jetbrains.annotations.NotNull;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.lang.NonNull;
public interface LoanProductRepository extends JpaRepository<LoanProduct, Long>, JpaSpecificationExecutor<LoanProduct> {
@@ -40,5 +40,5 @@ public interface LoanProductRepository extends JpaRepository<LoanProduct, Long>,
@Override
@Query("SELECT CASE WHEN COUNT(loanProduct)>0 THEN TRUE ELSE FALSE END FROM LoanProduct loanProduct WHERE loanProduct.id = :loanProductId")
boolean existsById(@NotNull @Param("loanProductId") Long loanProductId);
boolean existsById(@NonNull @Param("loanProductId") Long loanProductId);
}
@@ -27,7 +27,7 @@ import org.apache.fineract.infrastructure.core.service.DateUtils;
import org.apache.fineract.portfolio.loanaccount.data.LoanTermVariationsData;
import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge;
import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction;
import org.jetbrains.annotations.NotNull;
import org.springframework.lang.NonNull;
@Getter
public class ChangeOperation implements Comparable<ChangeOperation> {
@@ -116,7 +116,7 @@ public class ChangeOperation implements Comparable<ChangeOperation> {
@Override
@SuppressFBWarnings(value = "EQ_COMPARETO_USE_OBJECT_EQUALS", justification = "TODO: fix this! See: https://stackoverflow.com/questions/2609037/findbugs-how-to-solve-eq-compareto-use-object-equals")
public int compareTo(@NotNull ChangeOperation o) {
public int compareTo(@NonNull ChangeOperation o) {
int datePortion = DateUtils.compareWithNullsLast(this.getEffectiveDate(), o.getEffectiveDate());
if (datePortion == 0) {
final boolean isAccrual = isAccrualActivity();
@@ -20,7 +20,7 @@ package org.apache.fineract.portfolio.loanproduct.calc.data;
import java.math.BigDecimal;
import java.time.LocalDate;
import org.jetbrains.annotations.NotNull;
import org.springframework.lang.NonNull;
public record InterestRate(//
LocalDate effectiveFrom, //
@@ -28,7 +28,7 @@ public record InterestRate(//
) implements Comparable<InterestRate> {
@Override
public int compareTo(@NotNull InterestRate o) {
public int compareTo(@NonNull InterestRate o) {
return this.effectiveFrom().compareTo(o.effectiveFrom());
}
}
@@ -27,7 +27,7 @@ import java.util.Map;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.fineract.infrastructure.core.api.JsonCommand;
import org.jetbrains.annotations.NotNull;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Service;
@Service
@@ -79,7 +79,7 @@ public class AdvancedPaymentAllocationsJsonParser {
}
}
@NotNull
@NonNull
private List<PaymentAllocationType> getPaymentAllocationTypes(JsonArray paymentAllocationOrder) {
if (paymentAllocationOrder != null) {
List<Pair<Integer, PaymentAllocationType>> parsedListWithOrder = paymentAllocationOrder.asList().stream().map(json -> {
@@ -27,7 +27,7 @@ import java.util.Map;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.fineract.infrastructure.core.api.JsonCommand;
import org.jetbrains.annotations.NotNull;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Service;
@Service
@@ -67,7 +67,7 @@ public class CreditAllocationsJsonParser {
}
}
@NotNull
@NonNull
private List<AllocationType> getAllocationTypes(JsonArray allocationOrder) {
if (allocationOrder != null) {
List<Pair<Integer, AllocationType>> parsedListWithOrder = allocationOrder.asList().stream().map(json -> {
@@ -82,7 +82,6 @@ import org.apache.fineract.portfolio.loanproduct.domain.CreditAllocationTransact
import org.apache.fineract.portfolio.loanproduct.domain.LoanProductRelatedDetail;
import org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationTransactionType;
import org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationType;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
@@ -94,6 +93,7 @@ import org.mockito.ArgumentCaptor;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.lang.NonNull;
@ExtendWith(MockitoExtension.class)
class AdvancedPaymentScheduleTransactionProcessorTest {
@@ -524,7 +524,7 @@ class AdvancedPaymentScheduleTransactionProcessorTest {
return installment;
}
@NotNull
@NonNull
private LoanCreditAllocationRule createMockCreditAllocationRule(AllocationType... allocationTypes) {
LoanCreditAllocationRule mockCreditAllocationRule = mock(LoanCreditAllocationRule.class);
lenient().when(mockCreditAllocationRule.getTransactionType()).thenReturn(CreditAllocationTransactionType.CHARGEBACK);
@@ -43,7 +43,6 @@ import org.apache.fineract.portfolio.loanproduct.calc.data.PeriodDueDetails;
import org.apache.fineract.portfolio.loanproduct.calc.data.ProgressiveLoanInterestScheduleModel;
import org.apache.fineract.portfolio.loanproduct.calc.data.RepaymentPeriod;
import org.apache.fineract.portfolio.loanproduct.domain.LoanProductMinimumRepaymentScheduleRelatedDetail;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
@@ -55,6 +54,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.lang.NonNull;
@ExtendWith(MockitoExtension.class)
class ProgressiveEMICalculatorTest {
@@ -3195,7 +3195,7 @@ class ProgressiveEMICalculatorTest {
zeroAmount, zeroAmount, false, mc);
}
@NotNull
@NonNull
private static LoanRepaymentScheduleInstallment createPeriod(int periodId, LocalDate start, LocalDate end) {
LoanRepaymentScheduleInstallment period = Mockito.mock(LoanRepaymentScheduleInstallment.class);
Mockito.when(period.getInstallmentNumber()).thenReturn(periodId);
@@ -37,7 +37,6 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.fineract.infrastructure.core.api.JsonCommand;
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -45,6 +44,7 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.lang.NonNull;
@ExtendWith(MockitoExtension.class)
class AdvancedPaymentAllocationsJsonParserTest {
@@ -225,7 +225,7 @@ class AdvancedPaymentAllocationsJsonParserTest {
return list;
}
@NotNull
@NonNull
private JsonCommand createJsonCommand(Map<String, Object> jsonMap) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonMap);
@@ -30,10 +30,10 @@ import java.util.EnumSet;
import java.util.List;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.function.Executable;
import org.springframework.lang.NonNull;
class AdvancedPaymentAllocationsValidatorTest {
@@ -164,7 +164,7 @@ class AdvancedPaymentAllocationsValidatorTest {
assertPlatformException(message, code, validationException);
}
@NotNull
@NonNull
private static LoanProductPaymentAllocationRule createLoanProductAllocationRule1() {
LoanProductPaymentAllocationRule lppr1 = new LoanProductPaymentAllocationRule();
lppr1.setTransactionType(DEFAULT);
@@ -173,7 +173,7 @@ class AdvancedPaymentAllocationsValidatorTest {
return lppr1;
}
@NotNull
@NonNull
private static LoanProductPaymentAllocationRule createLoanProductAllocationRule2() {
LoanProductPaymentAllocationRule lppr2 = new LoanProductPaymentAllocationRule();
lppr2.setTransactionType(REPAYMENT);
@@ -184,7 +184,7 @@ class AdvancedPaymentAllocationsValidatorTest {
return lppr2;
}
@NotNull
@NonNull
private static LoanProductPaymentAllocationRule createLoanProductAllocationRule3() {
LoanProductPaymentAllocationRule lppr = new LoanProductPaymentAllocationRule();
lppr.setTransactionType(REPAYMENT);
@@ -197,7 +197,7 @@ class AdvancedPaymentAllocationsValidatorTest {
return lppr;
}
@NotNull
@NonNull
private static LoanProductPaymentAllocationRule createLoanProductAllocationRule4() {
LoanProductPaymentAllocationRule lppr = new LoanProductPaymentAllocationRule();
lppr.setTransactionType(DEFAULT);
@@ -211,7 +211,7 @@ class AdvancedPaymentAllocationsValidatorTest {
return lppr;
}
@NotNull
@NonNull
private static List<Pair<Integer, PaymentAllocationType>> createPaymentAllocationTypeList() {
return EnumSet.allOf(PaymentAllocationType.class).stream().map(p -> {
try {
@@ -33,7 +33,6 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.fineract.infrastructure.core.api.JsonCommand;
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -41,6 +40,7 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.lang.NonNull;
@ExtendWith(MockitoExtension.class)
public class CreditAllocationsJsonParserTest {
@@ -113,7 +113,7 @@ public class CreditAllocationsJsonParserTest {
return map;
}
@NotNull
@NonNull
private JsonCommand createJsonCommand(Map<String, Object> jsonMap) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonMap);
@@ -28,10 +28,10 @@ import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.function.Executable;
import org.springframework.lang.NonNull;
public class CreditAllocationsValidatorTest {
@@ -104,13 +104,13 @@ public class CreditAllocationsValidatorTest {
ADVANCED_PAYMENT_ALLOCATION_STRATEGY));
}
@NotNull
@NonNull
private static List<Pair<Integer, AllocationType>> createCreditAllocationTypeList() {
AtomicInteger i = new AtomicInteger(1);
return EnumSet.allOf(AllocationType.class).stream().map(p -> Pair.of(i.getAndIncrement(), p)).toList();
}
@NotNull
@NonNull
private static LoanProductCreditAllocationRule createLoanProductCreditAllocationRule1() {
LoanProductCreditAllocationRule lpcr1 = new LoanProductCreditAllocationRule();
lpcr1.setTransactionType(CHARGEBACK);
@@ -22,13 +22,13 @@ import java.util.Set;
import java.util.TreeMap;
import org.apache.fineract.cob.data.BusinessStepNameAndOrder;
import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
import org.jetbrains.annotations.NotNull;
import org.springframework.lang.NonNull;
public interface COBBusinessStepService {
<T extends COBBusinessStep<S>, S extends AbstractPersistableCustom<Long>> S run(TreeMap<Long, String> executionMap, S item);
@NotNull
@NonNull
<T extends COBBusinessStep<S>, S extends AbstractPersistableCustom<Long>> Set<BusinessStepNameAndOrder> getCOBBusinessSteps(
Class<T> businessStepClass, String cobJobName);
}
@@ -36,9 +36,9 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
import org.apache.fineract.infrastructure.core.domain.ActionContext;
import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil;
import org.apache.fineract.infrastructure.event.business.service.BusinessEventNotifierService;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Service;
@Service
@@ -92,7 +92,7 @@ public class COBBusinessStepServiceImpl implements COBBusinessStepService {
return item;
}
@NotNull
@NonNull
@Override
public <T extends COBBusinessStep<S>, S extends AbstractPersistableCustom<Long>> Set<BusinessStepNameAndOrder> getCOBBusinessSteps(
Class<T> businessStepClass, String cobJobName) {
@@ -30,11 +30,11 @@ import org.apache.fineract.infrastructure.core.domain.ActionContext;
import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil;
import org.apache.fineract.useradministration.domain.AppUser;
import org.apache.fineract.useradministration.domain.AppUserRepositoryWrapper;
import org.jetbrains.annotations.NotNull;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.lang.NonNull;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
@@ -48,7 +48,7 @@ public class InitialisationTasklet implements Tasklet {
private final AppUserRepositoryWrapper userRepository;
@Override
public RepeatStatus execute(@NotNull StepContribution contribution, @NotNull ChunkContext chunkContext) throws Exception {
public RepeatStatus execute(@NonNull StepContribution contribution, @NonNull ChunkContext chunkContext) throws Exception {
HashMap<BusinessDateType, LocalDate> businessDates = ThreadLocalContextUtil.getBusinessDates();
AppUser user = userRepository.fetchSystemUser();
UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(user, user.getPassword(), user.getAuthorities());
@@ -22,18 +22,18 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.fineract.infrastructure.core.domain.ActionContext;
import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil;
import org.jetbrains.annotations.NotNull;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.lang.NonNull;
@Slf4j
@RequiredArgsConstructor
public class ResetContextTasklet implements Tasklet {
@Override
public RepeatStatus execute(@NotNull StepContribution contribution, @NotNull ChunkContext chunkContext) throws Exception {
public RepeatStatus execute(@NonNull StepContribution contribution, @NonNull ChunkContext chunkContext) throws Exception {
ThreadLocalContextUtil.setActionContext(ActionContext.DEFAULT);
return RepeatStatus.FINISHED;
}
@@ -30,7 +30,6 @@ import org.apache.fineract.cob.loan.LoanLockingService;
import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
import org.apache.fineract.infrastructure.core.serialization.ThrowableSerialization;
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
import org.jetbrains.annotations.NotNull;
import org.springframework.batch.core.annotation.OnProcessError;
import org.springframework.batch.core.annotation.OnReadError;
import org.springframework.batch.core.annotation.OnSkipInProcess;
@@ -38,6 +37,7 @@ import org.springframework.batch.core.annotation.OnSkipInRead;
import org.springframework.batch.core.annotation.OnSkipInWrite;
import org.springframework.batch.core.annotation.OnWriteError;
import org.springframework.batch.item.Chunk;
import org.springframework.lang.NonNull;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;
@@ -55,7 +55,7 @@ public abstract class AbstractLoanItemListener {
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(@NotNull TransactionStatus status) {
protected void doInTransactionWithoutResult(@NonNull TransactionStatus status) {
for (Long loanId : loanIds) {
LoanAccountLock loanAccountLock = loanLockingService.findByLoanIdAndLockOwner(loanId, getLockOwner());
if (loanAccountLock != null) {
@@ -77,13 +77,13 @@ public abstract class AbstractLoanItemListener {
}
@OnProcessError
public void onProcessError(@NotNull Loan item, Exception e) {
public void onProcessError(@NonNull Loan item, Exception e) {
log.warn("Error was triggered during processing of Loan (id={}) due to: {}", item.getId(), ThrowableSerialization.serialize(e));
updateAccountLockWithError(List.of(item.getId()), "Loan (id: %d) processing is failed", e);
}
@OnWriteError
public void onWriteError(Exception e, @NotNull Chunk<? extends Loan> items) {
public void onWriteError(Exception e, @NonNull Chunk<? extends Loan> items) {
List<Long> loanIds = items.getItems().stream().map(AbstractPersistableCustom::getId).toList();
log.warn("Error was triggered during writing of Loans (ids={}) due to: {}", loanIds, ThrowableSerialization.serialize(e));
@@ -91,17 +91,17 @@ public abstract class AbstractLoanItemListener {
}
@OnSkipInRead
public void onSkipInRead(@NotNull Throwable e) {
public void onSkipInRead(@NonNull Throwable e) {
log.warn("Skipping was triggered during read!");
}
@OnSkipInProcess
public void onSkipInProcess(@NotNull Loan item, @NotNull Throwable e) {
public void onSkipInProcess(@NonNull Loan item, @NonNull Throwable e) {
log.warn("Skipping was triggered during processing of Loan (id={})", item.getId());
}
@OnSkipInWrite
public void onSkipInWrite(@NotNull Loan item, @NotNull Throwable e) {
public void onSkipInWrite(@NonNull Loan item, @NonNull Throwable e) {
log.warn("Skipping was triggered during writing of Loan (id={})", item.getId());
}
@@ -32,12 +32,12 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.fineract.cob.COBBusinessStepService;
import org.apache.fineract.cob.data.BusinessStepNameAndOrder;
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
import org.jetbrains.annotations.NotNull;
import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.annotation.AfterStep;
import org.springframework.batch.item.ExecutionContext;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.lang.NonNull;
@RequiredArgsConstructor
@Slf4j
@@ -51,7 +51,7 @@ public abstract class AbstractLoanItemProcessor implements ItemProcessor<Loan, L
@SuppressWarnings({ "unchecked" })
@Override
public Loan process(@NotNull Loan item) throws Exception {
public Loan process(@NonNull Loan item) throws Exception {
Set<BusinessStepNameAndOrder> businessSteps = (Set<BusinessStepNameAndOrder>) executionContext.get(LoanCOBConstant.BUSINESS_STEPS);
if (businessSteps == null) {
throw new IllegalStateException("No business steps found in the execution context");
@@ -70,7 +70,7 @@ public abstract class AbstractLoanItemProcessor implements ItemProcessor<Loan, L
}
@AfterStep
public ExitStatus afterStep(@NotNull StepExecution stepExecution) {
public ExitStatus afterStep(@NonNull StepExecution stepExecution) {
return ExitStatus.COMPLETED;
}
@@ -27,11 +27,11 @@ import org.apache.fineract.cob.exceptions.LoanReadException;
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
import org.apache.fineract.portfolio.loanaccount.domain.LoanRepository;
import org.apache.fineract.portfolio.loanaccount.exception.LoanNotFoundException;
import org.jetbrains.annotations.NotNull;
import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.annotation.AfterStep;
import org.springframework.batch.item.ItemReader;
import org.springframework.lang.NonNull;
@Slf4j
@RequiredArgsConstructor
@@ -56,7 +56,7 @@ public abstract class AbstractLoanItemReader implements ItemReader<Loan> {
}
@AfterStep
public ExitStatus afterStep(@NotNull StepExecution stepExecution) {
public ExitStatus afterStep(@NonNull StepExecution stepExecution) {
return ExitStatus.COMPLETED;
}
@@ -24,9 +24,9 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.fineract.cob.domain.LockOwner;
import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
import org.jetbrains.annotations.NotNull;
import org.springframework.batch.item.Chunk;
import org.springframework.batch.item.data.RepositoryItemWriter;
import org.springframework.lang.NonNull;
@Slf4j
@RequiredArgsConstructor
@@ -35,7 +35,7 @@ public abstract class AbstractLoanItemWriter extends RepositoryItemWriter<Loan>
private final LoanLockingService loanLockingService;
@Override
public void write(@NotNull Chunk<? extends Loan> items) throws Exception {
public void write(@NonNull Chunk<? extends Loan> items) throws Exception {
if (!items.isEmpty()) {
super.write(items);
List<Long> loanIds = items.getItems().stream().map(AbstractPersistableCustom::getId).toList();
@@ -34,12 +34,12 @@ import org.apache.fineract.cob.domain.LoanAccountLock;
import org.apache.fineract.cob.domain.LockOwner;
import org.apache.fineract.cob.exceptions.LoanLockCannotBeAppliedException;
import org.apache.fineract.infrastructure.core.config.FineractProperties;
import org.jetbrains.annotations.NotNull;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.item.ExecutionContext;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.lang.NonNull;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;
@@ -57,7 +57,7 @@ public class ApplyLoanLockTasklet implements Tasklet {
@Override
@SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
public RepeatStatus execute(@NotNull StepContribution contribution, @NotNull ChunkContext chunkContext)
public RepeatStatus execute(@NonNull StepContribution contribution, @NonNull ChunkContext chunkContext)
throws LoanLockCannotBeAppliedException {
ExecutionContext executionContext = contribution.getStepExecution().getExecutionContext();
long numberOfExecutions = contribution.getStepExecution().getCommitCount();
@@ -102,7 +102,7 @@ public class ApplyLoanLockTasklet implements Tasklet {
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(@NotNull TransactionStatus status) {
protected void doInTransactionWithoutResult(@NonNull TransactionStatus status) {
loanLockingService.applyLock(toBeProcessedLoanIds, LockOwner.LOAN_COB_CHUNK_PROCESSING);
}
});
@@ -21,10 +21,10 @@ package org.apache.fineract.cob.loan;
import java.util.List;
import java.util.concurrent.LinkedBlockingQueue;
import org.apache.fineract.portfolio.loanaccount.domain.LoanRepository;
import org.jetbrains.annotations.NotNull;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.annotation.BeforeStep;
import org.springframework.batch.item.ExecutionContext;
import org.springframework.lang.NonNull;
public class InlineCOBLoanItemReader extends AbstractLoanItemReader {
@@ -34,7 +34,7 @@ public class InlineCOBLoanItemReader extends AbstractLoanItemReader {
@BeforeStep
@SuppressWarnings({ "unchecked" })
public void beforeStep(@NotNull StepExecution stepExecution) {
public void beforeStep(@NonNull StepExecution stepExecution) {
ExecutionContext executionContext = stepExecution.getJobExecution().getExecutionContext();
List<Long> loanIds = (List<Long>) executionContext.get(LoanCOBConstant.LOAN_COB_PARAMETER);
setRemainingData(new LinkedBlockingQueue<>(loanIds));
@@ -33,7 +33,6 @@ import org.apache.fineract.cob.data.LoanCOBParameter;
import org.apache.fineract.cob.data.LoanCOBPartition;
import org.apache.fineract.infrastructure.jobs.service.JobName;
import org.apache.fineract.infrastructure.springbatch.PropertyService;
import org.jetbrains.annotations.NotNull;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.explore.JobExplorer;
import org.springframework.batch.core.launch.JobExecutionNotRunningException;
@@ -42,6 +41,7 @@ import org.springframework.batch.core.launch.NoSuchJobExecutionException;
import org.springframework.batch.core.partition.support.Partitioner;
import org.springframework.batch.item.ExecutionContext;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.lang.NonNull;
import org.springframework.util.StopWatch;
@Slf4j
@@ -65,7 +65,7 @@ public class LoanCOBPartitioner implements Partitioner {
@Setter
private Boolean isCatchUp;
@NotNull
@NonNull
@Override
public Map<String, ExecutionContext> partition(int gridSize) {
int partitionSize = propertyService.getPartitionSize(LoanCOBConstant.JOB_NAME);
@@ -29,10 +29,10 @@ import org.apache.fineract.cob.data.LoanCOBParameter;
import org.apache.fineract.cob.domain.LoanAccountLock;
import org.apache.fineract.cob.domain.LockOwner;
import org.apache.fineract.portfolio.loanaccount.domain.LoanRepository;
import org.jetbrains.annotations.NotNull;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.annotation.BeforeStep;
import org.springframework.batch.item.ExecutionContext;
import org.springframework.lang.NonNull;
@Slf4j
public class LoanItemReader extends AbstractLoanItemReader {
@@ -51,7 +51,7 @@ public class LoanItemReader extends AbstractLoanItemReader {
@BeforeStep
@SuppressWarnings({ "unchecked" })
public void beforeStep(@NotNull StepExecution stepExecution) {
public void beforeStep(@NonNull StepExecution stepExecution) {
ExecutionContext executionContext = stepExecution.getExecutionContext();
LoanCOBParameter loanCOBParameter = (LoanCOBParameter) executionContext.get(LoanCOBConstant.LOAN_COB_PARAMETER);
List<Long> loanIds;
@@ -60,7 +60,6 @@ import org.apache.fineract.infrastructure.jobs.exception.JobNotFoundException;
import org.apache.fineract.infrastructure.jobs.service.InlineExecutorService;
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
import org.apache.fineract.infrastructure.springbatch.SpringBatchJobConstants;
import org.jetbrains.annotations.NotNull;
import org.springframework.batch.core.BatchStatus;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
@@ -72,6 +71,7 @@ import org.springframework.batch.core.explore.JobExplorer;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.launch.NoSuchJobException;
import org.springframework.context.annotation.Conditional;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.annotation.Propagation;
@@ -221,7 +221,7 @@ public class InlineLoanCOBExecutorServiceImpl implements InlineExecutorService<L
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(@NotNull TransactionStatus status) {
protected void doInTransactionWithoutResult(@NonNull TransactionStatus status) {
List<LoanAccountLock> loanAccountLocks = getLoanAccountLocks(loanIds, businessDate);
loanAccountLocks.forEach(loanAccountLock -> {
try {
@@ -19,7 +19,6 @@
package org.apache.fineract.infrastructure.core.auditing;
import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDateTimeCustom;
import org.jetbrains.annotations.NotNull;
import org.springframework.data.auditing.AuditableBeanWrapper;
import org.springframework.data.auditing.AuditingHandler;
import org.springframework.data.auditing.DateTimeProvider;
@@ -28,6 +27,7 @@ import org.springframework.data.mapping.PersistentEntity;
import org.springframework.data.mapping.PersistentProperty;
import org.springframework.data.mapping.context.MappingContext;
import org.springframework.data.mapping.context.PersistentEntities;
import org.springframework.lang.NonNull;
import org.springframework.util.Assert;
public class CustomAuditingHandler extends AuditingHandler {
@@ -73,9 +73,8 @@ public class CustomAuditingHandler extends AuditingHandler {
* @param source
* must not be {@literal null}.
*/
@NotNull
@Override
public <T> T markCreated(@NotNull T source) {
public <T> T markCreated(@NonNull T source) {
Assert.notNull(source, "Source entity must not be null");
setDateTimeProvider(fetchDateTimeProvider(source));
return super.markCreated(source);
@@ -87,9 +86,8 @@ public class CustomAuditingHandler extends AuditingHandler {
* @param source
* must not be {@literal null}.
*/
@NotNull
@Override
public <T> T markModified(@NotNull T source) {
public <T> T markModified(@NonNull T source) {
Assert.notNull(source, "Source entity must not be null");
setDateTimeProvider(fetchDateTimeProvider(source));
return super.markModified(source);
@@ -18,10 +18,10 @@
*/
package org.apache.fineract.infrastructure.core.auditing;
import jakarta.validation.constraints.NotNull;
import java.time.temporal.TemporalAccessor;
import java.util.Optional;
import org.apache.fineract.infrastructure.core.service.DateUtils;
import org.jetbrains.annotations.NotNull;
import org.springframework.data.auditing.DateTimeProvider;
public enum CustomDateTimeProvider implements DateTimeProvider {
@@ -48,11 +48,11 @@ import org.apache.fineract.infrastructure.dataqueries.data.ResultsetColumnHeader
import org.apache.fineract.infrastructure.dataqueries.data.ResultsetColumnValueData;
import org.apache.fineract.infrastructure.dataqueries.data.ResultsetRowData;
import org.apache.fineract.infrastructure.dataqueries.exception.DatatableNotFoundException;
import org.jetbrains.annotations.NotNull;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.support.rowset.SqlRowSet;
import org.springframework.jdbc.support.rowset.SqlRowSetMetaData;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Service;
@Service
@@ -134,14 +134,14 @@ public class GenericDataServiceImpl implements GenericDataService {
return columnHeaders;
}
@NotNull
@NonNull
@Override
public List<ResultsetRowData> fillResultsetRowData(final String sql, List<ResultsetColumnHeaderData> columnHeaders) {
final SqlRowSet rs = jdbcTemplate.queryForRowSet(sql); // NOSONAR
return fillResultsetRowData(rs, columnHeaders);
}
@NotNull
@NonNull
private static List<ResultsetRowData> fillResultsetRowData(SqlRowSet rs, List<ResultsetColumnHeaderData> columnHeaders) {
final SqlRowSetMetaData rsmd = rs.getMetaData();
final List<ResultsetRowData> resultsetDataRows = new ArrayList<>();
@@ -23,7 +23,7 @@ import java.util.Map;
import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.apache.fineract.infrastructure.core.service.DateUtils;
import org.jetbrains.annotations.NotNull;
import org.springframework.lang.NonNull;
public final class DatatableExportUtil {
@@ -70,7 +70,7 @@ public final class DatatableExportUtil {
}
}
@NotNull
@NonNull
private static String generateReportFileName(int maxLength, String folder, String extension, String reportName,
Map<String, String> reportParams) {
String extensionWithDot = extension.startsWith(".") ? extension : "." + extension;
@@ -19,9 +19,9 @@
package org.apache.fineract.infrastructure.springbatch;
import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil;
import org.jetbrains.annotations.NotNull;
import org.springframework.batch.integration.async.StepExecutionInterceptor;
import org.springframework.batch.integration.partition.StepExecutionRequest;
import org.springframework.lang.NonNull;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.support.GenericMessage;
@@ -29,7 +29,7 @@ import org.springframework.messaging.support.GenericMessage;
public class OutputChannelInterceptor extends StepExecutionInterceptor {
@Override
public Message<?> preSend(Message<?> message, @NotNull MessageChannel channel) {
public Message<?> preSend(Message<?> message, @NonNull MessageChannel channel) {
StepExecutionRequest stepExecutionRequest = (StepExecutionRequest) message.getPayload();
ContextualMessage contextualMessage = new ContextualMessage();
contextualMessage.setStepExecutionRequest(stepExecutionRequest);
@@ -90,7 +90,7 @@ import org.apache.fineract.portfolio.loanaccount.exception.LoanRepaymentSchedule
import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleType;
import org.apache.fineract.portfolio.loanaccount.service.LoanUtilService;
import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct;
import org.jetbrains.annotations.NotNull;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component;
@Component("loanTransactionValidator")
@@ -912,7 +912,7 @@ public final class LoanTransactionValidatorImpl implements LoanTransactionValida
}
}
private static @NotNull BigDecimal collectTotalCollateral(Set<LoanCollateralManagement> loanCollateralManagements) {
private static @NonNull BigDecimal collectTotalCollateral(Set<LoanCollateralManagement> loanCollateralManagements) {
BigDecimal totalCollateral = BigDecimal.ZERO;
for (LoanCollateralManagement loanCollateralManagement : loanCollateralManagements) {
@@ -924,7 +924,7 @@ public final class LoanTransactionValidatorImpl implements LoanTransactionValida
return totalCollateral;
}
private static @NotNull Set<String> getDisbursementParameters(boolean isAccountTransfer) {
private static @NonNull Set<String> getDisbursementParameters(boolean isAccountTransfer) {
Set<String> disbursementParameters;
if (isAccountTransfer) {
@@ -142,13 +142,13 @@ import org.apache.fineract.portfolio.paymentdetail.data.PaymentDetailData;
import org.apache.fineract.portfolio.paymenttype.data.PaymentTypeData;
import org.apache.fineract.portfolio.paymenttype.service.PaymentTypeReadPlatformService;
import org.apache.fineract.useradministration.domain.AppUser;
import org.jetbrains.annotations.NotNull;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.data.domain.Pageable;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.lang.NonNull;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@@ -1316,7 +1316,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService, Loa
}
@Override
public LoanScheduleData extractData(@NotNull final ResultSet rs) throws SQLException, DataAccessException {
public LoanScheduleData extractData(@NonNull final ResultSet rs) throws SQLException, DataAccessException {
BigDecimal waivedChargeAmount = BigDecimal.ZERO;
for (DisbursementData disbursementDetail : disbursementData) {
waivedChargeAmount = waivedChargeAmount.add(disbursementDetail.getWaivedChargeAmount());
@@ -67,10 +67,10 @@ import org.apache.fineract.portfolio.loanproduct.domain.LoanSupportedInterestRef
import org.apache.fineract.portfolio.loanproduct.exception.LoanProductNotFoundException;
import org.apache.fineract.portfolio.rate.data.RateData;
import org.apache.fineract.portfolio.rate.service.RateReadService;
import org.jetbrains.annotations.NotNull;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.lang.NonNull;
@RequiredArgsConstructor
public class LoanProductReadPlatformServiceImpl implements LoanProductReadPlatformService {
@@ -310,7 +310,7 @@ public class LoanProductReadPlatformServiceImpl implements LoanProductReadPlatfo
}
@Override
public LoanProductData mapRow(@NotNull final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
public LoanProductData mapRow(@NonNull final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
final Long id = JdbcSupport.getLong(rs, "id");
final String name = rs.getString("name");
@@ -832,7 +832,7 @@ public class LoanProductReadPlatformServiceImpl implements LoanProductReadPlatfo
}
@Override
public LoanProductData mapRow(@NotNull final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
public LoanProductData mapRow(@NonNull final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
final Long id = JdbcSupport.getLong(rs, "id");
final String name = rs.getString("name");
@@ -64,7 +64,6 @@ import org.apache.fineract.infrastructure.creditbureau.domain.TokenRepositoryWra
import org.apache.fineract.infrastructure.creditbureau.serialization.CreditBureauTokenCommandFromApiJsonDeserializer;
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
@@ -72,6 +71,7 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.Spy;
import org.springframework.lang.NonNull;
@SuppressFBWarnings(value = "RV_EXCEPTION_NOT_THROWN", justification = "False positive")
public class ThitsaWorksCreditBureauIntegrationWritePlatformServiceImplTest {
@@ -402,7 +402,7 @@ public class ThitsaWorksCreditBureauIntegrationWritePlatformServiceImplTest {
assertNotNull(token);
}
@NotNull
@NonNull
private String createValidToken() throws JsonProcessingException {
ObjectNode jsonResponse = mapper.createObjectNode();
jsonResponse.put("access_token", "AccessToken");
@@ -26,7 +26,6 @@ import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import org.apache.fineract.infrastructure.core.config.FineractProperties;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -35,6 +34,7 @@ import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.kafka.support.SendResult;
import org.springframework.lang.NonNull;
@ExtendWith(MockitoExtension.class)
@SuppressFBWarnings(value = "RV_EXCEPTION_NOT_THROWN", justification = "False positive")
@@ -112,7 +112,7 @@ class KafkaExternalEventProducerTest {
Mockito.verifyNoMoreInteractions(kafkaTemplate);
}
@NotNull
@NonNull
private static FineractProperties createProperties() {
FineractProperties props = new FineractProperties();
@@ -46,12 +46,12 @@ import org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyAction;
import org.apache.fineract.portfolio.delinquency.helper.DelinquencyEffectivePauseHelper;
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
import org.apache.fineract.portfolio.loanaccount.domain.LoanStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.function.Executable;
import org.mockito.Mockito;
import org.springframework.lang.NonNull;
class DelinquencyActionParseAndValidatorTest {
@@ -380,7 +380,7 @@ class DelinquencyActionParseAndValidatorTest {
Assertions.assertEquals(localDate("19 September 2022"), parsedDelinquencyAction.getEndDate());
}
@NotNull
@NonNull
private JsonCommand delinquencyAction(@Nullable String action, @Nullable String startDate, @Nullable String endDate)
throws JsonProcessingException {
Map<String, Object> map = new HashMap<>();
@@ -396,7 +396,7 @@ class DelinquencyActionParseAndValidatorTest {
return LocalDate.parse(date, DATE_TIME_FORMATTER);
}
@NotNull
@NonNull
private JsonCommand createJsonCommand(Map<String, Object> jsonMap) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonMap);
@@ -70,9 +70,9 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.fineract.infrastructure.core.service.DateUtils;
import org.apache.fineract.integrationtests.ConfigProperties;
import org.apache.http.conn.HttpHostConnectException;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.lang.NonNull;
/**
* Util for RestAssured tests. This class here in src/integrationTest is copy/pasted to src/test; please keep them in
@@ -417,7 +417,7 @@ public final class Utils {
return dateFormat.format(dateToBeConvert.getTime());
}
@NotNull
@NonNull
public static OffsetDateTime getAuditDateTimeToCompare() throws InterruptedException {
OffsetDateTime now = DateUtils.getAuditOffsetDateTime();
// Testing in minutes precision, but still need to take care around the end of the actual minute