FINERACT-2267: proper not null annotations. Remove jetbrains notnull, all services use non-null

This commit is contained in:
Attila Budai
2025-09-03 12:24:37 +02:00
committed by Adam Saghy
parent 65538495aa
commit 7378aea0b2
42 changed files with 290 additions and 285 deletions
+8
View File
@@ -100,6 +100,14 @@
<property name="forbiddenImportsRegexp" value="com.google.common.base.Charsets" /> <property name="forbiddenImportsRegexp" value="com.google.common.base.Charsets" />
<property name="forbiddenImportsExcludesRegexp" value="" /> <property name="forbiddenImportsExcludesRegexp" value="" />
<message key="forbid.certain.imports" value="Use ''java.nio.charset.StandardCharsets'' instead of ''{0}''" /> <message key="forbid.certain.imports" value="Use ''java.nio.charset.StandardCharsets'' instead of ''{0}''" />
</module>
<!-- Forbid JetBrains annotations in Java sources; prefer Jakarta or Spring annotations -->
<module name="com.github.sevntu.checkstyle.checks.coding.ForbidCertainImportsCheck">
<property name="packageNameRegexp" value=".*" />
<property name="forbiddenImportsRegexp" value="org.jetbrains.annotations(\..*)?" />
<property name="forbiddenImportsExcludesRegexp" value="" />
<message key="forbid.certain.imports"
value="Use 'jakarta.validation.constraints.NotNull' (API/DTO) or 'org.springframework.lang.NonNull' (services) instead of JetBrains annotations: ''{0}''" />
</module> </module>
<module name="OneStatementPerLine"/> <module name="OneStatementPerLine"/>
<module name="EmptyStatement"/> <module name="EmptyStatement"/>
@@ -20,7 +20,6 @@ package org.apache.fineract.infrastructure.core.service;
import static java.time.temporal.ChronoUnit.DAYS; import static java.time.temporal.ChronoUnit.DAYS;
import jakarta.validation.constraints.NotNull;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.LocalTime; import java.time.LocalTime;
@@ -41,6 +40,7 @@ import org.apache.fineract.infrastructure.core.data.ApiParameterError;
import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenant; import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenant;
import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException; import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException;
import org.apache.fineract.infrastructure.core.serialization.JsonParserHelper; import org.apache.fineract.infrastructure.core.serialization.JsonParserHelper;
import org.springframework.lang.NonNull;
public final class DateUtils { public final class DateUtils {
@@ -86,8 +86,8 @@ public final class DateUtils {
return truncate == null ? now : now.truncatedTo(truncate); return truncate == null ? now : now.truncatedTo(truncate);
} }
@NotNull @NonNull
public static OffsetDateTime getOffsetDateTimeOfTenantFromLocalDate(@NotNull final LocalDate date) { public static OffsetDateTime getOffsetDateTimeOfTenantFromLocalDate(@NonNull final LocalDate date) {
return OffsetDateTime.of(date.atStartOfDay(), getOffsetDateTimeOfTenant().getOffset()); return OffsetDateTime.of(date.atStartOfDay(), getOffsetDateTimeOfTenant().getOffset());
} }
@@ -178,7 +178,7 @@ public final class DateUtils {
return compare(first, second, null, false); return compare(first, second, null, false);
} }
public static int compareWithNullsLast(@NotNull Optional<OffsetDateTime> first, @NotNull Optional<OffsetDateTime> second) { public static int compareWithNullsLast(@NonNull Optional<OffsetDateTime> first, @NonNull Optional<OffsetDateTime> second) {
return compareWithNullsLast(first.orElse(null), second.orElse(null)); return compareWithNullsLast(first.orElse(null), second.orElse(null));
} }
@@ -302,14 +302,14 @@ public final class DateUtils {
return isAfter(first, second) || isEqual(first, second); return isAfter(first, second) || isEqual(first, second);
} }
public static long getDifference(LocalDate first, LocalDate second, @NotNull ChronoUnit unit) { public static long getDifference(LocalDate first, LocalDate second, @NonNull ChronoUnit unit) {
if (first == null || second == null) { if (first == null || second == null) {
throw new IllegalArgumentException("Dates must not be null to get difference"); throw new IllegalArgumentException("Dates must not be null to get difference");
} }
return unit.between(first, second); return unit.between(first, second);
} }
public static int getExactDifference(LocalDate first, LocalDate second, @NotNull ChronoUnit unit) { public static int getExactDifference(LocalDate first, LocalDate second, @NonNull ChronoUnit unit) {
return Math.toIntExact(getDifference(first, second, unit)); return Math.toIntExact(getDifference(first, second, unit));
} }
@@ -413,7 +413,7 @@ public final class DateUtils {
return fromDate != null && DateUtils.isAfter(targetDate, fromDate) && !DateUtils.isAfter(targetDate, toDate); return fromDate != null && DateUtils.isAfter(targetDate, fromDate) && !DateUtils.isAfter(targetDate, toDate);
} }
@NotNull @NonNull
private static DateTimeFormatter getDateFormatter(String format, Locale locale) { private static DateTimeFormatter getDateFormatter(String format, Locale locale) {
DateTimeFormatter formatter = DEFAULT_DATE_FORMATTER; DateTimeFormatter formatter = DEFAULT_DATE_FORMATTER;
if (format != null || locale != null) { if (format != null || locale != null) {
@@ -425,7 +425,7 @@ public final class DateUtils {
return formatter; return formatter;
} }
@NotNull @NonNull
private static DateTimeFormatter getDateTimeFormatter(String format, Locale locale) { private static DateTimeFormatter getDateTimeFormatter(String format, Locale locale) {
DateTimeFormatter formatter = DEFAULT_DATETIME_FORMATTER; DateTimeFormatter formatter = DEFAULT_DATETIME_FORMATTER;
if (format != null || locale != null) { if (format != null || locale != null) {
@@ -18,12 +18,12 @@
*/ */
package org.apache.fineract.infrastructure.core.service; package org.apache.fineract.infrastructure.core.service;
import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.MathContext; import java.math.MathContext;
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.apache.fineract.organisation.monetary.domain.MoneyHelper; import org.apache.fineract.organisation.monetary.domain.MoneyHelper;
import org.springframework.lang.NonNull;
public final class MathUtil { public final class MathUtil {
@@ -303,7 +303,7 @@ public final class MathUtil {
/** /**
* @return BigDecimal with scale set to the 'digitsAfterDecimal' of the parameter currency * @return BigDecimal with scale set to the 'digitsAfterDecimal' of the parameter currency
*/ */
public static BigDecimal normalizeAmount(BigDecimal amount, @NotNull MonetaryCurrency currency) { public static BigDecimal normalizeAmount(BigDecimal amount, @NonNull MonetaryCurrency currency) {
return amount == null ? null : amount.setScale(currency.getDigitsAfterDecimal(), MoneyHelper.getRoundingMode()); return amount == null ? null : amount.setScale(currency.getDigitsAfterDecimal(), MoneyHelper.getRoundingMode());
} }
@@ -321,7 +321,7 @@ public final class MathUtil {
return amount == null ? null : amount.toPlainString(); return amount == null ? null : amount.toPlainString();
} }
public static Money toMoney(BigDecimal amount, @NotNull MonetaryCurrency currency) { public static Money toMoney(BigDecimal amount, @NonNull MonetaryCurrency currency) {
return amount == null ? null : Money.of(currency, amount); return amount == null ? null : Money.of(currency, amount);
} }
@@ -331,11 +331,11 @@ public final class MathUtil {
return value == null ? null : value.getAmount(); return value == null ? null : value.getAmount();
} }
public static Money nullToZero(Money value, @NotNull MonetaryCurrency currency) { public static Money nullToZero(Money value, @NonNull MonetaryCurrency currency) {
return nullToDefault(value, Money.zero(currency)); return nullToDefault(value, Money.zero(currency));
} }
public static Money nullToZero(Money value, @NotNull MonetaryCurrency currency, @NotNull MathContext mc) { public static Money nullToZero(Money value, @NonNull MonetaryCurrency currency, @NonNull MathContext mc) {
return nullToDefault(value, Money.zero(currency, mc)); return nullToDefault(value, Money.zero(currency, mc));
} }
@@ -20,7 +20,6 @@ package org.apache.fineract.infrastructure.core.service.database;
import static java.lang.String.format; import static java.lang.String.format;
import jakarta.validation.constraints.NotNull;
import java.math.BigInteger; import java.math.BigInteger;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Collection; import java.util.Collection;
@@ -35,6 +34,7 @@ import org.apache.logging.log4j.util.Strings;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
import org.springframework.jdbc.datasource.DataSourceUtils; import org.springframework.jdbc.datasource.DataSourceUtils;
import org.springframework.jdbc.support.GeneratedKeyHolder; import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@Component @Component
@@ -96,7 +96,7 @@ public class DatabaseSpecificSQLGenerator {
} }
} }
public String countLastExecutedQueryResult(@NotNull String sql) { public String countLastExecutedQueryResult(@NonNull String sql) {
if (databaseTypeResolver.isMySQL()) { if (databaseTypeResolver.isMySQL()) {
return "SELECT FOUND_ROWS()"; return "SELECT FOUND_ROWS()";
} else { } else {
@@ -104,7 +104,7 @@ public class DatabaseSpecificSQLGenerator {
} }
} }
public String countQueryResult(@NotNull String sql) { public String countQueryResult(@NonNull String sql) {
// Needs to remove the limit and offset // Needs to remove the limit and offset
sql = sql.replaceAll("LIMIT \\d+", "").replaceAll("OFFSET \\d+", "").trim(); sql = sql.replaceAll("LIMIT \\d+", "").replaceAll("OFFSET \\d+", "").trim();
return format("SELECT COUNT(*) FROM (%s) AS temp", sql); return format("SELECT COUNT(*) FROM (%s) AS temp", sql);
@@ -201,7 +201,7 @@ public class DatabaseSpecificSQLGenerator {
} }
} }
public String alias(@NotNull String field, String alias) { public String alias(@NonNull String field, String alias) {
return Strings.isEmpty(alias) ? field : (alias + '.') + field; return Strings.isEmpty(alias) ? field : (alias + '.') + field;
} }
@@ -227,7 +227,7 @@ public class DatabaseSpecificSQLGenerator {
return from + escape(definition) + (Strings.isEmpty(alias) ? "" : (" " + alias)); return from + escape(definition) + (Strings.isEmpty(alias) ? "" : (" " + alias));
} }
public String buildJoin(@NotNull String definition, String alias, @NotNull String fkCol, String refAlias, @NotNull String refCol, public String buildJoin(@NonNull String definition, String alias, @NonNull String fkCol, String refAlias, @NonNull String refCol,
String joinType) { String joinType) {
String join = Strings.isEmpty(joinType) ? "JOIN" : (joinType + " JOIN"); String join = Strings.isEmpty(joinType) ? "JOIN" : (joinType + " JOIN");
alias = Strings.isEmpty(alias) ? "" : (" " + alias); alias = Strings.isEmpty(alias) ? "" : (" " + alias);
@@ -246,7 +246,7 @@ public class DatabaseSpecificSQLGenerator {
.collect(Collectors.joining(", ")); .collect(Collectors.joining(", "));
} }
public String buildInsert(@NotNull String definition, List<String> fields, Map<String, ResultsetColumnHeaderData> headers) { public String buildInsert(@NonNull String definition, List<String> fields, Map<String, ResultsetColumnHeaderData> headers) {
if (fields == null || fields.isEmpty()) { if (fields == null || fields.isEmpty()) {
return ""; return "";
} }
@@ -254,7 +254,7 @@ public class DatabaseSpecificSQLGenerator {
+ ") VALUES (" + fields.stream().map(e -> decoratePlaceHolder(headers, e, "?")).collect(Collectors.joining(", ")) + ")"; + ") VALUES (" + fields.stream().map(e -> decoratePlaceHolder(headers, e, "?")).collect(Collectors.joining(", ")) + ")";
} }
public String buildUpdate(@NotNull String definition, List<String> fields, Map<String, ResultsetColumnHeaderData> headers) { public String buildUpdate(@NonNull String definition, List<String> fields, Map<String, ResultsetColumnHeaderData> headers) {
if (fields == null || fields.isEmpty()) { if (fields == null || fields.isEmpty()) {
return ""; return "";
} }
@@ -18,7 +18,6 @@
*/ */
package org.apache.fineract.infrastructure.core.service.database; package org.apache.fineract.infrastructure.core.service.database;
import jakarta.validation.constraints.NotNull;
import java.io.InputStream; import java.io.InputStream;
import java.io.Reader; import java.io.Reader;
import java.io.Serializable; import java.io.Serializable;
@@ -42,6 +41,7 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.fineract.infrastructure.core.exception.PlatformServiceUnavailableException; import org.apache.fineract.infrastructure.core.exception.PlatformServiceUnavailableException;
import org.apache.fineract.organisation.monetary.domain.MoneyHelper; import org.apache.fineract.organisation.monetary.domain.MoneyHelper;
import org.springframework.data.domain.Persistable; import org.springframework.data.domain.Persistable;
import org.springframework.lang.NonNull;
public enum JavaType { public enum JavaType {
@@ -205,7 +205,7 @@ public enum JavaType {
}; };
} }
@NotNull @NonNull
public JavaType getObjectType() { public JavaType getObjectType() {
if (!isPrimitive()) { if (!isPrimitive()) {
return this; return this;
@@ -227,7 +227,7 @@ public enum JavaType {
/** /**
* @return the field metadata type for the given class. First class objects are not recognized in this method. * @return the field metadata type for the given class. First class objects are not recognized in this method.
*/ */
@NotNull @NonNull
public static JavaType forType(Class<?> type) { public static JavaType forType(Class<?> type) {
if (type == null) { if (type == null) {
return OBJECT; return OBJECT;
@@ -19,10 +19,10 @@
package org.apache.fineract.infrastructure.core.service.database; package org.apache.fineract.infrastructure.core.service.database;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import jakarta.validation.constraints.NotNull;
import java.io.Serializable; import java.io.Serializable;
import java.sql.JDBCType; import java.sql.JDBCType;
import org.apache.fineract.infrastructure.core.exception.PlatformServiceUnavailableException; import org.apache.fineract.infrastructure.core.exception.PlatformServiceUnavailableException;
import org.springframework.lang.NonNull;
public enum JdbcJavaType { public enum JdbcJavaType {
@@ -30,14 +30,14 @@ public enum JdbcJavaType {
BIT(JavaType.BOOLEAN, new DialectType(JDBCType.BIT), new DialectType(JDBCType.BIT, true)) { // BIT(JavaType.BOOLEAN, new DialectType(JDBCType.BIT), new DialectType(JDBCType.BIT, true)) { //
@Override @Override
public Object toJdbcValueImpl(@NotNull DatabaseType dialect, Object value) { public Object toJdbcValueImpl(@NonNull DatabaseType dialect, Object value) {
return value == null ? null : (Boolean.TRUE.equals(value) ? 1 : 0); return value == null ? null : (Boolean.TRUE.equals(value) ? 1 : 0);
} }
}, },
BOOLEAN(JavaType.BOOLEAN, new DialectType(JDBCType.BIT), new DialectType(JDBCType.BOOLEAN, null, "BOOL")) { // BOOLEAN(JavaType.BOOLEAN, new DialectType(JDBCType.BIT), new DialectType(JDBCType.BOOLEAN, null, "BOOL")) { //
@Override @Override
public Object toJdbcValueImpl(@NotNull DatabaseType dialect, Object value) { public Object toJdbcValueImpl(@NonNull DatabaseType dialect, Object value) {
return (value != null && dialect.isMySql()) ? (Boolean.TRUE.equals(value) ? 1 : 0) : super.toJdbcValueImpl(dialect, value); return (value != null && dialect.isMySql()) ? (Boolean.TRUE.equals(value) ? 1 : 0) : super.toJdbcValueImpl(dialect, value);
} }
}, },
@@ -45,7 +45,7 @@ public enum JdbcJavaType {
TINYINT(JavaType.SHORT, new DialectType(JDBCType.TINYINT, true), new DialectType(JDBCType.SMALLINT)) { // TINYINT(JavaType.SHORT, new DialectType(JDBCType.TINYINT, true), new DialectType(JDBCType.SMALLINT)) { //
@Override @Override
public Object toJdbcValueImpl(@NotNull DatabaseType dialect, Object value) { public Object toJdbcValueImpl(@NonNull DatabaseType dialect, Object value) {
return dialect.isMySql() && value instanceof Boolean ? (Boolean.TRUE.equals(value) ? 1 : 0) return dialect.isMySql() && value instanceof Boolean ? (Boolean.TRUE.equals(value) ? 1 : 0)
: super.toJdbcValueImpl(dialect, value); : super.toJdbcValueImpl(dialect, value);
} }
@@ -113,21 +113,21 @@ public enum JdbcJavaType {
private static final String PLACEHOLDER_TYPE = "{type}"; private static final String PLACEHOLDER_TYPE = "{type}";
@NotNull @NonNull
private final JavaType javaType; private final JavaType javaType;
private final ImmutableList<DialectType> dialectTypes; private final ImmutableList<DialectType> dialectTypes;
JdbcJavaType(@NotNull JavaType javaType, DialectType... dialectTypes) { JdbcJavaType(@NonNull JavaType javaType, DialectType... dialectTypes) {
this.javaType = javaType; this.javaType = javaType;
this.dialectTypes = ImmutableList.copyOf(dialectTypes); this.dialectTypes = ImmutableList.copyOf(dialectTypes);
} }
@NotNull @NonNull
public JavaType getJavaType() { public JavaType getJavaType() {
return javaType; return javaType;
} }
public static JdbcJavaType getByTypeName(@NotNull DatabaseType dialect, String name, boolean check) { public static JdbcJavaType getByTypeName(@NonNull DatabaseType dialect, String name, boolean check) {
if (name == null) { if (name == null) {
return null; return null;
} }
@@ -161,8 +161,8 @@ public enum JdbcJavaType {
return null; return null;
} }
@NotNull @NonNull
private DialectType getDialectType(@NotNull DatabaseType dialect) { private DialectType getDialectType(@NonNull DatabaseType dialect) {
DialectType dialectType = dialectTypes.get(dialect.ordinal()); DialectType dialectType = dialectTypes.get(dialect.ordinal());
if (dialectType == null) { if (dialectType == null) {
throw new PlatformServiceUnavailableException("error.msg.database.dialect.not.allowed", throw new PlatformServiceUnavailableException("error.msg.database.dialect.not.allowed",
@@ -175,7 +175,7 @@ public enum JdbcJavaType {
return getJavaType().isBooleanType(); return getJavaType().isBooleanType();
} }
public boolean canBooleanType(@NotNull DatabaseType dialect) { public boolean canBooleanType(@NonNull DatabaseType dialect) {
return isBooleanType() || (dialect.isMySql() && this == TINYINT); return isBooleanType() || (dialect.isMySql() && this == TINYINT);
} }
@@ -251,33 +251,33 @@ public enum JdbcJavaType {
return getJavaType().isBinaryType(); return getJavaType().isBinaryType();
} }
public boolean hasPrecision(@NotNull DatabaseType dialect) { public boolean hasPrecision(@NonNull DatabaseType dialect) {
return getDialectType(dialect).precision; return getDialectType(dialect).precision;
} }
public boolean hasScale(@NotNull DatabaseType dialect) { public boolean hasScale(@NonNull DatabaseType dialect) {
return getDialectType(dialect).scale; return getDialectType(dialect).scale;
} }
public String getJdbcName(@NotNull DatabaseType dialect) { public String getJdbcName(@NonNull DatabaseType dialect) {
DialectType dialectType = getDialectType(dialect); DialectType dialectType = getDialectType(dialect);
return dialectType.getNameResolved(); return dialectType.getNameResolved();
} }
public String formatSql(@NotNull DatabaseType dialect, Integer precision) { public String formatSql(@NonNull DatabaseType dialect, Integer precision) {
return formatSql(dialect, precision, null); return formatSql(dialect, precision, null);
} }
public String formatSql(@NotNull DatabaseType dialect) { public String formatSql(@NonNull DatabaseType dialect) {
return formatSql(dialect, null, null); return formatSql(dialect, null, null);
} }
public String formatSql(@NotNull DatabaseType dialect, Integer precision, Integer scale) { public String formatSql(@NonNull DatabaseType dialect, Integer precision, Integer scale) {
DialectType dialectType = getDialectType(dialect); DialectType dialectType = getDialectType(dialect);
return dialectType.formatSql(precision, scale); return dialectType.formatSql(precision, scale);
} }
public Object toJdbcValue(@NotNull DatabaseType dialect, Object value, boolean check) { public Object toJdbcValue(@NonNull DatabaseType dialect, Object value, boolean check) {
if (value != null && check && !javaType.getObjectType().matchType(value.getClass(), false)) { if (value != null && check && !javaType.getObjectType().matchType(value.getClass(), false)) {
throw new PlatformServiceUnavailableException("error.msg.database.type.not.valid", throw new PlatformServiceUnavailableException("error.msg.database.type.not.valid",
"Data type of parameter " + value + " does not match " + this); "Data type of parameter " + value + " does not match " + this);
@@ -285,22 +285,22 @@ public enum JdbcJavaType {
return toJdbcValueImpl(dialect, value); return toJdbcValueImpl(dialect, value);
} }
public Object toJdbcValueImpl(@NotNull DatabaseType dialect, Object value) { public Object toJdbcValueImpl(@NonNull DatabaseType dialect, Object value) {
return value; return value;
} }
@com.google.errorprone.annotations.Immutable @com.google.errorprone.annotations.Immutable
private static final class DialectType implements Serializable { private static final class DialectType implements Serializable {
@NotNull @NonNull
private final JDBCType jdbcType; private final JDBCType jdbcType;
@NotNull @NonNull
private final String name; private final String name;
private final boolean precision; private final boolean precision;
private final boolean scale; private final boolean scale;
private final ImmutableList<String> alterNames; private final ImmutableList<String> alterNames;
private DialectType(@NotNull JDBCType jdbcType, String name, boolean precision, boolean scale, String... alterNames) { private DialectType(@NonNull JDBCType jdbcType, String name, boolean precision, boolean scale, String... alterNames) {
this.jdbcType = jdbcType; this.jdbcType = jdbcType;
this.name = name == null ? jdbcType.getName() : name; this.name = name == null ? jdbcType.getName() : name;
this.precision = precision; this.precision = precision;
@@ -308,27 +308,27 @@ public enum JdbcJavaType {
this.alterNames = ImmutableList.copyOf(alterNames); this.alterNames = ImmutableList.copyOf(alterNames);
} }
private DialectType(@NotNull JDBCType jdbcType, String name, boolean precision, String... alterNames) { private DialectType(@NonNull JDBCType jdbcType, String name, boolean precision, String... alterNames) {
this(jdbcType, name, precision, false, alterNames); this(jdbcType, name, precision, false, alterNames);
} }
private DialectType(@NotNull JDBCType jdbcType, String name, boolean precision) { private DialectType(@NonNull JDBCType jdbcType, String name, boolean precision) {
this(jdbcType, name, precision, false); this(jdbcType, name, precision, false);
} }
private DialectType(@NotNull JDBCType jdbcType, String name, String... alterNames) { private DialectType(@NonNull JDBCType jdbcType, String name, String... alterNames) {
this(jdbcType, name, false, false, alterNames); this(jdbcType, name, false, false, alterNames);
} }
private DialectType(@NotNull JDBCType jdbcType, boolean precision, boolean scale) { private DialectType(@NonNull JDBCType jdbcType, boolean precision, boolean scale) {
this(jdbcType, null, precision, scale); this(jdbcType, null, precision, scale);
} }
private DialectType(@NotNull JDBCType jdbcType, boolean precision) { private DialectType(@NonNull JDBCType jdbcType, boolean precision) {
this(jdbcType, null, precision, false); this(jdbcType, null, precision, false);
} }
private DialectType(@NotNull JDBCType jdbcType) { private DialectType(@NonNull JDBCType jdbcType) {
this(jdbcType, null, false, false); this(jdbcType, null, false, false);
} }
@@ -346,7 +346,7 @@ public enum JdbcJavaType {
} }
} }
private String addSqlPrecisionScale(@NotNull String name, Integer precision, Integer scale) { private String addSqlPrecisionScale(@NonNull String name, Integer precision, Integer scale) {
if (!this.precision || precision == null) { if (!this.precision || precision == null) {
return name; return name;
} }
@@ -20,13 +20,13 @@ package org.apache.fineract.infrastructure.core.service.database;
import static java.lang.String.format; import static java.lang.String.format;
import jakarta.validation.constraints.NotNull;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import org.apache.fineract.infrastructure.core.exception.PlatformServiceUnavailableException; import org.apache.fineract.infrastructure.core.exception.PlatformServiceUnavailableException;
import org.springframework.lang.NonNull;
@AllArgsConstructor @AllArgsConstructor
@Getter @Getter
@@ -41,7 +41,7 @@ public enum SqlOperator {
LIKE("LIKE") { // LIKE("LIKE") { //
@Override @Override
public String formatImpl(@NotNull DatabaseSpecificSQLGenerator sqlGenerator, JdbcJavaType columnType, String definition, public String formatImpl(@NonNull DatabaseSpecificSQLGenerator sqlGenerator, JdbcJavaType columnType, String definition,
String... values) { String... values) {
return format("%s %s %s", definition, getSymbol(), sqlGenerator.formatValue(columnType, "%" + values[0] + "%")); return format("%s %s %s", definition, getSymbol(), sqlGenerator.formatValue(columnType, "%" + values[0] + "%"));
} }
@@ -54,7 +54,7 @@ public enum SqlOperator {
NLIKE("NOT LIKE") { // NLIKE("NOT LIKE") { //
@Override @Override
public String formatImpl(@NotNull DatabaseSpecificSQLGenerator sqlGenerator, JdbcJavaType columnType, String definition, public String formatImpl(@NonNull DatabaseSpecificSQLGenerator sqlGenerator, JdbcJavaType columnType, String definition,
String... values) { String... values) {
return format("%s %s %s", definition, getSymbol(), sqlGenerator.formatValue(columnType, "%" + values[0] + "%")); return format("%s %s %s", definition, getSymbol(), sqlGenerator.formatValue(columnType, "%" + values[0] + "%"));
} }
@@ -67,7 +67,7 @@ public enum SqlOperator {
BTW("BETWEEN", 2) { // BTW("BETWEEN", 2) { //
@Override @Override
public String formatImpl(@NotNull DatabaseSpecificSQLGenerator sqlGenerator, JdbcJavaType columnType, String definition, public String formatImpl(@NonNull DatabaseSpecificSQLGenerator sqlGenerator, JdbcJavaType columnType, String definition,
String... values) { String... values) {
return format("%s %s %s AND %s", definition, getSymbol(), sqlGenerator.formatValue(columnType, values[0]), return format("%s %s %s AND %s", definition, getSymbol(), sqlGenerator.formatValue(columnType, values[0]),
sqlGenerator.formatValue(columnType, values[1])); sqlGenerator.formatValue(columnType, values[1]));
@@ -81,7 +81,7 @@ public enum SqlOperator {
NBTW("NOT BETWEEN", 2) { // NBTW("NOT BETWEEN", 2) { //
@Override @Override
public String formatImpl(@NotNull DatabaseSpecificSQLGenerator sqlGenerator, JdbcJavaType columnType, String definition, public String formatImpl(@NonNull DatabaseSpecificSQLGenerator sqlGenerator, JdbcJavaType columnType, String definition,
String... values) { String... values) {
return format("%s %s %s AND %s", definition, getSymbol(), sqlGenerator.formatValue(columnType, values[0]), return format("%s %s %s AND %s", definition, getSymbol(), sqlGenerator.formatValue(columnType, values[0]),
sqlGenerator.formatValue(columnType, values[1])); sqlGenerator.formatValue(columnType, values[1]));
@@ -95,7 +95,7 @@ public enum SqlOperator {
IN("IN", -1) { // IN("IN", -1) { //
@Override @Override
public String formatImpl(@NotNull DatabaseSpecificSQLGenerator sqlGenerator, JdbcJavaType columnType, String definition, public String formatImpl(@NonNull DatabaseSpecificSQLGenerator sqlGenerator, JdbcJavaType columnType, String definition,
String... values) { String... values) {
return format("%s %s (%s)", definition, getSymbol(), return format("%s %s (%s)", definition, getSymbol(),
Arrays.stream(values).map(e -> sqlGenerator.formatValue(columnType, e)).collect(Collectors.joining(", "))); Arrays.stream(values).map(e -> sqlGenerator.formatValue(columnType, e)).collect(Collectors.joining(", ")));
@@ -114,7 +114,7 @@ public enum SqlOperator {
NIN("NOT IN", -1) { // NIN("NOT IN", -1) { //
@Override @Override
public String formatImpl(@NotNull DatabaseSpecificSQLGenerator sqlGenerator, JdbcJavaType columnType, String definition, public String formatImpl(@NonNull DatabaseSpecificSQLGenerator sqlGenerator, JdbcJavaType columnType, String definition,
String... values) { String... values) {
return format("%s %s (%s)", definition, getSymbol(), return format("%s %s (%s)", definition, getSymbol(),
Arrays.stream(values).map(e -> sqlGenerator.formatValue(columnType, e)).collect(Collectors.joining(", "))); Arrays.stream(values).map(e -> sqlGenerator.formatValue(columnType, e)).collect(Collectors.joining(", ")));
@@ -153,24 +153,24 @@ public enum SqlOperator {
return paramCount < 0; return paramCount < 0;
} }
public String formatSql(@NotNull DatabaseSpecificSQLGenerator sqlGenerator, JdbcJavaType columnType, String definition, String alias, public String formatSql(@NonNull DatabaseSpecificSQLGenerator sqlGenerator, JdbcJavaType columnType, String definition, String alias,
List<String> values) { List<String> values) {
return formatSql(sqlGenerator, columnType, definition, alias, values == null ? null : values.toArray(String[]::new)); return formatSql(sqlGenerator, columnType, definition, alias, values == null ? null : values.toArray(String[]::new));
} }
public String formatSql(@NotNull DatabaseSpecificSQLGenerator sqlGenerator, JdbcJavaType columnType, String definition, String alias, public String formatSql(@NonNull DatabaseSpecificSQLGenerator sqlGenerator, JdbcJavaType columnType, String definition, String alias,
String... values) { String... values) {
validateValues(values); validateValues(values);
return formatImpl(sqlGenerator, columnType, sqlGenerator.alias(sqlGenerator.escape(definition), alias), values); return formatImpl(sqlGenerator, columnType, sqlGenerator.alias(sqlGenerator.escape(definition), alias), values);
} }
protected String formatImpl(@NotNull DatabaseSpecificSQLGenerator sqlGenerator, JdbcJavaType columnType, String definition, protected String formatImpl(@NonNull DatabaseSpecificSQLGenerator sqlGenerator, JdbcJavaType columnType, String definition,
String... values) { String... values) {
return paramCount == 0 ? format("%s %s", definition, symbol) return paramCount == 0 ? format("%s %s", definition, symbol)
: format("%s %s %s", definition, symbol, sqlGenerator.formatValue(columnType, values[0])); : format("%s %s %s", definition, symbol, sqlGenerator.formatValue(columnType, values[0]));
} }
public String formatNamedParam(@NotNull DatabaseSpecificSQLGenerator sqlGenerator, String definition, int paramCount, String alias) { public String formatNamedParam(@NonNull DatabaseSpecificSQLGenerator sqlGenerator, String definition, int paramCount, String alias) {
validateParamCount(paramCount); validateParamCount(paramCount);
if (paramCount > 1) { if (paramCount > 1) {
throw new PlatformServiceUnavailableException("error.msg.database.operator.named.invalid", throw new PlatformServiceUnavailableException("error.msg.database.operator.named.invalid",
@@ -183,11 +183,11 @@ public enum SqlOperator {
return formatPlaceholderImpl(definition, paramCount, namedParam); return formatPlaceholderImpl(definition, paramCount, namedParam);
} }
public String formatPlaceholder(@NotNull DatabaseSpecificSQLGenerator sqlGenerator, String definition, int paramCount, String alias) { public String formatPlaceholder(@NonNull DatabaseSpecificSQLGenerator sqlGenerator, String definition, int paramCount, String alias) {
return formatPlaceholder(sqlGenerator, definition, paramCount, alias, "?"); return formatPlaceholder(sqlGenerator, definition, paramCount, alias, "?");
} }
public String formatPlaceholder(@NotNull DatabaseSpecificSQLGenerator sqlGenerator, String definition, int paramCount, String alias, public String formatPlaceholder(@NonNull DatabaseSpecificSQLGenerator sqlGenerator, String definition, int paramCount, String alias,
String placeholder) { String placeholder) {
validateParamCount(paramCount); validateParamCount(paramCount);
return formatPlaceholderImpl(sqlGenerator.alias(sqlGenerator.escape(definition), alias), paramCount, placeholder); return formatPlaceholderImpl(sqlGenerator.alias(sqlGenerator.escape(definition), alias), paramCount, placeholder);
@@ -212,7 +212,7 @@ public enum SqlOperator {
} }
} }
@NotNull @NonNull
public static SqlOperator forName(String name) { public static SqlOperator forName(String name) {
return name == null ? getDefault() : SqlOperator.valueOf(name.toUpperCase()); return name == null ? getDefault() : SqlOperator.valueOf(name.toUpperCase());
} }
@@ -19,7 +19,6 @@
package org.apache.fineract.infrastructure.dataqueries.service; package org.apache.fineract.infrastructure.dataqueries.service;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import jakarta.validation.constraints.NotNull;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import org.apache.fineract.infrastructure.core.service.PagedLocalRequest; import org.apache.fineract.infrastructure.core.service.PagedLocalRequest;
@@ -28,6 +27,7 @@ import org.apache.fineract.infrastructure.dataqueries.data.EntityTables;
import org.apache.fineract.infrastructure.dataqueries.data.GenericResultsetData; import org.apache.fineract.infrastructure.dataqueries.data.GenericResultsetData;
import org.apache.fineract.portfolio.search.data.AdvancedQueryData; import org.apache.fineract.portfolio.search.data.AdvancedQueryData;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.lang.NonNull;
public interface DatatableReadService { public interface DatatableReadService {
@@ -35,14 +35,14 @@ public interface DatatableReadService {
DatatableData retrieveDatatable(String datatable); DatatableData retrieveDatatable(String datatable);
List<JsonObject> queryDataTable(@NotNull String datatable, @NotNull String columnName, String columnValue, List<JsonObject> queryDataTable(@NonNull String datatable, @NonNull String columnName, String columnValue,
@NotNull String resultColumns); @NonNull String resultColumns);
Page<JsonObject> queryDataTableAdvanced(@NotNull String datatable, @NotNull PagedLocalRequest<AdvancedQueryData> pagedRequest); Page<JsonObject> queryDataTableAdvanced(@NonNull String datatable, @NonNull PagedLocalRequest<AdvancedQueryData> pagedRequest);
boolean buildDataQueryEmbedded(@NotNull EntityTables entityTable, @NotNull String datatable, @NotNull AdvancedQueryData request, boolean buildDataQueryEmbedded(@NonNull EntityTables entityTable, @NonNull String datatable, @NonNull AdvancedQueryData request,
@NotNull List<String> selectColumns, @NotNull StringBuilder select, @NotNull StringBuilder from, @NotNull StringBuilder where, @NonNull List<String> selectColumns, @NonNull StringBuilder select, @NonNull StringBuilder from, @NonNull StringBuilder where,
@NotNull List<Object> params, String mainAlias, String alias, String dateFormat, String dateTimeFormat, Locale locale); @NonNull List<Object> params, String mainAlias, String alias, String dateFormat, String dateTimeFormat, Locale locale);
GenericResultsetData retrieveDataTableGenericResultSet(String datatable, Long appTableId, String order, Long id); GenericResultsetData retrieveDataTableGenericResultSet(String datatable, Long appTableId, String order, Long id);
@@ -18,25 +18,25 @@
*/ */
package org.apache.fineract.infrastructure.jobs.service; package org.apache.fineract.infrastructure.jobs.service;
import jakarta.validation.constraints.NotNull;
import java.util.List; import java.util.List;
import org.apache.fineract.infrastructure.core.api.IdTypeResolver; import org.apache.fineract.infrastructure.core.api.IdTypeResolver;
import org.apache.fineract.infrastructure.core.service.Page; import org.apache.fineract.infrastructure.core.service.Page;
import org.apache.fineract.infrastructure.core.service.SearchParameters; import org.apache.fineract.infrastructure.core.service.SearchParameters;
import org.apache.fineract.infrastructure.jobs.data.JobDetailData; import org.apache.fineract.infrastructure.jobs.data.JobDetailData;
import org.apache.fineract.infrastructure.jobs.data.JobDetailHistoryData; import org.apache.fineract.infrastructure.jobs.data.JobDetailHistoryData;
import org.springframework.lang.NonNull;
public interface SchedulerJobRunnerReadService { public interface SchedulerJobRunnerReadService {
List<JobDetailData> findAllJobDetails(); List<JobDetailData> findAllJobDetails();
JobDetailData retrieveOne(@NotNull IdTypeResolver.IdType idType, String identifier); JobDetailData retrieveOne(@NonNull IdTypeResolver.IdType idType, String identifier);
Page<JobDetailHistoryData> retrieveJobHistory(@NotNull IdTypeResolver.IdType idType, String identifier, Page<JobDetailHistoryData> retrieveJobHistory(@NonNull IdTypeResolver.IdType idType, String identifier,
SearchParameters searchParameters); SearchParameters searchParameters);
@NotNull @NonNull
Long retrieveId(@NotNull IdTypeResolver.IdType idType, String identifier); Long retrieveId(@NonNull IdTypeResolver.IdType idType, String identifier);
boolean isUpdatesAllowed(); boolean isUpdatesAllowed();
} }
@@ -64,7 +64,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.Loan;
import org.apache.fineract.portfolio.loanaccount.domain.LoanSummary; import org.apache.fineract.portfolio.loanaccount.domain.LoanSummary;
import org.apache.fineract.portfolio.loanaccount.service.LoanJournalEntryPoster; import org.apache.fineract.portfolio.loanaccount.service.LoanJournalEntryPoster;
import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct; import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct;
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.BeforeAll; import org.junit.jupiter.api.BeforeAll;
@@ -81,6 +80,7 @@ import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
import org.springframework.lang.NonNull;
@ExtendWith(MockitoExtension.class) @ExtendWith(MockitoExtension.class)
public class LoanAccountOwnerTransferBusinessStepTest { public class LoanAccountOwnerTransferBusinessStepTest {
@@ -574,7 +574,7 @@ public class LoanAccountOwnerTransferBusinessStepTest {
assertEquals("Execute external asset owner transfer", actualEnumName); assertEquals("Execute external asset owner transfer", actualEnumName);
} }
@NotNull @NonNull
private ArgumentCaptor<BusinessEvent<?>> verifyBusinessEvents(int expectedBusinessEvents) { private ArgumentCaptor<BusinessEvent<?>> verifyBusinessEvents(int expectedBusinessEvents) {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
ArgumentCaptor<BusinessEvent<?>> businessEventArgumentCaptor = ArgumentCaptor.forClass(BusinessEvent.class); ArgumentCaptor<BusinessEvent<?>> businessEventArgumentCaptor = ArgumentCaptor.forClass(BusinessEvent.class);
@@ -51,7 +51,6 @@ import org.apache.fineract.organisation.monetary.domain.MoneyHelper;
import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.domain.Loan;
import org.apache.fineract.portfolio.loanaccount.domain.LoanSummary; import org.apache.fineract.portfolio.loanaccount.domain.LoanSummary;
import org.apache.fineract.portfolio.loanaccount.service.LoanJournalEntryPoster; import org.apache.fineract.portfolio.loanaccount.service.LoanJournalEntryPoster;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
@@ -68,6 +67,7 @@ import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.domain.Specification;
import org.springframework.lang.NonNull;
@ExtendWith(MockitoExtension.class) @ExtendWith(MockitoExtension.class)
public class LoanAccountOwnerTransferServiceTest { public class LoanAccountOwnerTransferServiceTest {
@@ -240,7 +240,7 @@ public class LoanAccountOwnerTransferServiceTest {
return Stream.of(Arguments.of(ExternalTransferStatus.BUYBACK_INTERMEDIATE), Arguments.of(ExternalTransferStatus.BUYBACK)); return Stream.of(Arguments.of(ExternalTransferStatus.BUYBACK_INTERMEDIATE), Arguments.of(ExternalTransferStatus.BUYBACK));
} }
@NotNull @NonNull
private ArgumentCaptor<BusinessEvent<?>> verifyBusinessEvents(int expectedBusinessEvents) { private ArgumentCaptor<BusinessEvent<?>> verifyBusinessEvents(int expectedBusinessEvents) {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
ArgumentCaptor<BusinessEvent<?>> businessEventArgumentCaptor = ArgumentCaptor.forClass(BusinessEvent.class); ArgumentCaptor<BusinessEvent<?>> businessEventArgumentCaptor = ArgumentCaptor.forClass(BusinessEvent.class);
@@ -23,7 +23,6 @@ import static org.apache.fineract.portfolio.delinquency.validator.DelinquencyAct
import static org.apache.fineract.portfolio.delinquency.validator.DelinquencyActionParameters.START_DATE; import static org.apache.fineract.portfolio.delinquency.validator.DelinquencyActionParameters.START_DATE;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import jakarta.validation.constraints.NotNull;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.List; import java.util.List;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -39,6 +38,7 @@ import org.apache.fineract.portfolio.delinquency.domain.DelinquencyAction;
import org.apache.fineract.portfolio.delinquency.domain.LoanDelinquencyAction; 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.springframework.lang.NonNull;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@RequiredArgsConstructor @RequiredArgsConstructor
@@ -48,7 +48,7 @@ public class DelinquencyActionParseAndValidator extends ParseAndValidator {
private final FromJsonHelper jsonHelper; private final FromJsonHelper jsonHelper;
private final DelinquencyEffectivePauseHelper delinquencyEffectivePauseHelper; private final DelinquencyEffectivePauseHelper delinquencyEffectivePauseHelper;
public LoanDelinquencyAction validateAndParseUpdate(@NotNull final JsonCommand command, Loan loan, public LoanDelinquencyAction validateAndParseUpdate(@NonNull final JsonCommand command, Loan loan,
List<LoanDelinquencyAction> savedDelinquencyActions, LocalDate businessDate) { List<LoanDelinquencyAction> savedDelinquencyActions, LocalDate businessDate) {
List<LoanDelinquencyActionData> effectiveDelinquencyList = delinquencyEffectivePauseHelper List<LoanDelinquencyActionData> effectiveDelinquencyList = delinquencyEffectivePauseHelper
.calculateEffectiveDelinquencyList(savedDelinquencyActions); .calculateEffectiveDelinquencyList(savedDelinquencyActions);
@@ -183,8 +183,8 @@ public class DelinquencyActionParseAndValidator extends ParseAndValidator {
|| (parsed.getStartDate().isEqual(existing.getStartDate()) && parsed.getEndDate().isEqual(existing.getEndDate())); || (parsed.getStartDate().isEqual(existing.getStartDate()) && parsed.getEndDate().isEqual(existing.getEndDate()));
} }
@org.jetbrains.annotations.NotNull @NonNull
private LoanDelinquencyAction parseCommand(@org.jetbrains.annotations.NotNull JsonCommand command) { private LoanDelinquencyAction parseCommand(@NonNull JsonCommand command) {
LoanDelinquencyAction parsedDelinquencyAction = new LoanDelinquencyAction(); LoanDelinquencyAction parsedDelinquencyAction = new LoanDelinquencyAction();
parsedDelinquencyAction.setAction(extractAction(command.parsedJson())); parsedDelinquencyAction.setAction(extractAction(command.parsedJson()));
parsedDelinquencyAction.setStartDate(extractStartDate(command.parsedJson())); parsedDelinquencyAction.setStartDate(extractStartDate(command.parsedJson()));
@@ -18,21 +18,21 @@
*/ */
package org.apache.fineract.portfolio.loanaccount.service; package org.apache.fineract.portfolio.loanaccount.service;
import jakarta.validation.constraints.NotNull;
import java.time.LocalDate; import java.time.LocalDate;
import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.domain.Loan;
import org.springframework.lang.NonNull;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
public interface LoanAccrualActivityProcessingService { public interface LoanAccrualActivityProcessingService {
@Transactional @Transactional
void makeAccrualActivityTransaction(@NotNull Long loanId, @NotNull LocalDate currentDate); void makeAccrualActivityTransaction(@NonNull Long loanId, @NonNull LocalDate currentDate);
void makeAccrualActivityTransaction(@NotNull Loan loan, @NotNull LocalDate currentDate); void makeAccrualActivityTransaction(@NonNull Loan loan, @NonNull LocalDate currentDate);
@Transactional @Transactional
void processAccrualActivityForLoanClosure(@NotNull Loan loan); void processAccrualActivityForLoanClosure(@NonNull Loan loan);
@Transactional @Transactional
void processAccrualActivityForLoanReopen(@NotNull Loan loan); void processAccrualActivityForLoanReopen(@NonNull Loan loan);
} }
@@ -18,7 +18,6 @@
*/ */
package org.apache.fineract.portfolio.loanaccount.service; package org.apache.fineract.portfolio.loanaccount.service;
import jakarta.validation.constraints.NotNull;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.List; import java.util.List;
import org.apache.fineract.infrastructure.core.exception.MultiException; import org.apache.fineract.infrastructure.core.exception.MultiException;
@@ -28,22 +27,22 @@ import org.springframework.lang.NonNull;
public interface LoanAccrualsProcessingService { public interface LoanAccrualsProcessingService {
void addPeriodicAccruals(@NotNull LocalDate tillDate) throws MultiException; void addPeriodicAccruals(@NonNull LocalDate tillDate) throws MultiException;
void addPeriodicAccruals(@NotNull LocalDate tillDate, @NotNull Loan loan) throws MultiException; void addPeriodicAccruals(@NonNull LocalDate tillDate, @NonNull Loan loan) throws MultiException;
void addAccruals(@NotNull LocalDate tillDate) throws MultiException; void addAccruals(@NonNull LocalDate tillDate) throws MultiException;
void reprocessExistingAccruals(@NotNull Loan loan, boolean addEvent); void reprocessExistingAccruals(@NonNull Loan loan, boolean addEvent);
void processAccrualsOnInterestRecalculation(@NotNull Loan loan, boolean isInterestRecalculationEnabled, boolean addJournal); void processAccrualsOnInterestRecalculation(@NonNull Loan loan, boolean isInterestRecalculationEnabled, boolean addJournal);
void addIncomePostingAndAccruals(Long loanId) throws Exception; void addIncomePostingAndAccruals(Long loanId) throws Exception;
void processIncomePostingAndAccruals(@NotNull Loan loan, boolean addEvent); void processIncomePostingAndAccruals(@NonNull Loan loan, boolean addEvent);
void processAccrualsOnLoanClosure(@NonNull Loan loan, boolean addJournal); void processAccrualsOnLoanClosure(@NonNull Loan loan, boolean addJournal);
void processAccrualsOnLoanForeClosure(@NotNull Loan loan, @NotNull LocalDate foreClosureDate, void processAccrualsOnLoanForeClosure(@NonNull Loan loan, @NonNull LocalDate foreClosureDate,
@NotNull List<LoanTransaction> newAccrualTransactions); @NonNull List<LoanTransaction> newAccrualTransactions);
} }
@@ -18,7 +18,6 @@
*/ */
package org.apache.fineract.portfolio.loanaccount.service; package org.apache.fineract.portfolio.loanaccount.service;
import jakarta.validation.constraints.NotNull;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@@ -44,6 +43,7 @@ import org.apache.fineract.portfolio.loanaccount.loanschedule.data.LoanScheduleD
import org.apache.fineract.portfolio.loanaccount.loanschedule.data.OverdueLoanScheduleData; import org.apache.fineract.portfolio.loanaccount.loanschedule.data.OverdueLoanScheduleData;
import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleType; import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleType;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.lang.NonNull;
public interface LoanReadPlatformService { public interface LoanReadPlatformService {
@@ -57,7 +57,7 @@ public interface LoanReadPlatformService {
Collection<LoanTransactionData> retrieveLoanTransactions(Long loanId); Collection<LoanTransactionData> retrieveLoanTransactions(Long loanId);
org.springframework.data.domain.Page<LoanTransactionData> retrieveLoanTransactions(@NotNull Long loanId, org.springframework.data.domain.Page<LoanTransactionData> retrieveLoanTransactions(@NonNull Long loanId,
Set<LoanTransactionType> excludedTransactionTypes, Pageable pageable); Set<LoanTransactionType> excludedTransactionTypes, Pageable pageable);
LoanAccountData retrieveTemplateWithClientAndProductDetails(Long clientId, Long productId); LoanAccountData retrieveTemplateWithClientAndProductDetails(Long clientId, Long productId);
@@ -47,12 +47,12 @@ import org.apache.fineract.portfolio.loanaccount.serialization.LoanChargeValidat
import org.apache.fineract.portfolio.loanaccount.service.LoanBalanceService; import org.apache.fineract.portfolio.loanaccount.service.LoanBalanceService;
import org.apache.fineract.portfolio.loanaccount.service.LoanChargeService; import org.apache.fineract.portfolio.loanaccount.service.LoanChargeService;
import org.apache.fineract.portfolio.loanaccount.service.LoanTransactionProcessingService; import org.apache.fineract.portfolio.loanaccount.service.LoanTransactionProcessingService;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor; import org.mockito.ArgumentCaptor;
import org.mockito.MockedStatic; import org.mockito.MockedStatic;
import org.springframework.lang.NonNull;
public class SingleLoanChargeRepaymentScheduleProcessingWrapperTest { public class SingleLoanChargeRepaymentScheduleProcessingWrapperTest {
@@ -139,7 +139,7 @@ public class SingleLoanChargeRepaymentScheduleProcessingWrapperTest {
penaltyChargesWrittenOff.getValue().getAmount().setScale(1, RoundingMode.UNNECESSARY)); penaltyChargesWrittenOff.getValue().getAmount().setScale(1, RoundingMode.UNNECESSARY));
} }
@NotNull @NonNull
private LoanCharge createCharge(boolean penalty) { private LoanCharge createCharge(boolean penalty) {
Charge charge = mock(Charge.class); Charge charge = mock(Charge.class);
when(charge.getId()).thenReturn(1L); when(charge.getId()).thenReturn(1L);
@@ -153,7 +153,7 @@ public class SingleLoanChargeRepaymentScheduleProcessingWrapperTest {
ChargeCalculationType.FLAT, LocalDate.of(2023, 1, 15), ChargePaymentMode.REGULAR, 1, null, null); ChargeCalculationType.FLAT, LocalDate.of(2023, 1, 15), ChargePaymentMode.REGULAR, 1, null, null);
} }
@NotNull @NonNull
private LoanRepaymentScheduleInstallment createPeriod(int periodId, LocalDate start, LocalDate end) { private LoanRepaymentScheduleInstallment createPeriod(int periodId, LocalDate start, LocalDate end) {
LoanRepaymentScheduleInstallment period = mock(LoanRepaymentScheduleInstallment.class); LoanRepaymentScheduleInstallment period = mock(LoanRepaymentScheduleInstallment.class);
MathContext mc = new MathContext(12, RoundingMode.HALF_EVEN); MathContext mc = new MathContext(12, RoundingMode.HALF_EVEN);
@@ -22,7 +22,6 @@ import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import com.google.gson.InstanceCreator; import com.google.gson.InstanceCreator;
import com.google.gson.ToNumberPolicy; import com.google.gson.ToNumberPolicy;
import jakarta.validation.constraints.NotNull;
import java.math.MathContext; import java.math.MathContext;
import java.time.LocalDate; import java.time.LocalDate;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -37,6 +36,7 @@ import org.apache.fineract.portfolio.loanproduct.calc.data.InterestPeriod;
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.springframework.lang.NonNull;
@Slf4j @Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
@@ -68,13 +68,13 @@ public class ProgressiveLoanInterestScheduleModelParserServiceGsonImpl implement
} }
@Override @Override
public String toJson(@NotNull ProgressiveLoanInterestScheduleModel model) { public String toJson(@NonNull ProgressiveLoanInterestScheduleModel model) {
return gsonSerializer.toJson(model); return gsonSerializer.toJson(model);
} }
@Override @Override
public ProgressiveLoanInterestScheduleModel fromJson(String s, public ProgressiveLoanInterestScheduleModel fromJson(String s,
@NotNull LoanProductMinimumRepaymentScheduleRelatedDetail loanProductRelatedDetail, @NotNull MathContext mc, @NonNull LoanProductMinimumRepaymentScheduleRelatedDetail loanProductRelatedDetail, @NonNull MathContext mc,
Integer installmentAmountInMultipliesOf) { Integer installmentAmountInMultipliesOf) {
if (s == null) { if (s == null) {
return null; return null;
@@ -28,7 +28,6 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.google.gson.JsonParser; import com.google.gson.JsonParser;
import jakarta.annotation.Nullable; import jakarta.annotation.Nullable;
import jakarta.validation.constraints.NotNull;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
@@ -67,6 +66,7 @@ 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.springframework.lang.NonNull;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -88,7 +88,7 @@ public class ThitsaWorksCreditBureauIntegrationWritePlatformServiceImpl implemen
@Transactional @Transactional
@Override @Override
public String okHttpConnectionMethod(String userName, String password, String subscriptionKey, String subscriptionId, String url, public String okHttpConnectionMethod(String userName, String password, String subscriptionKey, String subscriptionId, String url,
String token, File file, FormDataContentDisposition fileData, Long uniqueId, String nrcId, @NotNull String process) { String token, File file, FormDataContentDisposition fileData, Long uniqueId, String nrcId, @NonNull String process) {
String responseMessage = null; String responseMessage = null;
if (StringUtils.isBlank(url)) { if (StringUtils.isBlank(url)) {
@@ -23,7 +23,6 @@ import static org.apache.fineract.infrastructure.core.service.database.SqlOperat
import com.google.common.base.Splitter; import com.google.common.base.Splitter;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import jakarta.validation.constraints.NotNull;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
@@ -48,6 +47,7 @@ import org.springframework.data.domain.Sort;
import org.springframework.data.support.PageableExecutionUtils; import org.springframework.data.support.PageableExecutionUtils;
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.lang.NonNull;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@Slf4j @Slf4j
@@ -126,8 +126,8 @@ public class DatatableReadServiceImpl implements DatatableReadService {
} }
@Override @Override
public List<JsonObject> queryDataTable(@NotNull String datatable, @NotNull String columnName, String columnValueString, public List<JsonObject> queryDataTable(@NonNull String datatable, @NonNull String columnName, String columnValueString,
@NotNull String resultColumnsString) { @NonNull String resultColumnsString) {
datatable = datatableUtil.validateDatatableRegistered(datatable); datatable = datatableUtil.validateDatatableRegistered(datatable);
Map<String, ResultsetColumnHeaderData> headersByName = searchUtil Map<String, ResultsetColumnHeaderData> headersByName = searchUtil
.mapHeadersToName(genericDataService.fillResultsetColumnHeaders(datatable)); .mapHeadersToName(genericDataService.fillResultsetColumnHeaders(datatable));
@@ -149,7 +149,7 @@ public class DatatableReadServiceImpl implements DatatableReadService {
} }
@Override @Override
public Page<JsonObject> queryDataTableAdvanced(@NotNull String datatable, @NotNull PagedLocalRequest<AdvancedQueryData> pagedRequest) { public Page<JsonObject> queryDataTableAdvanced(@NonNull String datatable, @NonNull PagedLocalRequest<AdvancedQueryData> pagedRequest) {
datatable = datatableUtil.validateDatatableRegistered(datatable); datatable = datatableUtil.validateDatatableRegistered(datatable);
context.authenticatedUser().validateHasDatatableReadPermission(datatable); context.authenticatedUser().validateHasDatatableReadPermission(datatable);
@@ -219,9 +219,9 @@ public class DatatableReadServiceImpl implements DatatableReadService {
} }
@Override @Override
public boolean buildDataQueryEmbedded(@NotNull EntityTables entityTable, @NotNull String datatable, @NotNull AdvancedQueryData request, public boolean buildDataQueryEmbedded(@NonNull EntityTables entityTable, @NonNull String datatable, @NonNull AdvancedQueryData request,
@NotNull List<String> selectColumns, @NotNull StringBuilder select, @NotNull StringBuilder from, @NotNull StringBuilder where, @NonNull List<String> selectColumns, @NonNull StringBuilder select, @NonNull StringBuilder from, @NonNull StringBuilder where,
@NotNull List<Object> params, String mainAlias, String alias, String dateFormat, String dateTimeFormat, Locale locale) { @NonNull List<Object> params, String mainAlias, String alias, String dateFormat, String dateTimeFormat, Locale locale) {
List<String> resultColumns = request.getResultColumns(); List<String> resultColumns = request.getResultColumns();
List<ColumnFilterData> columnFilters = request.getColumnFilters(); List<ColumnFilterData> columnFilters = request.getColumnFilters();
if ((resultColumns == null || resultColumns.isEmpty()) && (columnFilters == null || columnFilters.isEmpty())) { if ((resultColumns == null || resultColumns.isEmpty()) && (columnFilters == null || columnFilters.isEmpty())) {
@@ -23,7 +23,6 @@ import static org.apache.fineract.infrastructure.dataqueries.api.DataTableApiCon
import static org.apache.fineract.infrastructure.dataqueries.api.DataTableApiConstant.TABLE_FIELD_ID; import static org.apache.fineract.infrastructure.dataqueries.api.DataTableApiConstant.TABLE_FIELD_ID;
import static org.apache.fineract.infrastructure.dataqueries.api.DataTableApiConstant.TABLE_REGISTERED_TABLE; import static org.apache.fineract.infrastructure.dataqueries.api.DataTableApiConstant.TABLE_REGISTERED_TABLE;
import jakarta.validation.constraints.NotNull;
import java.util.List; import java.util.List;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -45,6 +44,7 @@ import org.apache.fineract.portfolio.search.service.SearchUtil;
import org.apache.fineract.useradministration.domain.AppUser; import org.apache.fineract.useradministration.domain.AppUser;
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.lang.NonNull;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Slf4j @Slf4j
@@ -96,7 +96,7 @@ public class DatatableUtil {
return entityTable; return entityTable;
} }
@NotNull @NonNull
public EntityTables queryForApplicationEntity(final String datatable) { public EntityTables queryForApplicationEntity(final String datatable) {
sqlValidator.validate(datatable); sqlValidator.validate(datatable);
final String sql = "SELECT application_table_name FROM x_registered_table where registered_table_name = ?"; final String sql = "SELECT application_table_name FROM x_registered_table where registered_table_name = ?";
@@ -111,7 +111,7 @@ public class DatatableUtil {
return resolveEntity(applicationTableName); return resolveEntity(applicationTableName);
} }
public CommandProcessingResult checkMainResourceExistsWithinScope(@NotNull EntityTables entityTable, final Long appTableId) { public CommandProcessingResult checkMainResourceExistsWithinScope(@NonNull EntityTables entityTable, final Long appTableId) {
final String sql = dataScopedSQL(entityTable, appTableId); final String sql = dataScopedSQL(entityTable, appTableId);
log.debug("data scoped sql: {}", sql); log.debug("data scoped sql: {}", sql);
final SqlRowSet rs = this.jdbcTemplate.queryForRowSet(sql); final SqlRowSet rs = this.jdbcTemplate.queryForRowSet(sql);
@@ -140,7 +140,7 @@ public class DatatableUtil {
.build(); .build();
} }
public String dataScopedSQL(@NotNull EntityTables entityTable, final Long appTableId) { public String dataScopedSQL(@NonNull EntityTables entityTable, final Long appTableId) {
// unfortunately have to, one way or another, be able to restrict data to the users office hierarchy. Here, a // unfortunately have to, one way or another, be able to restrict data to the users office hierarchy. Here, a
// few key tables are done. But if additional fields are needed on other tables the same pattern applies // few key tables are done. But if additional fields are needed on other tables the same pattern applies
final AppUser currentUser = this.context.authenticatedUser(); final AppUser currentUser = this.context.authenticatedUser();
@@ -54,7 +54,6 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import jakarta.persistence.PersistenceException; import jakarta.persistence.PersistenceException;
import jakarta.validation.constraints.NotNull;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
@@ -112,6 +111,7 @@ import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.support.GeneratedKeyHolder; import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.lang.NonNull;
import org.springframework.orm.jpa.JpaSystemException; import org.springframework.orm.jpa.JpaSystemException;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -1199,7 +1199,7 @@ public class DatatableWriteServiceImpl implements DatatableWriteService {
}); });
} }
private static boolean isUserInsertable(@NotNull EntityTables entityTable, @NotNull ResultsetColumnHeaderData columnHeader) { private static boolean isUserInsertable(@NonNull EntityTables entityTable, @NonNull ResultsetColumnHeaderData columnHeader) {
String columnName = columnHeader.getColumnName(); String columnName = columnHeader.getColumnName();
return !columnHeader.getIsColumnPrimaryKey() && !CREATEDAT_FIELD_NAME.equals(columnName) && !UPDATEDAT_FIELD_NAME.equals(columnName) return !columnHeader.getIsColumnPrimaryKey() && !CREATEDAT_FIELD_NAME.equals(columnName) && !UPDATEDAT_FIELD_NAME.equals(columnName)
&& !entityTable.getForeignKeyColumnNameOnDatatable().equals(columnName); && !entityTable.getForeignKeyColumnNameOnDatatable().equals(columnName);
@@ -1298,7 +1298,7 @@ public class DatatableWriteServiceImpl implements DatatableWriteService {
.with(changes).build(); .with(changes).build();
} }
private static boolean isUserUpdatable(@NotNull EntityTables entityTable, @NotNull ResultsetColumnHeaderData columnHeader) { private static boolean isUserUpdatable(@NonNull EntityTables entityTable, @NonNull ResultsetColumnHeaderData columnHeader) {
return isUserInsertable(entityTable, columnHeader); return isUserInsertable(entityTable, columnHeader);
} }
@@ -1369,7 +1369,7 @@ public class DatatableWriteServiceImpl implements DatatableWriteService {
// --- DbUtils --- // --- DbUtils ---
@NotNull @NonNull
private String mapApiTypeToDbType(String apiType, Integer length) { private String mapApiTypeToDbType(String apiType, Integer length) {
if (StringUtils.isEmpty(apiType)) { if (StringUtils.isEmpty(apiType)) {
return ""; return "";
@@ -18,7 +18,6 @@
*/ */
package org.apache.fineract.infrastructure.dataqueries.service; package org.apache.fineract.infrastructure.dataqueries.service;
import jakarta.validation.constraints.NotNull;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
@@ -47,6 +46,7 @@ import org.apache.fineract.portfolio.savings.data.SavingsProductData;
import org.apache.fineract.portfolio.savings.service.SavingsProductReadPlatformService; import org.apache.fineract.portfolio.savings.service.SavingsProductReadPlatformService;
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;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Service @Service
@@ -78,7 +78,7 @@ public class EntityDatatableChecksReadPlatformServiceImpl implements EntityDatat
} }
@Override @Override
public Page<EntityDataTableChecksData> retrieveAll(@NotNull SearchParameters searchParameters, final Integer status, public Page<EntityDataTableChecksData> retrieveAll(@NonNull SearchParameters searchParameters, final Integer status,
final String entity, final Long productId) { final String entity, final Long productId) {
final StringBuilder sqlBuilder = new StringBuilder(200); final StringBuilder sqlBuilder = new StringBuilder(200);
sqlBuilder.append("select ").append(sqlGenerator.calcFoundRows()).append(" ").append(this.entityDataTableChecksMapper.schema()); sqlBuilder.append("select ").append(sqlGenerator.calcFoundRows()).append(" ").append(this.entityDataTableChecksMapper.schema());
@@ -18,7 +18,6 @@
*/ */
package org.apache.fineract.infrastructure.jobs.service; package org.apache.fineract.infrastructure.jobs.service;
import jakarta.validation.constraints.NotNull;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Date; import java.util.Date;
@@ -38,6 +37,7 @@ import org.apache.fineract.infrastructure.security.utils.ColumnValidator;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
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;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -71,7 +71,7 @@ public class SchedulerJobRunnerReadServiceImpl implements SchedulerJobRunnerRead
} }
@Override @Override
public JobDetailData retrieveOne(@NotNull IdTypeResolver.IdType idType, String identifier) { public JobDetailData retrieveOne(@NonNull IdTypeResolver.IdType idType, String identifier) {
JobDetailData jobDetail = switch (idType) { JobDetailData jobDetail = switch (idType) {
case ID -> jobDetailRepository.getDataById(Long.valueOf(identifier)); case ID -> jobDetailRepository.getDataById(Long.valueOf(identifier));
case SHORT_NAME -> jobDetailRepository.getDataByShortName(identifier); case SHORT_NAME -> jobDetailRepository.getDataByShortName(identifier);
@@ -84,7 +84,7 @@ public class SchedulerJobRunnerReadServiceImpl implements SchedulerJobRunnerRead
} }
@Override @Override
public Page<JobDetailHistoryData> retrieveJobHistory(@NotNull IdTypeResolver.IdType idType, String identifier, public Page<JobDetailHistoryData> retrieveJobHistory(@NonNull IdTypeResolver.IdType idType, String identifier,
SearchParameters searchParameters) { SearchParameters searchParameters) {
if (!isJobExist(idType, identifier)) { if (!isJobExist(idType, identifier)) {
throw new JobNotFoundException(idType, identifier); throw new JobNotFoundException(idType, identifier);
@@ -127,8 +127,8 @@ public class SchedulerJobRunnerReadServiceImpl implements SchedulerJobRunnerRead
} }
@Override @Override
@NotNull @NonNull
public Long retrieveId(@NotNull IdTypeResolver.IdType idType, String identifier) { public Long retrieveId(@NonNull IdTypeResolver.IdType idType, String identifier) {
return switch (idType) { return switch (idType) {
case ID -> Long.valueOf(identifier); case ID -> Long.valueOf(identifier);
case SHORT_NAME -> case SHORT_NAME ->
@@ -149,7 +149,7 @@ public class SchedulerJobRunnerReadServiceImpl implements SchedulerJobRunnerRead
return true; return true;
} }
private boolean isJobExist(@NotNull IdTypeResolver.IdType idType, @NotNull String jobId) { private boolean isJobExist(@NonNull IdTypeResolver.IdType idType, @NonNull String jobId) {
return switch (idType) { return switch (idType) {
case ID -> jobDetailRepository.existsById(Long.valueOf(jobId)); case ID -> jobDetailRepository.existsById(Long.valueOf(jobId));
case SHORT_NAME -> jobDetailRepository.existsByShortName(jobId); case SHORT_NAME -> jobDetailRepository.existsByShortName(jobId);
@@ -18,7 +18,6 @@
*/ */
package org.apache.fineract.interoperation.service; package org.apache.fineract.interoperation.service;
import jakarta.validation.constraints.NotNull;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import org.apache.fineract.infrastructure.core.api.JsonCommand; import org.apache.fineract.infrastructure.core.api.JsonCommand;
import org.apache.fineract.interoperation.data.InteropAccountData; import org.apache.fineract.interoperation.data.InteropAccountData;
@@ -30,58 +29,59 @@ import org.apache.fineract.interoperation.data.InteropTransactionRequestResponse
import org.apache.fineract.interoperation.data.InteropTransactionsData; import org.apache.fineract.interoperation.data.InteropTransactionsData;
import org.apache.fineract.interoperation.data.InteropTransferResponseData; import org.apache.fineract.interoperation.data.InteropTransferResponseData;
import org.apache.fineract.interoperation.domain.InteropIdentifierType; import org.apache.fineract.interoperation.domain.InteropIdentifierType;
import org.springframework.lang.NonNull;
public interface InteropService { public interface InteropService {
@NotNull @NonNull
InteropIdentifiersResponseData getAccountIdentifiers(@NotNull String accountId); InteropIdentifiersResponseData getAccountIdentifiers(@NonNull String accountId);
@NotNull @NonNull
InteropAccountData getAccountDetails(@NotNull String accountId); InteropAccountData getAccountDetails(@NonNull String accountId);
@NotNull @NonNull
InteropTransactionsData getAccountTransactions(@NotNull String accountId, boolean debit, boolean credit, LocalDateTime transactionsFrom, InteropTransactionsData getAccountTransactions(@NonNull String accountId, boolean debit, boolean credit, LocalDateTime transactionsFrom,
LocalDateTime transactionsTo); LocalDateTime transactionsTo);
@NotNull @NonNull
InteropIdentifierAccountResponseData getAccountByIdentifier(@NotNull InteropIdentifierType idType, @NotNull String idValue, InteropIdentifierAccountResponseData getAccountByIdentifier(@NonNull InteropIdentifierType idType, @NonNull String idValue,
String subIdOrType); String subIdOrType);
@NotNull @NonNull
InteropIdentifierAccountResponseData registerAccountIdentifier(@NotNull InteropIdentifierType idType, @NotNull String idValue, InteropIdentifierAccountResponseData registerAccountIdentifier(@NonNull InteropIdentifierType idType, @NonNull String idValue,
String subIdOrType, @NotNull JsonCommand command); String subIdOrType, @NonNull JsonCommand command);
@NotNull @NonNull
InteropIdentifierAccountResponseData deleteAccountIdentifier(@NotNull InteropIdentifierType idType, @NotNull String idValue, InteropIdentifierAccountResponseData deleteAccountIdentifier(@NonNull InteropIdentifierType idType, @NonNull String idValue,
String subIdOrType); String subIdOrType);
InteropTransactionRequestResponseData getTransactionRequest(@NotNull String transactionCode, @NotNull String requestCode); InteropTransactionRequestResponseData getTransactionRequest(@NonNull String transactionCode, @NonNull String requestCode);
@NotNull @NonNull
InteropTransactionRequestResponseData createTransactionRequest(@NotNull JsonCommand command); InteropTransactionRequestResponseData createTransactionRequest(@NonNull JsonCommand command);
InteropQuoteResponseData getQuote(@NotNull String transactionCode, @NotNull String quoteCode); InteropQuoteResponseData getQuote(@NonNull String transactionCode, @NonNull String quoteCode);
@NotNull @NonNull
InteropQuoteResponseData createQuote(@NotNull JsonCommand command); InteropQuoteResponseData createQuote(@NonNull JsonCommand command);
InteropTransferResponseData getTransfer(@NotNull String transactionCode, @NotNull String transferCode); InteropTransferResponseData getTransfer(@NonNull String transactionCode, @NonNull String transferCode);
@NotNull @NonNull
InteropTransferResponseData prepareTransfer(@NotNull JsonCommand command); InteropTransferResponseData prepareTransfer(@NonNull JsonCommand command);
@NotNull @NonNull
InteropTransferResponseData commitTransfer(@NotNull JsonCommand command); InteropTransferResponseData commitTransfer(@NonNull JsonCommand command);
@NotNull @NonNull
InteropTransferResponseData releaseTransfer(@NotNull JsonCommand command); InteropTransferResponseData releaseTransfer(@NonNull JsonCommand command);
@NotNull @NonNull
InteropKycResponseData getKyc(@NotNull String accountId); InteropKycResponseData getKyc(@NonNull String accountId);
@NotNull @NonNull
String disburseLoan(@NotNull String accountId, String apiRequestBodyAsJson); String disburseLoan(@NonNull String accountId, String apiRequestBodyAsJson);
@NotNull @NonNull
String loanRepayment(@NotNull String accountId, String apiRequestBodyAsJson); String loanRepayment(@NonNull String accountId, String apiRequestBodyAsJson);
} }
@@ -27,7 +27,6 @@ import static org.apache.fineract.portfolio.savings.SavingsAccountTransactionTyp
import static org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction.releaseAmount; import static org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction.releaseAmount;
import jakarta.persistence.PersistenceException; import jakarta.persistence.PersistenceException;
import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
@@ -112,6 +111,7 @@ import org.springframework.dao.DataIntegrityViolationException;
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;
import org.springframework.orm.jpa.JpaSystemException; import org.springframework.orm.jpa.JpaSystemException;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -191,17 +191,17 @@ public class InteropServiceImpl implements InteropService {
} }
} }
@NotNull @NonNull
@Override @Override
@Transactional @Transactional
public InteropAccountData getAccountDetails(@NotNull String accountId) { public InteropAccountData getAccountDetails(@NonNull String accountId) {
return InteropAccountData.build(validateAndGetSavingAccount(accountId)); return InteropAccountData.build(validateAndGetSavingAccount(accountId));
} }
@NotNull @NonNull
@Override @Override
@Transactional @Transactional
public InteropTransactionsData getAccountTransactions(@NotNull String accountId, boolean debit, boolean credit, public InteropTransactionsData getAccountTransactions(@NonNull String accountId, boolean debit, boolean credit,
java.time.LocalDateTime transactionsFrom, java.time.LocalDateTime transactionsTo) { java.time.LocalDateTime transactionsFrom, java.time.LocalDateTime transactionsTo) {
SavingsAccount savingsAccount = validateAndGetSavingAccount(accountId); SavingsAccount savingsAccount = validateAndGetSavingAccount(accountId);
@@ -242,18 +242,18 @@ public class InteropServiceImpl implements InteropService {
return interopTransactionsData; return interopTransactionsData;
} }
@NotNull @NonNull
@Override @Override
@Transactional @Transactional
public InteropIdentifiersResponseData getAccountIdentifiers(@NotNull String accountId) { public InteropIdentifiersResponseData getAccountIdentifiers(@NonNull String accountId) {
SavingsAccount savingsAccount = validateAndGetSavingAccount(accountId); SavingsAccount savingsAccount = validateAndGetSavingAccount(accountId);
return InteropIdentifiersResponseData.build(savingsAccount); return InteropIdentifiersResponseData.build(savingsAccount);
} }
@NotNull @NonNull
@Transactional @Transactional
@Override @Override
public InteropIdentifierAccountResponseData getAccountByIdentifier(@NotNull InteropIdentifierType idType, @NotNull String idValue, public InteropIdentifierAccountResponseData getAccountByIdentifier(@NonNull InteropIdentifierType idType, @NonNull String idValue,
String subIdOrType) { String subIdOrType) {
InteropIdentifier identifier = findIdentifier(idType, idValue, subIdOrType); InteropIdentifier identifier = findIdentifier(idType, idValue, subIdOrType);
if (identifier == null) { if (identifier == null) {
@@ -263,11 +263,11 @@ public class InteropServiceImpl implements InteropService {
return InteropIdentifierAccountResponseData.build(identifier.getId(), identifier.getAccount().getExternalId().getValue()); return InteropIdentifierAccountResponseData.build(identifier.getId(), identifier.getAccount().getExternalId().getValue());
} }
@NotNull @NonNull
@Transactional @Transactional
@Override @Override
public InteropIdentifierAccountResponseData registerAccountIdentifier(@NotNull InteropIdentifierType idType, @NotNull String idValue, public InteropIdentifierAccountResponseData registerAccountIdentifier(@NonNull InteropIdentifierType idType, @NonNull String idValue,
String subIdOrType, @NotNull JsonCommand command) { String subIdOrType, @NonNull JsonCommand command) {
InteropIdentifierRequestData request = dataValidator.validateAndParseCreateIdentifier(idType, idValue, subIdOrType, command); InteropIdentifierRequestData request = dataValidator.validateAndParseCreateIdentifier(idType, idValue, subIdOrType, command);
// TODO: error handling // TODO: error handling
SavingsAccount savingsAccount = validateAndGetSavingAccount(request.getAccountId()); SavingsAccount savingsAccount = validateAndGetSavingAccount(request.getAccountId());
@@ -291,10 +291,10 @@ public class InteropServiceImpl implements InteropService {
} }
} }
@NotNull @NonNull
@Transactional @Transactional
@Override @Override
public InteropIdentifierAccountResponseData deleteAccountIdentifier(@NotNull InteropIdentifierType idType, @NotNull String idValue, public InteropIdentifierAccountResponseData deleteAccountIdentifier(@NonNull InteropIdentifierType idType, @NonNull String idValue,
String subIdOrType) { String subIdOrType) {
InteropIdentifier identifier = findIdentifier(idType, idValue, subIdOrType); InteropIdentifier identifier = findIdentifier(idType, idValue, subIdOrType);
if (identifier == null) { if (identifier == null) {
@@ -310,15 +310,15 @@ public class InteropServiceImpl implements InteropService {
} }
@Override @Override
public InteropTransactionRequestResponseData getTransactionRequest(@NotNull String transactionCode, @NotNull String requestCode) { public InteropTransactionRequestResponseData getTransactionRequest(@NonNull String transactionCode, @NonNull String requestCode) {
// always REJECTED until request info is stored // always REJECTED until request info is stored
return InteropTransactionRequestResponseData.build(transactionCode, InteropActionState.REJECTED, requestCode); return InteropTransactionRequestResponseData.build(transactionCode, InteropActionState.REJECTED, requestCode);
} }
@Override @Override
@NotNull @NonNull
@Transactional @Transactional
public InteropTransactionRequestResponseData createTransactionRequest(@NotNull JsonCommand command) { public InteropTransactionRequestResponseData createTransactionRequest(@NonNull JsonCommand command) {
// only when Payee request transaction from Payer, so here role must be // only when Payee request transaction from Payer, so here role must be
// always Payer // always Payer
InteropTransactionRequestData request = dataValidator.validateAndParseCreateRequest(command); InteropTransactionRequestData request = dataValidator.validateAndParseCreateRequest(command);
@@ -331,14 +331,14 @@ public class InteropServiceImpl implements InteropService {
} }
@Override @Override
public InteropQuoteResponseData getQuote(@NotNull String transactionCode, @NotNull String quoteCode) { public InteropQuoteResponseData getQuote(@NonNull String transactionCode, @NonNull String quoteCode) {
return null; return null;
} }
@Override @Override
@NotNull @NonNull
@Transactional @Transactional
public InteropQuoteResponseData createQuote(@NotNull JsonCommand command) { public InteropQuoteResponseData createQuote(@NonNull JsonCommand command) {
InteropQuoteRequestData request = dataValidator.validateAndParseCreateQuote(command); InteropQuoteRequestData request = dataValidator.validateAndParseCreateQuote(command);
SavingsAccount savingsAccount = validateAndGetSavingAccount(request); SavingsAccount savingsAccount = validateAndGetSavingAccount(request);
@@ -361,14 +361,14 @@ public class InteropServiceImpl implements InteropService {
} }
@Override @Override
public InteropTransferResponseData getTransfer(@NotNull String transactionCode, @NotNull String transferCode) { public InteropTransferResponseData getTransfer(@NonNull String transactionCode, @NonNull String transferCode) {
return null; return null;
} }
@Override @Override
@NotNull @NonNull
@Transactional @Transactional
public InteropTransferResponseData prepareTransfer(@NotNull JsonCommand command) { public InteropTransferResponseData prepareTransfer(@NonNull JsonCommand command) {
InteropTransferRequestData request = dataValidator.validateAndParseTransferRequest(command); InteropTransferRequestData request = dataValidator.validateAndParseTransferRequest(command);
String transferCode = request.getTransferCode(); String transferCode = request.getTransferCode();
LocalDate transactionDate = DateUtils.getBusinessLocalDate(); LocalDate transactionDate = DateUtils.getBusinessLocalDate();
@@ -409,9 +409,9 @@ public class InteropServiceImpl implements InteropService {
} }
@Override @Override
@NotNull @NonNull
@Transactional @Transactional
public InteropTransferResponseData commitTransfer(@NotNull JsonCommand command) { public InteropTransferResponseData commitTransfer(@NonNull JsonCommand command) {
InteropTransferRequestData request = dataValidator.validateAndParseTransferRequest(command); InteropTransferRequestData request = dataValidator.validateAndParseTransferRequest(command);
boolean isDebit = request.getTransactionRole().getTransactionType().isDebit(); boolean isDebit = request.getTransactionRole().getTransactionType().isDebit();
SavingsAccount savingsAccount = validateAndGetSavingAccount(request); SavingsAccount savingsAccount = validateAndGetSavingAccount(request);
@@ -474,7 +474,7 @@ public class InteropServiceImpl implements InteropService {
@Override @Override
@Transactional @Transactional
public @NotNull InteropTransferResponseData releaseTransfer(@NotNull JsonCommand command) { public @NonNull InteropTransferResponseData releaseTransfer(@NonNull JsonCommand command) {
InteropTransferRequestData request = dataValidator.validateAndParseTransferRequest(command); InteropTransferRequestData request = dataValidator.validateAndParseTransferRequest(command);
SavingsAccount savingsAccount = validateAndGetSavingAccount(request); SavingsAccount savingsAccount = validateAndGetSavingAccount(request);
@@ -504,7 +504,7 @@ public class InteropServiceImpl implements InteropService {
} }
@Override @Override
public @NotNull InteropKycResponseData getKyc(@NotNull @NotNull String accountId) { public @NonNull InteropKycResponseData getKyc(@NonNull String accountId) {
SavingsAccount savingsAccount = validateAndGetSavingAccount(accountId); SavingsAccount savingsAccount = validateAndGetSavingAccount(accountId);
Long clientId = savingsAccount.getClient().getId(); Long clientId = savingsAccount.getClient().getId();
@@ -522,7 +522,7 @@ public class InteropServiceImpl implements InteropService {
} }
@Override @Override
public @NotNull String disburseLoan(@NotNull String accountId, String apiRequestBodyAsJson) { public @NonNull String disburseLoan(@NonNull String accountId, String apiRequestBodyAsJson) {
Loan loan = validateAndGetLoan(accountId); Loan loan = validateAndGetLoan(accountId);
Long loanId = loan.getId(); Long loanId = loan.getId();
@@ -535,7 +535,7 @@ public class InteropServiceImpl implements InteropService {
} }
@Override @Override
public @NotNull String loanRepayment(@NotNull String accountId, String apiRequestBodyAsJson) { public @NonNull String loanRepayment(@NonNull String accountId, String apiRequestBodyAsJson) {
Loan loan = validateAndGetLoan(accountId); Loan loan = validateAndGetLoan(accountId);
Long loanId = loan.getId(); Long loanId = loan.getId();
@@ -563,7 +563,7 @@ public class InteropServiceImpl implements InteropService {
return loan; return loan;
} }
private SavingsAccount validateAndGetSavingAccount(@NotNull InteropRequestData request) { private SavingsAccount validateAndGetSavingAccount(@NonNull InteropRequestData request) {
// TODO: error handling // TODO: error handling
SavingsAccount savingsAccount = validateAndGetSavingAccount(request.getAccountId()); SavingsAccount savingsAccount = validateAndGetSavingAccount(request.getAccountId());
savingsAccount.setHelpers(savingsAccountTransactionSummaryWrapper, savingsHelper); savingsAccount.setHelpers(savingsAccountTransactionSummaryWrapper, savingsHelper);
@@ -583,7 +583,7 @@ public class InteropServiceImpl implements InteropService {
return savingsAccount; return savingsAccount;
} }
private BigDecimal calculateTotalTransferAmount(@NotNull InteropTransferRequestData request, @NotNull SavingsAccount savingsAccount) { private BigDecimal calculateTotalTransferAmount(@NonNull InteropTransferRequestData request, @NonNull SavingsAccount savingsAccount) {
BigDecimal total = request.getAmount().getAmount(); BigDecimal total = request.getAmount().getAmount();
MoneyData requestFee = request.getFspFee(); MoneyData requestFee = request.getFspFee();
if (requestFee != null) { if (requestFee != null) {
@@ -604,7 +604,7 @@ public class InteropServiceImpl implements InteropService {
return total; return total;
} }
private DateTimeFormatter getDateTimeFormatter(@NotNull JsonCommand command) { private DateTimeFormatter getDateTimeFormatter(@NonNull JsonCommand command) {
Locale locale = command.extractLocale(); Locale locale = command.extractLocale();
if (locale == null) { if (locale == null) {
locale = DEFAULT_LOCALE; locale = DEFAULT_LOCALE;
@@ -637,7 +637,7 @@ public class InteropServiceImpl implements InteropService {
}).findFirst().orElse(null); }).findFirst().orElse(null);
} }
public InteropIdentifier findIdentifier(@NotNull InteropIdentifierType idType, @NotNull String idValue, String subIdOrType) { public InteropIdentifier findIdentifier(@NonNull InteropIdentifierType idType, @NonNull String idValue, String subIdOrType) {
return identifierRepository.findOneByTypeAndValueAndSubType(idType, idValue, subIdOrType); return identifierRepository.findOneByTypeAndValueAndSubType(idType, idValue, subIdOrType);
} }
@@ -657,7 +657,7 @@ public class InteropServiceImpl implements InteropService {
"Unknown data integrity issue with resource: " + realCause.getMessage()); "Unknown data integrity issue with resource: " + realCause.getMessage());
} }
@NotNull @NonNull
String getRoutingCode() { String getRoutingCode() {
return DEFAULT_ROUTING_CODE; return DEFAULT_ROUTING_CODE;
} }
@@ -28,7 +28,6 @@ import static org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionTy
import static org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionType.ACCRUAL_ADJUSTMENT; import static org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionType.ACCRUAL_ADJUSTMENT;
import static org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionType.INCOME_POSTING; import static org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionType.INCOME_POSTING;
import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
@@ -121,7 +120,7 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
*/ */
@Override @Override
@Transactional @Transactional
public void addPeriodicAccruals(@NotNull LocalDate tillDate) throws JobExecutionException { public void addPeriodicAccruals(@NonNull LocalDate tillDate) throws JobExecutionException {
List<Loan> loans = loanRepositoryWrapper.findLoansForPeriodicAccrual(AccountingRuleType.ACCRUAL_PERIODIC, tillDate, List<Loan> loans = loanRepositoryWrapper.findLoansForPeriodicAccrual(AccountingRuleType.ACCRUAL_PERIODIC, tillDate,
!isChargeOnDueDate()); !isChargeOnDueDate());
List<Throwable> errors = new ArrayList<>(); List<Throwable> errors = new ArrayList<>();
@@ -143,7 +142,7 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
*/ */
@Override @Override
@Transactional @Transactional
public void addPeriodicAccruals(@NotNull final LocalDate tillDate, @NotNull final Loan loan) { public void addPeriodicAccruals(@NonNull final LocalDate tillDate, @NonNull final Loan loan) {
if (loan.isClosed() || loan.getStatus().isOverpaid()) { if (loan.isClosed() || loan.getStatus().isOverpaid()) {
return; return;
} }
@@ -156,7 +155,7 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
*/ */
@Override @Override
@Transactional @Transactional
public void addAccruals(@NotNull LocalDate tillDate) throws JobExecutionException { public void addAccruals(@NonNull LocalDate tillDate) throws JobExecutionException {
final boolean chargeOnDueDate = isChargeOnDueDate(); final boolean chargeOnDueDate = isChargeOnDueDate();
List<Loan> loans = loanRepositoryWrapper.findLoansForAddAccrual(AccountingRuleType.ACCRUAL_PERIODIC, tillDate, !chargeOnDueDate); List<Loan> loans = loanRepositoryWrapper.findLoansForAddAccrual(AccountingRuleType.ACCRUAL_PERIODIC, tillDate, !chargeOnDueDate);
@@ -203,7 +202,7 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
* reschedule * reschedule
*/ */
@Override @Override
public void reprocessExistingAccruals(@NotNull final Loan loan, final boolean addEvent) { public void reprocessExistingAccruals(@NonNull final Loan loan, final boolean addEvent) {
List<LoanTransaction> accrualTransactions = retrieveListOfAccrualTransactions(loan); List<LoanTransaction> accrualTransactions = retrieveListOfAccrualTransactions(loan);
if (!accrualTransactions.isEmpty()) { if (!accrualTransactions.isEmpty()) {
if (loan.isPeriodicAccrualAccountingEnabledOnLoanProduct()) { if (loan.isPeriodicAccrualAccountingEnabledOnLoanProduct()) {
@@ -219,7 +218,7 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
*/ */
@Override @Override
@Transactional @Transactional
public void processAccrualsOnInterestRecalculation(@NotNull Loan loan, boolean isInterestRecalculationEnabled, boolean addJournal) { public void processAccrualsOnInterestRecalculation(@NonNull Loan loan, boolean isInterestRecalculationEnabled, boolean addJournal) {
if (isProgressiveAccrual(loan)) { if (isProgressiveAccrual(loan)) {
return; return;
} }
@@ -254,7 +253,7 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
* method calculates accruals for loan with interest recalculation and compounding to be posted as income * method calculates accruals for loan with interest recalculation and compounding to be posted as income
*/ */
@Override @Override
public void processIncomePostingAndAccruals(@NotNull final Loan loan, final boolean addEvent) { public void processIncomePostingAndAccruals(@NonNull final Loan loan, final boolean addEvent) {
if (isProgressiveAccrual(loan)) { if (isProgressiveAccrual(loan)) {
return; return;
} }
@@ -298,8 +297,8 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
* method calculates accruals for loan on loan fore closure * method calculates accruals for loan on loan fore closure
*/ */
@Override @Override
public void processAccrualsOnLoanForeClosure(@NotNull Loan loan, @NotNull LocalDate foreClosureDate, public void processAccrualsOnLoanForeClosure(@NonNull Loan loan, @NonNull LocalDate foreClosureDate,
@NotNull List<LoanTransaction> newAccrualTransactions) { @NonNull List<LoanTransaction> newAccrualTransactions) {
// TODO implement progressive accrual case // TODO implement progressive accrual case
if (loan.isPeriodicAccrualAccountingEnabledOnLoanProduct() if (loan.isPeriodicAccrualAccountingEnabledOnLoanProduct()
&& (loan.getAccruedTill() == null || !DateUtils.isEqual(foreClosureDate, loan.getAccruedTill()))) { && (loan.getAccruedTill() == null || !DateUtils.isEqual(foreClosureDate, loan.getAccruedTill()))) {
@@ -323,7 +322,7 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
// PeriodicAccruals // PeriodicAccruals
private void addAccruals(@NotNull final Loan loan, @NotNull LocalDate tillDate, final boolean periodic, final boolean isFinal, private void addAccruals(@NonNull final Loan loan, @NonNull LocalDate tillDate, final boolean periodic, final boolean isFinal,
final boolean addJournal, final boolean chargeOnDueDate) { final boolean addJournal, final boolean chargeOnDueDate) {
if ((!isFinal && !loan.isOpen()) || loan.isNpa() || loan.isChargedOff() || !loan.isPeriodicAccrualAccountingEnabledOnLoanProduct() if ((!isFinal && !loan.isOpen()) || loan.isNpa() || loan.isChargedOff() || !loan.isPeriodicAccrualAccountingEnabledOnLoanProduct()
|| loan.isContractTermination()) { || loan.isContractTermination()) {
@@ -436,7 +435,7 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
return loan.getLoanCharges(t -> t.isActive() && DateUtils.isEqual(t.getDueDate(), accrualDate)).isEmpty(); return loan.getLoanCharges(t -> t.isActive() && DateUtils.isEqual(t.getDueDate(), accrualDate)).isEmpty();
} }
private AccrualPeriodsData calculateAccrualAmounts(@NotNull final Loan loan, @NotNull final LocalDate tillDate, final boolean periodic, private AccrualPeriodsData calculateAccrualAmounts(@NonNull final Loan loan, @NonNull final LocalDate tillDate, final boolean periodic,
final boolean isFinal, final boolean chargeOnDueDate) { final boolean isFinal, final boolean chargeOnDueDate) {
final LoanProductRelatedDetail productDetail = loan.getLoanProductRelatedDetail(); final LoanProductRelatedDetail productDetail = loan.getLoanProductRelatedDetail();
final MonetaryCurrency currency = productDetail.getCurrency(); final MonetaryCurrency currency = productDetail.getCurrency();
@@ -455,8 +454,8 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
return accrualPeriods; return accrualPeriods;
} }
@NotNull @NonNull
private List<LoanRepaymentScheduleInstallment> getInstallmentsToAccrue(@NotNull final Loan loan, @NotNull final LocalDate tillDate, private List<LoanRepaymentScheduleInstallment> getInstallmentsToAccrue(@NonNull final Loan loan, @NonNull final LocalDate tillDate,
final boolean periodic, final boolean chargeOnDueDate) { final boolean periodic, final boolean chargeOnDueDate) {
final LocalDate organisationStartDate = this.configurationDomainService.retrieveOrganisationStartDate(); final LocalDate organisationStartDate = this.configurationDomainService.retrieveOrganisationStartDate();
final int firstInstallmentNumber = fetchFirstNormalInstallmentNumber(loan.getRepaymentScheduleInstallments()); final int firstInstallmentNumber = fetchFirstNormalInstallmentNumber(loan.getRepaymentScheduleInstallments());
@@ -466,9 +465,9 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
&& !isAfterPeriod(organisationStartDate, i)); && !isAfterPeriod(organisationStartDate, i));
} }
private void addInterestAccrual(@NotNull final Loan loan, @NotNull final LocalDate tillDate, private void addInterestAccrual(@NonNull final Loan loan, @NonNull final LocalDate tillDate,
final LoanScheduleGenerator scheduleGenerator, @NotNull final LoanRepaymentScheduleInstallment installment, final LoanScheduleGenerator scheduleGenerator, @NonNull final LoanRepaymentScheduleInstallment installment,
@NotNull final AccrualPeriodsData accrualPeriods) { @NonNull final AccrualPeriodsData accrualPeriods) {
if (installment.isAdditional() || installment.isReAged()) { if (installment.isAdditional() || installment.isReAged()) {
return; return;
} }
@@ -506,9 +505,9 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
period.setInterestAccrued(accrued); period.setInterestAccrued(accrued);
} }
@NotNull @NonNull
private BigDecimal calcInterestTransactionWaivedAmount(@NotNull LoanRepaymentScheduleInstallment installment, private BigDecimal calcInterestTransactionWaivedAmount(@NonNull LoanRepaymentScheduleInstallment installment,
@NotNull LocalDate tillDate) { @NonNull LocalDate tillDate) {
Predicate<LoanTransaction> transactionPredicate = t -> !t.isReversed() && t.isInterestWaiver() Predicate<LoanTransaction> transactionPredicate = t -> !t.isReversed() && t.isInterestWaiver()
&& !DateUtils.isAfter(t.getTransactionDate(), tillDate); && !DateUtils.isAfter(t.getTransactionDate(), tillDate);
return installment.getLoanTransactionToRepaymentScheduleMappings().stream() return installment.getLoanTransactionToRepaymentScheduleMappings().stream()
@@ -516,9 +515,9 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
.map(LoanTransactionToRepaymentScheduleMapping::getInterestPortion).reduce(BigDecimal.ZERO, MathUtil::add); .map(LoanTransactionToRepaymentScheduleMapping::getInterestPortion).reduce(BigDecimal.ZERO, MathUtil::add);
} }
@NotNull @NonNull
private BigDecimal calcInterestUnrecognizedWaivedAmount(@NotNull LoanRepaymentScheduleInstallment installment, private BigDecimal calcInterestUnrecognizedWaivedAmount(@NonNull LoanRepaymentScheduleInstallment installment,
@NotNull AccrualPeriodsData accrualPeriods, @NotNull LocalDate tillDate) { @NonNull AccrualPeriodsData accrualPeriods, @NonNull LocalDate tillDate) {
// unrecognized amount of the transaction is not mapped to installments // unrecognized amount of the transaction is not mapped to installments
LocalDate dueDate = installment.getDueDate(); LocalDate dueDate = installment.getDueDate();
LocalDate toDate = DateUtils.isBefore(dueDate, tillDate) ? dueDate : tillDate; LocalDate toDate = DateUtils.isBefore(dueDate, tillDate) ? dueDate : tillDate;
@@ -532,9 +531,9 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
return MathUtil.min(installment.getInterestWaived(), MathUtil.subtractToZero(totalUnrecognized, prevUnrecognized), false); return MathUtil.min(installment.getInterestWaived(), MathUtil.subtractToZero(totalUnrecognized, prevUnrecognized), false);
} }
@NotNull @NonNull
private BigDecimal calcInterestAccruedAmount(@NotNull LoanRepaymentScheduleInstallment installment, private BigDecimal calcInterestAccruedAmount(@NonNull LoanRepaymentScheduleInstallment installment,
@NotNull AccrualPeriodsData accrualPeriods, @NotNull LocalDate tillDate) { @NonNull AccrualPeriodsData accrualPeriods, @NonNull LocalDate tillDate) {
Loan loan = installment.getLoan(); Loan loan = installment.getLoan();
if (isProgressiveAccrual(loan)) { if (isProgressiveAccrual(loan)) {
BigDecimal totalAccrued = loanTransactionRepository.findTotalInterestAccruedAmount(loan); BigDecimal totalAccrued = loanTransactionRepository.findTotalInterestAccruedAmount(loan);
@@ -550,8 +549,8 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
} }
} }
private void addChargeAccrual(@NotNull final Loan loan, @NotNull final LocalDate tillDate, final boolean chargeOnDueDate, private void addChargeAccrual(@NonNull final Loan loan, @NonNull final LocalDate tillDate, final boolean chargeOnDueDate,
@NotNull final LoanRepaymentScheduleInstallment installment, @NotNull final AccrualPeriodsData accrualPeriods) { @NonNull final LoanRepaymentScheduleInstallment installment, @NonNull final AccrualPeriodsData accrualPeriods) {
final AccrualPeriodData period = accrualPeriods.getPeriodByInstallmentNumber(installment.getInstallmentNumber()); final AccrualPeriodData period = accrualPeriods.getPeriodByInstallmentNumber(installment.getInstallmentNumber());
final LocalDate dueDate = installment.getDueDate(); final LocalDate dueDate = installment.getDueDate();
final Collection<LoanCharge> loanCharges = loan final Collection<LoanCharge> loanCharges = loan
@@ -564,8 +563,8 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
} }
} }
private void addChargeAccrual(@NotNull final LoanCharge loanCharge, @NotNull final LocalDate tillDate, final boolean chargeOnDueDate, private void addChargeAccrual(@NonNull final LoanCharge loanCharge, @NonNull final LocalDate tillDate, final boolean chargeOnDueDate,
@NotNull final LoanRepaymentScheduleInstallment installment, @NotNull final AccrualPeriodsData accrualPeriods) { @NonNull final LoanRepaymentScheduleInstallment installment, @NonNull final AccrualPeriodsData accrualPeriods) {
final MonetaryCurrency currency = accrualPeriods.getCurrency(); final MonetaryCurrency currency = accrualPeriods.getCurrency();
final Integer firstInstallmentNumber = accrualPeriods.getFirstInstallmentNumber(); final Integer firstInstallmentNumber = accrualPeriods.getFirstInstallmentNumber();
final boolean installmentFee = loanCharge.isInstalmentFee(); final boolean installmentFee = loanCharge.isInstalmentFee();
@@ -617,16 +616,16 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
duePeriod.addCharge(chargeData); duePeriod.addCharge(chargeData);
} }
@NotNull @NonNull
private BigDecimal calcChargeWaivedAmount(@NotNull final Collection<LoanChargePaidBy> loanChargePaidBy, private BigDecimal calcChargeWaivedAmount(@NonNull final Collection<LoanChargePaidBy> loanChargePaidBy,
@NotNull final LocalDate tillDate) { @NonNull final LocalDate tillDate) {
return loanChargePaidBy.stream().filter(pb -> { return loanChargePaidBy.stream().filter(pb -> {
final LoanTransaction t = pb.getLoanTransaction(); final LoanTransaction t = pb.getLoanTransaction();
return !t.isReversed() && t.isWaiveCharge() && !DateUtils.isAfter(t.getTransactionDate(), tillDate); return !t.isReversed() && t.isWaiveCharge() && !DateUtils.isAfter(t.getTransactionDate(), tillDate);
}).map(LoanChargePaidBy::getAmount).reduce(BigDecimal.ZERO, MathUtil::add); }).map(LoanChargePaidBy::getAmount).reduce(BigDecimal.ZERO, MathUtil::add);
} }
private boolean isChargeDue(@NotNull final LoanCharge loanCharge, @NotNull final LocalDate tillDate, boolean chargeOnDueDate, private boolean isChargeDue(@NonNull final LoanCharge loanCharge, @NonNull final LocalDate tillDate, boolean chargeOnDueDate,
final LoanRepaymentScheduleInstallment installment, final boolean isFirstPeriod) { final LoanRepaymentScheduleInstallment installment, final boolean isFirstPeriod) {
final LocalDate fromDate = installment.getFromDate(); final LocalDate fromDate = installment.getFromDate();
final LocalDate dueDate = installment.getDueDate(); final LocalDate dueDate = installment.getDueDate();
@@ -636,7 +635,7 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
: isInPeriod(loanCharge.getSubmittedOnDate(), fromDate, toDate, isFirstPeriod); : isInPeriod(loanCharge.getSubmittedOnDate(), fromDate, toDate, isFirstPeriod);
} }
private LoanTransaction createOrMergeAccrualTransaction(@NotNull final Loan loan, LoanTransaction transaction, private LoanTransaction createOrMergeAccrualTransaction(@NonNull final Loan loan, LoanTransaction transaction,
final LocalDate transactionDate, final AccrualPeriodData accrualPeriod, final List<LoanTransaction> accrualTransactions, final LocalDate transactionDate, final AccrualPeriodData accrualPeriod, final List<LoanTransaction> accrualTransactions,
final Money interest, final Money fee, final Money penalty, final boolean adjustment) { final Money interest, final Money fee, final Money penalty, final boolean adjustment) {
if (transaction == null) { if (transaction == null) {
@@ -650,7 +649,7 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
return transaction; return transaction;
} }
private LoanTransaction addAccrualTransaction(@NotNull Loan loan, @NotNull LocalDate transactionDate, AccrualPeriodData accrualPeriod, private LoanTransaction addAccrualTransaction(@NonNull Loan loan, @NonNull LocalDate transactionDate, AccrualPeriodData accrualPeriod,
Money interestPortion, Money feePortion, Money penaltyPortion, boolean adjustment) { Money interestPortion, Money feePortion, Money penaltyPortion, boolean adjustment) {
interestPortion = MathUtil.negativeToZero(interestPortion); interestPortion = MathUtil.negativeToZero(interestPortion);
BigDecimal interest = MathUtil.toBigDecimal(interestPortion); BigDecimal interest = MathUtil.toBigDecimal(interestPortion);
@@ -673,7 +672,7 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
return savedTransaction; return savedTransaction;
} }
private void mergeAccrualTransaction(@NotNull final LoanTransaction transaction, final AccrualPeriodData accrualPeriod, private void mergeAccrualTransaction(@NonNull final LoanTransaction transaction, final AccrualPeriodData accrualPeriod,
Money interestPortion, Money feePortion, Money penaltyPortion, final boolean adjustment) { Money interestPortion, Money feePortion, Money penaltyPortion, final boolean adjustment) {
interestPortion = MathUtil.negativeToZero(interestPortion); interestPortion = MathUtil.negativeToZero(interestPortion);
feePortion = MathUtil.negativeToZero(feePortion); feePortion = MathUtil.negativeToZero(feePortion);
@@ -687,7 +686,7 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
addTransactionMappings(transaction, accrualPeriod, adjustment); addTransactionMappings(transaction, accrualPeriod, adjustment);
} }
private void addTransactionMappings(@NotNull final LoanTransaction transaction, final AccrualPeriodData accrualPeriod, private void addTransactionMappings(@NonNull final LoanTransaction transaction, final AccrualPeriodData accrualPeriod,
final boolean adjustment) { final boolean adjustment) {
if (accrualPeriod == null) { if (accrualPeriod == null) {
return; return;
@@ -700,7 +699,7 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
addPaidByMappings(transaction, installment, accrualPeriod, adjustment); addPaidByMappings(transaction, installment, accrualPeriod, adjustment);
} }
private void addPaidByMappings(@NotNull final LoanTransaction transaction, final LoanRepaymentScheduleInstallment installment, private void addPaidByMappings(@NonNull final LoanTransaction transaction, final LoanRepaymentScheduleInstallment installment,
final AccrualPeriodData accrualPeriod, final boolean adjustment) { final AccrualPeriodData accrualPeriod, final boolean adjustment) {
final Loan loan = installment.getLoan(); final Loan loan = installment.getLoan();
final MonetaryCurrency currency = loan.getCurrency(); final MonetaryCurrency currency = loan.getCurrency();
@@ -725,7 +724,7 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
} }
} }
private boolean isFullPeriod(@NotNull final LocalDate tillDate, @NotNull final LoanRepaymentScheduleInstallment installment) { private boolean isFullPeriod(@NonNull final LocalDate tillDate, @NonNull final LoanRepaymentScheduleInstallment installment) {
return isAfterPeriod(tillDate, installment) || DateUtils.isEqual(tillDate, installment.getDueDate()); return isAfterPeriod(tillDate, installment) || DateUtils.isEqual(tillDate, installment.getDueDate());
} }
@@ -1280,7 +1279,7 @@ public class LoanAccrualsProcessingServiceImpl implements LoanAccrualsProcessing
}; };
} }
public boolean isProgressiveAccrual(@NotNull Loan loan) { public boolean isProgressiveAccrual(@NonNull Loan loan) {
return loan.isProgressiveSchedule(); return loan.isProgressiveSchedule();
} }
} }
@@ -42,7 +42,6 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRelationT
import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRepository; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRepository;
import org.apache.fineract.portfolio.loanaccount.repository.LoanCapitalizedIncomeBalanceRepository; import org.apache.fineract.portfolio.loanaccount.repository.LoanCapitalizedIncomeBalanceRepository;
import org.apache.fineract.portfolio.loanaccount.util.CapitalizedIncomeAmortizationUtil; import org.apache.fineract.portfolio.loanaccount.util.CapitalizedIncomeAmortizationUtil;
import org.jetbrains.annotations.NotNull;
import org.springframework.lang.NonNull; import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -60,7 +59,7 @@ public class LoanCapitalizedIncomeAmortizationProcessingServiceImpl implements L
@Override @Override
@Transactional @Transactional
public void processCapitalizedIncomeAmortizationOnLoanClosure(@NotNull final Loan loan, final boolean addJournal) { public void processCapitalizedIncomeAmortizationOnLoanClosure(@NonNull final Loan loan, final boolean addJournal) {
final LocalDate transactionDate = getFinalCapitalizedIncomeAmortizationTransactionDate(loan); final LocalDate transactionDate = getFinalCapitalizedIncomeAmortizationTransactionDate(loan);
final Optional<LoanTransaction> amortizationTransaction = createCapitalizedIncomeAmortizationTransaction(loan, transactionDate, final Optional<LoanTransaction> amortizationTransaction = createCapitalizedIncomeAmortizationTransaction(loan, transactionDate,
false, null); false, null);
@@ -80,7 +79,7 @@ public class LoanCapitalizedIncomeAmortizationProcessingServiceImpl implements L
@Override @Override
@Transactional @Transactional
public void processCapitalizedIncomeAmortizationOnLoanChargeOff(@NotNull final Loan loan, public void processCapitalizedIncomeAmortizationOnLoanChargeOff(@NonNull final Loan loan,
@NonNull final LoanTransaction chargeOffTransaction) { @NonNull final LoanTransaction chargeOffTransaction) {
LocalDate transactionDate = loan.getChargedOffOnDate(); LocalDate transactionDate = loan.getChargedOffOnDate();
if (transactionDate == null) { if (transactionDate == null) {
@@ -148,7 +147,7 @@ public class LoanCapitalizedIncomeAmortizationProcessingServiceImpl implements L
@Override @Override
@Transactional @Transactional
public void processCapitalizedIncomeAmortizationOnLoanUndoChargeOff(@NotNull final LoanTransaction loanTransaction) { public void processCapitalizedIncomeAmortizationOnLoanUndoChargeOff(@NonNull final LoanTransaction loanTransaction) {
final Loan loan = loanTransaction.getLoan(); final Loan loan = loanTransaction.getLoan();
loan.getLoanTransactions().stream().filter(LoanTransaction::isCapitalizedIncomeAmortization) loan.getLoanTransactions().stream().filter(LoanTransaction::isCapitalizedIncomeAmortization)
@@ -25,7 +25,6 @@ import com.google.gson.JsonArray;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive; import com.google.gson.JsonPrimitive;
import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Collection; import java.util.Collection;
@@ -56,6 +55,7 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionRepositor
import org.apache.fineract.portfolio.loanaccount.serialization.LoanChargeValidator; import org.apache.fineract.portfolio.loanaccount.serialization.LoanChargeValidator;
import org.apache.fineract.portfolio.loanaccount.serialization.LoanDisbursementValidator; import org.apache.fineract.portfolio.loanaccount.serialization.LoanDisbursementValidator;
import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail; import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail;
import org.springframework.lang.NonNull;
@RequiredArgsConstructor @RequiredArgsConstructor
public class LoanDisbursementService { public class LoanDisbursementService {
@@ -117,8 +117,8 @@ public class LoanDisbursementService {
} }
} }
public Money adjustDisburseAmount(final Loan loan, @NotNull final JsonCommand command, public Money adjustDisburseAmount(final Loan loan, @NonNull final JsonCommand command,
@NotNull final LocalDate actualDisbursementDate) { @NonNull final LocalDate actualDisbursementDate) {
Money disburseAmount = loan.getLoanRepaymentScheduleDetail().getPrincipal().zero(); Money disburseAmount = loan.getLoanRepaymentScheduleDetail().getPrincipal().zero();
final BigDecimal principalDisbursed = command.bigDecimalValueOfParameterNamed(LoanApiConstants.principalDisbursedParameterName); final BigDecimal principalDisbursed = command.bigDecimalValueOfParameterNamed(LoanApiConstants.principalDisbursedParameterName);
if (loan.getActualDisbursementDate() == null || DateUtils.isBefore(actualDisbursementDate, loan.getActualDisbursementDate())) { if (loan.getActualDisbursementDate() == null || DateUtils.isBefore(actualDisbursementDate, loan.getActualDisbursementDate())) {
@@ -18,7 +18,6 @@
*/ */
package org.apache.fineract.portfolio.loanaccount.service; package org.apache.fineract.portfolio.loanaccount.service;
import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Map; import java.util.Map;
@@ -36,6 +35,7 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction;
import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionType; import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionType;
import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail; import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail;
import org.apache.fineract.portfolio.paymentdetail.service.PaymentDetailWritePlatformService; import org.apache.fineract.portfolio.paymentdetail.service.PaymentDetailWritePlatformService;
import org.springframework.lang.NonNull;
@RequiredArgsConstructor @RequiredArgsConstructor
public class LoanTransactionAssembler { public class LoanTransactionAssembler {
@@ -69,8 +69,8 @@ public class LoanTransactionAssembler {
txnExternalId, null); txnExternalId, null);
} }
public LoanTransaction assembleAccrualActivityTransaction(@NotNull Loan loan, @NotNull LoanRepaymentScheduleInstallment installment, public LoanTransaction assembleAccrualActivityTransaction(@NonNull Loan loan, @NonNull LoanRepaymentScheduleInstallment installment,
@NotNull LocalDate transactionDate) { @NonNull LocalDate transactionDate) {
ExternalId externalId = externalIdFactory.create(); ExternalId externalId = externalIdFactory.create();
BigDecimal interestPortion = installment.getInterestCharged(); BigDecimal interestPortion = installment.getInterestCharged();
@@ -18,7 +18,6 @@
*/ */
package org.apache.fineract.portfolio.savings.service; package org.apache.fineract.portfolio.savings.service;
import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.MathContext; import java.math.MathContext;
import java.time.LocalDate; import java.time.LocalDate;
@@ -48,6 +47,7 @@ import org.apache.fineract.portfolio.savings.domain.SavingsHelper;
import org.apache.fineract.portfolio.savings.domain.interest.PostingPeriod; import org.apache.fineract.portfolio.savings.domain.interest.PostingPeriod;
import org.apache.fineract.portfolio.tax.data.TaxComponentData; import org.apache.fineract.portfolio.tax.data.TaxComponentData;
import org.apache.fineract.portfolio.tax.service.TaxUtils; import org.apache.fineract.portfolio.tax.service.TaxUtils;
import org.springframework.lang.NonNull;
@RequiredArgsConstructor @RequiredArgsConstructor
public class SavingsAccountInterestPostingServiceImpl implements SavingsAccountInterestPostingService { public class SavingsAccountInterestPostingServiceImpl implements SavingsAccountInterestPostingService {
@@ -346,7 +346,7 @@ public class SavingsAccountInterestPostingServiceImpl implements SavingsAccountI
return savingsAccountData.getSavingsAccountTransactionData(); return savingsAccountData.getSavingsAccountTransactionData();
} }
private SavingsAccountTransactionData retrieveLastTransaction(@NotNull SavingsAccountData savingsAccountData) { private SavingsAccountTransactionData retrieveLastTransaction(@NonNull SavingsAccountData savingsAccountData) {
List<SavingsAccountTransactionData> transactions = savingsAccountData.getSavingsAccountTransactionData(); List<SavingsAccountTransactionData> transactions = savingsAccountData.getSavingsAccountTransactionData();
if (transactions == null || transactions.isEmpty()) { if (transactions == null || transactions.isEmpty()) {
return savingsAccountData.getLastSavingsAccountTransaction(); // what is this? return savingsAccountData.getLastSavingsAccountTransaction(); // what is this?
@@ -22,7 +22,6 @@ import static org.apache.fineract.infrastructure.core.domain.AuditableFieldsCons
import static org.apache.fineract.portfolio.savings.SavingsApiConstants.SAVINGS_ACCOUNT_RESOURCE_NAME; import static org.apache.fineract.portfolio.savings.SavingsApiConstants.SAVINGS_ACCOUNT_RESOURCE_NAME;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import jakarta.validation.constraints.NotNull;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@@ -50,13 +49,14 @@ import org.apache.fineract.portfolio.search.data.ColumnFilterData;
import org.apache.fineract.portfolio.search.data.TableQueryData; import org.apache.fineract.portfolio.search.data.TableQueryData;
import org.apache.fineract.portfolio.search.data.TransactionSearchRequest; import org.apache.fineract.portfolio.search.data.TransactionSearchRequest;
import org.apache.fineract.portfolio.search.service.SearchUtil; import org.apache.fineract.portfolio.search.service.SearchUtil;
import org.jetbrains.annotations.Nullable;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
import org.springframework.data.support.PageableExecutionUtils; import org.springframework.data.support.PageableExecutionUtils;
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.lang.NonNull;
import org.springframework.lang.Nullable;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@Transactional(readOnly = true) @Transactional(readOnly = true)
@@ -72,8 +72,8 @@ public class SavingsAccountTransactionsSearchServiceImpl implements SavingsAccou
private final SearchUtil searchUtil; private final SearchUtil searchUtil;
@Override @Override
public Page<SavingsAccountTransactionData> searchTransactions(@NotNull Long savingsId, public Page<SavingsAccountTransactionData> searchTransactions(@NonNull Long savingsId,
@NotNull TransactionSearchRequest searchParameters) { @NonNull TransactionSearchRequest searchParameters) {
context.authenticatedUser().validateHasReadPermission(SAVINGS_ACCOUNT_RESOURCE_NAME); context.authenticatedUser().validateHasReadPermission(SAVINGS_ACCOUNT_RESOURCE_NAME);
String apptable = EntityTables.SAVINGS_TRANSACTION.getApptableName(); String apptable = EntityTables.SAVINGS_TRANSACTION.getApptableName();
@@ -130,8 +130,8 @@ public class SavingsAccountTransactionsSearchServiceImpl implements SavingsAccou
return PageableExecutionUtils.getPage(results, pageable, () -> totalElements); return PageableExecutionUtils.getPage(results, pageable, () -> totalElements);
} }
private static void addFromToFilter(@NotNull String column, String fromValue, String toValue, private static void addFromToFilter(@NonNull String column, String fromValue, String toValue,
@NotNull List<ColumnFilterData> columnFilters) { @NonNull List<ColumnFilterData> columnFilters) {
if (fromValue != null) { if (fromValue != null) {
columnFilters.add(toValue == null ? ColumnFilterData.create(column, SqlOperator.GTE, fromValue) columnFilters.add(toValue == null ? ColumnFilterData.create(column, SqlOperator.GTE, fromValue)
: ColumnFilterData.btw(column, fromValue, toValue)); : ColumnFilterData.btw(column, fromValue, toValue));
@@ -141,7 +141,7 @@ public class SavingsAccountTransactionsSearchServiceImpl implements SavingsAccou
} }
@Nullable @Nullable
private static Boolean addTransactionTypesFilter(@NotNull TransactionSearchRequest searchParameters, private static Boolean addTransactionTypesFilter(@NonNull TransactionSearchRequest searchParameters,
List<ColumnFilterData> columnFilters) { List<ColumnFilterData> columnFilters) {
Predicate<SavingsAccountTransactionType> filter = null; Predicate<SavingsAccountTransactionType> filter = null;
Boolean credit = searchParameters.getCredit(); Boolean credit = searchParameters.getCredit();
@@ -178,7 +178,7 @@ public class SavingsAccountTransactionsSearchServiceImpl implements SavingsAccou
} }
@Override @Override
public Page<JsonObject> queryAdvanced(@NotNull Long savingsId, @NotNull PagedLocalRequest<AdvancedQueryRequest> pagedRequest) { public Page<JsonObject> queryAdvanced(@NonNull Long savingsId, @NonNull PagedLocalRequest<AdvancedQueryRequest> pagedRequest) {
context.authenticatedUser().validateHasReadPermission(SAVINGS_ACCOUNT_RESOURCE_NAME); context.authenticatedUser().validateHasReadPermission(SAVINGS_ACCOUNT_RESOURCE_NAME);
String apptable = EntityTables.SAVINGS_TRANSACTION.getApptableName(); String apptable = EntityTables.SAVINGS_TRANSACTION.getApptableName();
@@ -57,7 +57,6 @@ import org.apache.fineract.infrastructure.core.exception.IdempotentCommandProces
import org.apache.fineract.infrastructure.core.serialization.ToApiJsonSerializer; import org.apache.fineract.infrastructure.core.serialization.ToApiJsonSerializer;
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
import org.apache.fineract.useradministration.domain.AppUser; import org.apache.fineract.useradministration.domain.AppUser;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@@ -67,6 +66,7 @@ import org.mockito.Mockito;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.mockito.Spy; import org.mockito.Spy;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.lang.NonNull;
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes;
@@ -454,7 +454,7 @@ public class SynchronousCommandProcessingServiceTest {
verify(commandSourceService).generateErrorInfo(runtimeException); verify(commandSourceService).generateErrorInfo(runtimeException);
} }
@NotNull @NonNull
private static CommandWrapper getCommandWrapper() { private static CommandWrapper getCommandWrapper() {
CommandWrapper commandWrapper = Mockito.mock(CommandWrapper.class); CommandWrapper commandWrapper = Mockito.mock(CommandWrapper.class);
when(commandWrapper.isDatatableResource()).thenReturn(false); when(commandWrapper.isDatatableResource()).thenReturn(false);
@@ -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.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; import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;
class DelinquencyActionParseAndValidatorTest { class DelinquencyActionParseAndValidatorTest {
@@ -19,16 +19,16 @@
package org.apache.fineract.portfolio.savings.service.search; package org.apache.fineract.portfolio.savings.service.search;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import jakarta.validation.constraints.NotNull;
import org.apache.fineract.infrastructure.core.service.PagedLocalRequest; import org.apache.fineract.infrastructure.core.service.PagedLocalRequest;
import org.apache.fineract.portfolio.savings.data.SavingsAccountTransactionData; import org.apache.fineract.portfolio.savings.data.SavingsAccountTransactionData;
import org.apache.fineract.portfolio.search.data.AdvancedQueryRequest; import org.apache.fineract.portfolio.search.data.AdvancedQueryRequest;
import org.apache.fineract.portfolio.search.data.TransactionSearchRequest; import org.apache.fineract.portfolio.search.data.TransactionSearchRequest;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.lang.NonNull;
public interface SavingsAccountTransactionSearchService { public interface SavingsAccountTransactionSearchService {
Page<SavingsAccountTransactionData> searchTransactions(@NotNull Long savingsId, @NotNull TransactionSearchRequest searchParameters); Page<SavingsAccountTransactionData> searchTransactions(@NonNull Long savingsId, @NonNull TransactionSearchRequest searchParameters);
Page<JsonObject> queryAdvanced(@NotNull Long savingsId, @NotNull PagedLocalRequest<AdvancedQueryRequest> pagedRequest); Page<JsonObject> queryAdvanced(@NonNull Long savingsId, @NonNull PagedLocalRequest<AdvancedQueryRequest> pagedRequest);
} }
@@ -39,9 +39,9 @@ import org.apache.fineract.integrationtests.common.Utils;
import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleProcessingType; import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleProcessingType;
import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleType; import org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanScheduleType;
import org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationType; import org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationType;
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.springframework.lang.Nullable;
@Slf4j @Slf4j
public class LoanChargebackWithCreditAllocationsIntegrationTests extends BaseLoanIntegrationTest { public class LoanChargebackWithCreditAllocationsIntegrationTests extends BaseLoanIntegrationTest {
@@ -36,9 +36,9 @@ import org.apache.fineract.integrationtests.common.Utils;
import org.apache.fineract.integrationtests.common.accounting.Account; import org.apache.fineract.integrationtests.common.accounting.Account;
import org.apache.fineract.integrationtests.common.products.DelinquencyBucketsHelper; import org.apache.fineract.integrationtests.common.products.DelinquencyBucketsHelper;
import org.apache.fineract.integrationtests.common.system.CodeHelper; import org.apache.fineract.integrationtests.common.system.CodeHelper;
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.springframework.lang.NonNull;
public class LoanProductChargeOffReasonMappingsTest extends BaseLoanIntegrationTest { public class LoanProductChargeOffReasonMappingsTest extends BaseLoanIntegrationTest {
@@ -225,7 +225,7 @@ public class LoanProductChargeOffReasonMappingsTest extends BaseLoanIntegrationT
.allowPartialPeriodInterestCalcualtion(false);// .allowPartialPeriodInterestCalcualtion(false);//
} }
@NotNull @NonNull
private static List<PostChargeOffReasonToExpenseAccountMappings> createPostChargeOffReasonToExpenseAccountMappings( private static List<PostChargeOffReasonToExpenseAccountMappings> createPostChargeOffReasonToExpenseAccountMappings(
Long chargeOffReasonId, Long glAccountId) { Long chargeOffReasonId, Long glAccountId) {
List<PostChargeOffReasonToExpenseAccountMappings> chargeOffReasonToExpenseAccountMappings = new ArrayList<>(); List<PostChargeOffReasonToExpenseAccountMappings> chargeOffReasonToExpenseAccountMappings = new ArrayList<>();
@@ -59,10 +59,10 @@ import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuil
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder; import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
import org.apache.fineract.integrationtests.common.loans.LoanStatusChecker; import org.apache.fineract.integrationtests.common.loans.LoanStatusChecker;
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper; import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.lang.NonNull;
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
@Slf4j @Slf4j
@@ -214,7 +214,7 @@ public class CobPartitioningTest extends BaseLoanIntegrationTest {
globalConfigurationHelper.manageConfigurations(GlobalConfigurationConstants.ENABLE_AUTO_GENERATED_EXTERNAL_ID, false); globalConfigurationHelper.manageConfigurations(GlobalConfigurationConstants.ENABLE_AUTO_GENERATED_EXTERNAL_ID, false);
} }
@NotNull @NonNull
private Integer createClient() { private Integer createClient() {
final Integer clientID = ClientHelper.createClient(REQUEST_SPEC, RESPONSE_SPEC); final Integer clientID = ClientHelper.createClient(REQUEST_SPEC, RESPONSE_SPEC);
Assertions.assertNotNull(clientID); Assertions.assertNotNull(clientID);
@@ -231,7 +231,7 @@ public class CobPartitioningTest extends BaseLoanIntegrationTest {
return loanProductID; return loanProductID;
} }
@NotNull @NonNull
private Integer createLoanForClient(Integer clientID, Integer loanProductID) { private Integer createLoanForClient(Integer clientID, Integer loanProductID) {
HashMap loanStatusHashMap; HashMap loanStatusHashMap;
@@ -25,7 +25,7 @@ import org.apache.fineract.client.models.IsCatchUpRunningDTO;
import org.apache.fineract.client.models.OldestCOBProcessedLoanDTO; import org.apache.fineract.client.models.OldestCOBProcessedLoanDTO;
import org.apache.fineract.client.util.Calls; import org.apache.fineract.client.util.Calls;
import org.apache.fineract.integrationtests.common.FineractClientHelper; import org.apache.fineract.integrationtests.common.FineractClientHelper;
import org.jetbrains.annotations.NotNull; import org.springframework.lang.NonNull;
import retrofit2.Response; import retrofit2.Response;
@Slf4j @Slf4j
@@ -38,7 +38,7 @@ public class LoanCOBCatchUpHelper {
return Boolean.TRUE.equals(Objects.requireNonNull(response.body()).getCatchUpRunning()); return Boolean.TRUE.equals(Objects.requireNonNull(response.body()).getCatchUpRunning());
} }
public boolean isLoanCOBCatchUpFinishedFor(@NotNull LocalDate cobBusinessDate) { public boolean isLoanCOBCatchUpFinishedFor(@NonNull LocalDate cobBusinessDate) {
Response<IsCatchUpRunningDTO> response = executeGetLoanCatchUpStatus(); Response<IsCatchUpRunningDTO> response = executeGetLoanCatchUpStatus();
IsCatchUpRunningDTO isCatchUpRunningResponse = Objects.requireNonNull(response.body()); IsCatchUpRunningDTO isCatchUpRunningResponse = Objects.requireNonNull(response.body());
OldestCOBProcessedLoanDTO getOldestCOBProcessedLoanResponse = executeRetrieveOldestCOBProcessedLoan(); OldestCOBProcessedLoanDTO getOldestCOBProcessedLoanResponse = executeRetrieveOldestCOBProcessedLoan();
@@ -78,11 +78,11 @@ import org.apache.fineract.integrationtests.common.savings.SavingsAccountHelper;
import org.apache.fineract.integrationtests.common.savings.SavingsProductHelper; import org.apache.fineract.integrationtests.common.savings.SavingsProductHelper;
import org.apache.fineract.integrationtests.common.savings.SavingsStatusChecker; import org.apache.fineract.integrationtests.common.savings.SavingsStatusChecker;
import org.apache.fineract.integrationtests.common.system.DatatableHelper; import org.apache.fineract.integrationtests.common.system.DatatableHelper;
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.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.lang.NonNull;
public class DatatableAdvancedQueryTest { public class DatatableAdvancedQueryTest {
@@ -344,7 +344,7 @@ public class DatatableAdvancedQueryTest {
return datatable; return datatable;
} }
@NotNull @NonNull
private HashMap<String, Object> createDatatableEntry(String datatable, Integer apptableId, LocalDate dateValue, Boolean boolValue, private HashMap<String, Object> createDatatableEntry(String datatable, Integer apptableId, LocalDate dateValue, Boolean boolValue,
Integer intValue, BigDecimal decValue) { Integer intValue, BigDecimal decValue) {
final HashMap<String, Object> request = new HashMap<>(); final HashMap<String, Object> request = new HashMap<>();
@@ -70,10 +70,10 @@ import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuil
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder; import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
import org.apache.fineract.integrationtests.common.loans.LoanStatusChecker; import org.apache.fineract.integrationtests.common.loans.LoanStatusChecker;
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper; import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.lang.NonNull;
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
public class ExternalAssetOwnerTransferCancelTest extends BaseLoanIntegrationTest { public class ExternalAssetOwnerTransferCancelTest extends BaseLoanIntegrationTest {
@@ -288,14 +288,14 @@ public class ExternalAssetOwnerTransferCancelTest extends BaseLoanIntegrationTes
new PutGlobalConfigurationsRequest().enabled(false)); new PutGlobalConfigurationsRequest().enabled(false));
} }
@NotNull @NonNull
private Integer createClient() { private Integer createClient() {
final Integer clientID = ClientHelper.createClient(REQUEST_SPEC, RESPONSE_SPEC); final Integer clientID = ClientHelper.createClient(REQUEST_SPEC, RESPONSE_SPEC);
Assertions.assertNotNull(clientID); Assertions.assertNotNull(clientID);
return clientID; return clientID;
} }
@NotNull @NonNull
private Integer createLoanForClient(Integer clientID) { private Integer createLoanForClient(Integer clientID) {
Integer overdueFeeChargeId = ChargesHelper.createCharges(REQUEST_SPEC, RESPONSE_SPEC, Integer overdueFeeChargeId = ChargesHelper.createCharges(REQUEST_SPEC, RESPONSE_SPEC,
ChargesHelper.getLoanOverdueFeeJSONWithCalculationTypePercentage("1")); ChargesHelper.getLoanOverdueFeeJSONWithCalculationTypePercentage("1"));
@@ -66,9 +66,9 @@ import org.apache.fineract.integrationtests.common.loans.LoanApplicationTestBuil
import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder; import org.apache.fineract.integrationtests.common.loans.LoanProductTestBuilder;
import org.apache.fineract.integrationtests.common.loans.LoanStatusChecker; import org.apache.fineract.integrationtests.common.loans.LoanStatusChecker;
import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper; import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeAll;
import org.springframework.lang.NonNull;
@Slf4j @Slf4j
public class ExternalAssetOwnerTransferTest extends BaseLoanIntegrationTest { public class ExternalAssetOwnerTransferTest extends BaseLoanIntegrationTest {
@@ -177,14 +177,14 @@ public class ExternalAssetOwnerTransferTest extends BaseLoanIntegrationTest {
globalConfigurationHelper.manageConfigurations(GlobalConfigurationConstants.ENABLE_AUTO_GENERATED_EXTERNAL_ID, false); globalConfigurationHelper.manageConfigurations(GlobalConfigurationConstants.ENABLE_AUTO_GENERATED_EXTERNAL_ID, false);
} }
@NotNull @NonNull
protected Integer createClient() { protected Integer createClient() {
final Integer clientID = ClientHelper.createClient(REQUEST_SPEC, RESPONSE_SPEC); final Integer clientID = ClientHelper.createClient(REQUEST_SPEC, RESPONSE_SPEC);
Assertions.assertNotNull(clientID); Assertions.assertNotNull(clientID);
return clientID; return clientID;
} }
@NotNull @NonNull
protected Integer createLoanForClient(Integer clientID, String transactionDate) { protected Integer createLoanForClient(Integer clientID, String transactionDate) {
Integer overdueFeeChargeId = ChargesHelper.createCharges(REQUEST_SPEC, RESPONSE_SPEC, Integer overdueFeeChargeId = ChargesHelper.createCharges(REQUEST_SPEC, RESPONSE_SPEC,
ChargesHelper.getLoanOverdueFeeJSONWithCalculationTypePercentage("1")); ChargesHelper.getLoanOverdueFeeJSONWithCalculationTypePercentage("1"));
@@ -100,11 +100,11 @@ import org.apache.fineract.integrationtests.common.loans.LoanTransactionHelper;
import org.apache.fineract.integrationtests.common.report.ReportHelper; import org.apache.fineract.integrationtests.common.report.ReportHelper;
import org.apache.fineract.portfolio.loanaccount.domain.LoanStatus; import org.apache.fineract.portfolio.loanaccount.domain.LoanStatus;
import org.hamcrest.Matchers; import org.hamcrest.Matchers;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeAll;
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;
import org.springframework.lang.NonNull;
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
@ExtendWith({ ExternalEventsExtension.class }) @ExtendWith({ ExternalEventsExtension.class })
@@ -1312,14 +1312,14 @@ public class InitiateExternalAssetOwnerTransferTest extends BaseLoanIntegrationT
globalConfigurationHelper.manageConfigurations(GlobalConfigurationConstants.ENABLE_AUTO_GENERATED_EXTERNAL_ID, false); globalConfigurationHelper.manageConfigurations(GlobalConfigurationConstants.ENABLE_AUTO_GENERATED_EXTERNAL_ID, false);
} }
@NotNull @NonNull
private Integer createClient() { private Integer createClient() {
final Integer clientID = ClientHelper.createClient(REQUEST_SPEC, RESPONSE_SPEC); final Integer clientID = ClientHelper.createClient(REQUEST_SPEC, RESPONSE_SPEC);
Assertions.assertNotNull(clientID); Assertions.assertNotNull(clientID);
return clientID; return clientID;
} }
@NotNull @NonNull
private Integer createLoanForClient(Integer clientID) { private Integer createLoanForClient(Integer clientID) {
Integer overdueFeeChargeId = ChargesHelper.createCharges(REQUEST_SPEC, RESPONSE_SPEC, Integer overdueFeeChargeId = ChargesHelper.createCharges(REQUEST_SPEC, RESPONSE_SPEC,
ChargesHelper.getLoanOverdueFeeJSONWithCalculationTypePercentage("1")); ChargesHelper.getLoanOverdueFeeJSONWithCalculationTypePercentage("1"));