6565import java .util .ArrayList ;
6666import java .util .List ;
6767import java .util .Map ;
68+ import java .util .Optional ;
6869import java .util .Set ;
6970import org .apache .commons .lang3 .StringUtils ;
7071import 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
0 commit comments