Skip to content

Commit a7d0f0e

Browse files
authored
Merge pull request #5776
FINERACT-2455: Extend Datatable support to WC loan entity
2 parents 10c8562 + 278b993 commit a7d0f0e

9 files changed

Lines changed: 874 additions & 149 deletions

File tree

fineract-core/src/main/java/org/apache/fineract/infrastructure/core/serialization/DatatableCommandFromApiJsonDeserializer.java

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
import java.util.ArrayList;
6666
import java.util.List;
6767
import java.util.Map;
68+
import java.util.Optional;
6869
import java.util.Set;
6970
import org.apache.commons.lang3.StringUtils;
7071
import org.apache.fineract.infrastructure.core.data.ApiParameterError;
@@ -132,10 +133,11 @@ public void validateForCreate(final String json) {
132133
baseDataValidator.reset().parameter(API_PARAM_APPTABLE_NAME).value(apptableName).notBlank().notExceedingLengthOf(50)
133134
.isOneOfTheseStringValues(EntityTables.getEntityNames());
134135

135-
EntityTables entityTable = EntityTables.fromEntityName(apptableName);
136-
validateEntitySubType(baseDataValidator, element, entityTable);
136+
final Optional<EntityTables> entityTable = Optional.ofNullable(EntityTables.fromEntityName(apptableName));
137+
entityTable.ifPresent(et -> validateEntitySubType(baseDataValidator, element, et));
137138

138-
final String fkColumnName = entityTable == null ? null : entityTable.getForeignKeyColumnNameOnDatatable();
139+
final Object[] reservedColumnNames = entityTable.map(et -> new Object[] { TABLE_FIELD_ID, et.getForeignKeyColumnNameOnDatatable() })
140+
.orElseGet(() -> new Object[] { TABLE_FIELD_ID });
139141

140142
final Boolean multiRow = this.fromApiJsonHelper.extractBooleanNamed(API_PARAM_MULTIROW, element);
141143
baseDataValidator.reset().parameter(API_PARAM_MULTIROW).value(multiRow).ignoreIfNull().notBlank().isOneOfTheseValues(true, false);
@@ -148,8 +150,8 @@ public void validateForCreate(final String json) {
148150
this.fromApiJsonHelper.checkForUnsupportedParameters(column.getAsJsonObject(), SUPPORTED_PARAMETERS_FOR_CREATE_COLUMNS);
149151

150152
final String name = this.fromApiJsonHelper.extractStringNamed(API_FIELD_NAME, column);
151-
baseDataValidator.reset().parameter(API_FIELD_NAME).value(name).notBlank()
152-
.isNotOneOfTheseValues(TABLE_FIELD_ID, fkColumnName).matchesRegularExpression(DATATABLE_COLUMN_NAME_REGEX_PATTERN);
153+
baseDataValidator.reset().parameter(API_FIELD_NAME).value(name).notBlank().isNotOneOfTheseValues(reservedColumnNames)
154+
.matchesRegularExpression(DATATABLE_COLUMN_NAME_REGEX_PATTERN);
153155

154156
validateType(baseDataValidator, column);
155157

@@ -194,10 +196,11 @@ public void validateForUpdate(final String json) {
194196
baseDataValidator.reset().parameter(API_PARAM_APPTABLE_NAME).value(apptableName).ignoreIfNull().notBlank()
195197
.isOneOfTheseStringValues(EntityTables.getEntityNames());
196198

197-
EntityTables entityTable = EntityTables.fromEntityName(apptableName);
198-
validateEntitySubType(baseDataValidator, element, entityTable);
199+
final Optional<EntityTables> entityTable = Optional.ofNullable(EntityTables.fromEntityName(apptableName));
200+
entityTable.ifPresent(et -> validateEntitySubType(baseDataValidator, element, et));
199201

200-
final String fkColumnName = entityTable.getForeignKeyColumnNameOnDatatable();
202+
final Object[] reservedColumnNames = entityTable.map(et -> new Object[] { TABLE_FIELD_ID, et.getForeignKeyColumnNameOnDatatable() })
203+
.orElseGet(() -> new Object[] { TABLE_FIELD_ID });
201204

202205
final JsonArray changeColumns = this.fromApiJsonHelper.extractJsonArrayNamed(API_PARAM_CHANGECOLUMNS, element);
203206
baseDataValidator.reset().parameter(API_PARAM_CHANGECOLUMNS).value(changeColumns).ignoreIfNull().jsonArrayNotEmpty();
@@ -207,12 +210,12 @@ public void validateForUpdate(final String json) {
207210
this.fromApiJsonHelper.checkForUnsupportedParameters(column.getAsJsonObject(), SUPPORTED_PARAMETERS_FOR_CHANGE_COLUMNS);
208211

209212
final String name = this.fromApiJsonHelper.extractStringNamed(API_FIELD_NAME, column);
210-
baseDataValidator.reset().parameter(API_FIELD_NAME).value(name).notBlank()
211-
.isNotOneOfTheseValues(TABLE_FIELD_ID, fkColumnName).matchesRegularExpression(DATATABLE_COLUMN_NAME_REGEX_PATTERN);
213+
baseDataValidator.reset().parameter(API_FIELD_NAME).value(name).notBlank().isNotOneOfTheseValues(reservedColumnNames)
214+
.matchesRegularExpression(DATATABLE_COLUMN_NAME_REGEX_PATTERN);
212215

213216
final String newName = this.fromApiJsonHelper.extractStringNamed(API_FIELD_NEWNAME, column);
214217
baseDataValidator.reset().parameter(API_FIELD_NEWNAME).value(newName).ignoreIfNull().notBlank().notExceedingLengthOf(50)
215-
.isNotOneOfTheseValues(TABLE_FIELD_ID, fkColumnName).matchesRegularExpression(DATATABLE_COLUMN_NAME_REGEX_PATTERN);
218+
.isNotOneOfTheseValues(reservedColumnNames).matchesRegularExpression(DATATABLE_COLUMN_NAME_REGEX_PATTERN);
216219

217220
if (this.fromApiJsonHelper.parameterExists(API_FIELD_LENGTH, column)) {
218221
final String lengthStr = this.fromApiJsonHelper.extractStringNamed(API_FIELD_LENGTH, column);
@@ -262,8 +265,8 @@ public void validateForUpdate(final String json) {
262265
this.fromApiJsonHelper.checkForUnsupportedParameters(column.getAsJsonObject(), SUPPORTED_PARAMETERS_FOR_ADD_COLUMNS);
263266

264267
final String name = this.fromApiJsonHelper.extractStringNamed(API_FIELD_NAME, column);
265-
baseDataValidator.reset().parameter(API_FIELD_NAME).value(name).notBlank()
266-
.isNotOneOfTheseValues(TABLE_FIELD_ID, fkColumnName).matchesRegularExpression(DATATABLE_COLUMN_NAME_REGEX_PATTERN);
268+
baseDataValidator.reset().parameter(API_FIELD_NAME).value(name).notBlank().isNotOneOfTheseValues(reservedColumnNames)
269+
.matchesRegularExpression(DATATABLE_COLUMN_NAME_REGEX_PATTERN);
267270

268271
validateType(baseDataValidator, column);
269272

@@ -292,8 +295,8 @@ public void validateForUpdate(final String json) {
292295
this.fromApiJsonHelper.checkForUnsupportedParameters(column.getAsJsonObject(), SUPPORTED_PARAMETERS_FOR_DROP_COLUMNS);
293296

294297
final String name = this.fromApiJsonHelper.extractStringNamed(API_FIELD_NAME, column);
295-
baseDataValidator.reset().parameter(API_FIELD_NAME).value(name).notBlank()
296-
.isNotOneOfTheseValues(TABLE_FIELD_ID, fkColumnName).matchesRegularExpression(DATATABLE_COLUMN_NAME_REGEX_PATTERN);
298+
baseDataValidator.reset().parameter(API_FIELD_NAME).value(name).notBlank().isNotOneOfTheseValues(reservedColumnNames)
299+
.matchesRegularExpression(DATATABLE_COLUMN_NAME_REGEX_PATTERN);
297300
}
298301
}
299302

fineract-core/src/main/java/org/apache/fineract/infrastructure/dataqueries/data/EntityTables.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ public enum EntityTables {
4747
SAVINGS("m_savings_account", "savings_account_id", "id", CREATE, APPROVE, ACTIVATE, WITHDRAWN, REJECTED, CLOSE), //
4848
SAVINGS_TRANSACTION("m_savings_account_transaction", "savings_transaction_id", "id"), //
4949
SHARE_PRODUCT("m_share_product", "share_product_id", "id"), //
50+
WC_LOAN_PRODUCT("m_wc_loan_product", "wc_product_loan_id", "id"), //
51+
WC_LOAN("m_wc_loan", "wc_loan_id", "id"), //
5052
;
5153

5254
static final EntityTables[] ENTITY_VALUES = values();

fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/data/datatable/DatatableEntityType.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,11 @@
2626
@Getter
2727
public enum DatatableEntityType {
2828

29-
LOAN("m_loan");
29+
LOAN("m_loan"), //
30+
LOAN_PRODUCT("m_product_loan"), //
31+
WC_LOAN("m_wc_loan"), //
32+
WC_LOAN_PRODUCT("m_wc_loan_product"), //
33+
;
3034

3135
private final String referencedTableName;
3236

0 commit comments

Comments
 (0)