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