package jnpf.base.util; import jnpf.constant.GenerateConstant; import jnpf.util.JsonUtil; import jnpf.util.StringUtil; import jnpf.util.visiual.JnpfKeyConsts; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.StringJoiner; /** Validates field names against reserved keywords in the original form configuration. */ public final class VisualFieldKeywordValidator { private VisualFieldKeywordValidator() { } public static String invalidFields(String fieldsJson) { StringJoiner invalid = new StringJoiner(","); collect(JsonUtil.getJsonToListMap(fieldsJson), invalid); return invalid.toString(); } private static void collect(List> fields, StringJoiner invalid) { if (fields == null) { return; } for (Map field : fields) { Map config = asMap(field.get("__config__")); if (config == null) { continue; } Object children = config.get("children"); if (JnpfKeyConsts.CHILD_TABLE.equals(config.get("jnpfKey"))) { for (Map child : asMapList(children)) { checkField(child, invalid); } } else if (children != null) { collect(asMapList(children), invalid); } else { checkField(field, invalid); } } } private static void checkField(Map field, StringJoiner invalid) { String fieldName = (String) field.get("__vModel__"); if (StringUtil.isEmpty(fieldName) || !GenerateConstant.containKeyword(fieldName)) { return; } Map config = asMap(field.get("__config__")); if ("f_flow_state".equals(fieldName) && config != null && JnpfKeyConsts.SELECT.equals(config.get("jnpfKey")) && Boolean.TRUE.equals(config.get("isDisplayOnly"))) { return; } invalid.add(String.valueOf(config == null ? null : config.get("label")) + "-" + fieldName); } @SuppressWarnings("unchecked") private static Map asMap(Object value) { return value instanceof Map ? (Map) value : null; } private static List> asMapList(Object value) { List> result = new ArrayList<>(); if (value instanceof List) { for (Object child : (List) value) { Map field = asMap(child); if (field != null) { result.add(field); } } } return result; } }