Applied table validation
This commit is contained in:
@@ -1,17 +1,20 @@
|
||||
package net.gepafin.tendermanagement.util;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.*;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import net.gepafin.tendermanagement.config.Translator;
|
||||
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
||||
import net.gepafin.tendermanagement.dao.FormDao;
|
||||
import net.gepafin.tendermanagement.dao.VatCheckDao;
|
||||
import net.gepafin.tendermanagement.model.request.ContentRequestBean;
|
||||
import net.gepafin.tendermanagement.model.response.ContentResponseBean;
|
||||
import net.gepafin.tendermanagement.model.response.SettingResponseBean;
|
||||
import net.gepafin.tendermanagement.web.rest.api.errors.Status;
|
||||
import net.gepafin.tendermanagement.web.rest.api.errors.ValidationException;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
@@ -75,7 +78,7 @@ public class FieldValidator {
|
||||
return value == null || value == 0L;
|
||||
}
|
||||
|
||||
public FieldValidator validateCustom(String value, String customRule, String fieldId) {
|
||||
public FieldValidator validateCustom(String value, String customRule, String fieldId, ContentResponseBean contentResponseBean) {
|
||||
if (customRule == null || value == null) {
|
||||
return this; // No custom rule to validate
|
||||
}
|
||||
@@ -131,6 +134,10 @@ public class FieldValidator {
|
||||
}
|
||||
break;
|
||||
|
||||
case GepafinConstant.NON_EMPTY_TABLES:
|
||||
checkTableValidation(value, fieldId, contentResponseBean, errors);
|
||||
break;
|
||||
|
||||
default:
|
||||
// If the custom rule is unknown, just log or add an error (optional)
|
||||
errors.add(MessageFormat.format(Translator.toLocale(GepafinConstant.VALIDATION_FIELD_CUSTOM), fieldId, customRule));
|
||||
@@ -139,6 +146,70 @@ public class FieldValidator {
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
private static void checkTableValidation(String value, String fieldId, ContentResponseBean contentResponseBean, List<String> errors) {
|
||||
Map<String, Boolean> stateFieldMap= new HashMap<>();
|
||||
|
||||
contentResponseBean.getSettings().stream()
|
||||
.filter(setting -> "table_columns".equals(setting.getName())) // Check for "table_columns"
|
||||
.map(SettingResponseBean::getValue)
|
||||
.filter(Objects::nonNull) // Ensure value is not null
|
||||
.filter(settingValue -> settingValue instanceof Map) // Ensure value is a Map
|
||||
.map(settingValue -> (Map<String, Object>) settingValue) // Cast to Map
|
||||
.map(valueMap -> (List<Map<String, Object>>) valueMap.get("stateFieldData")) // Extract stateFieldData list
|
||||
.filter(Objects::nonNull) // Ensure stateFieldData is not null
|
||||
.flatMap(List::stream) // Flatten the list of field data maps
|
||||
.forEach(fieldData -> {
|
||||
String fieldName = (String) fieldData.get("name"); // Get the name field
|
||||
Boolean isPredefined = (Boolean) fieldData.get("predefined"); // Get the predefined field
|
||||
|
||||
if (fieldName != null && isPredefined != null) {
|
||||
stateFieldMap.put(fieldName, isPredefined);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
try {
|
||||
List<Map<String, Object>> fieldValueList = Utils.convertJsonStringIntoJsonList(value);
|
||||
|
||||
if (fieldValueList == null || fieldValueList.isEmpty()) {
|
||||
errors.add(MessageFormat.format(
|
||||
Translator.toLocale(GepafinConstant.VALIDATION_IN_TABLE),
|
||||
fieldId));
|
||||
return;
|
||||
}
|
||||
|
||||
for (int rowIndex = 0; rowIndex < fieldValueList.size(); rowIndex++) {
|
||||
Map<String, Object> field = fieldValueList.get(rowIndex);
|
||||
|
||||
boolean hasSingleNonNullPredefinedFalse = false;
|
||||
|
||||
for (Map.Entry<String, Boolean> entry : stateFieldMap.entrySet()) {
|
||||
String stateKey = entry.getKey();
|
||||
Boolean isPredefinedFalse = Boolean.FALSE.equals(entry.getValue());
|
||||
|
||||
if (isPredefinedFalse) {
|
||||
Object fieldValue = field.get(stateKey);
|
||||
if (fieldValue != null && !StringUtils.isEmpty(fieldValue.toString())) {
|
||||
hasSingleNonNullPredefinedFalse = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasSingleNonNullPredefinedFalse) {
|
||||
errors.add(MessageFormat.format(
|
||||
Translator.toLocale(GepafinConstant.VALIDATION_IN_TABLE),
|
||||
fieldId));
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
|
||||
public FieldValidator isRequired(String value,Boolean isRequired, String fieldName) {
|
||||
if (Boolean.TRUE.equals(isRequired)) { // Only check if isRequired is true
|
||||
if (Objects.isNull(value) || value.isEmpty()) { // Check if value is null or empty
|
||||
@@ -150,4 +221,16 @@ public class FieldValidator {
|
||||
public boolean hasErrors() {
|
||||
return !errors.isEmpty();
|
||||
}
|
||||
|
||||
|
||||
public ContentRequestBean getContentRequestBeanFromJson(String jsonString) throws JsonProcessingException {
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
// Parse the JSON into a ContentRequestBean
|
||||
ContentRequestBean contentRequestBean = objectMapper.readValue(jsonString, ContentRequestBean.class);
|
||||
|
||||
// Now contentRequestBean is populated with the data from the JSON
|
||||
return contentRequestBean;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user