Untitled
unknown
java
4 years ago
13 kB
2
Indexable
package com.bssys.core.common.check; import com.bssys.bird.doctype.schema.DocContentDef; import com.bssys.bird.doctype.schema.DocSchema; import com.bssys.bird.oapi.doc.DocTypeInfo; import com.bssys.bird.doctype.check.DocCheckExecuteContext; import com.bssys.bird.oapi.edit.check.ICheckParam; import com.google.common.collect.ImmutableMap; import com.bssys.oapi.resource.AppObjResources; import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.List; import java.util.TreeSet; import static com.bssys.bird.doctype.check.CheckUtils.LIST_SPLITTER; import static com.bssys.bird.doctype.check.CheckUtils.convertString; import static com.bssys.bird.doctype.check.CheckUtils.fail; import static com.bssys.bird.doctype.check.CheckUtils.filterValidCharacters; import static com.bssys.bird.doctype.check.CheckUtils.getIntegerParam; import static com.bssys.bird.doctype.check.CheckUtils.getStringParam; import static com.bssys.bird.doctype.check.CheckUtils.isStringEmpty; import static com.bssys.bird.doctype.check.CheckUtils.getFieldValue; import static com.bssys.bird.doctype.check.CheckUtils.getStringField; import static com.bssys.util.StringUtilities.clearCrLf; import static com.bssys.util.StringUtilities.emptyIfNull; /** * Created by IntelliJ IDEA. * User: ira1512 * Date: 06.05.2006 * Time: 11:22:27 * To change this template use File | Settings | File Templates. */ public class MinLengthCheck { public static final String NAME_ALIAS = "fieldName"; public static final String VALIDCHARACTERS_PARAM = "validCharacters"; private static final String VALIDCHARACTERS_RU_PARAM = "validCharactersRU"; private static final String MAX_LENGTH_PARAM = "minLength"; private static final String PARAM_FIELD_ALIAS = "paramField"; private static final String PARAM_VALUE_ALIAS = "paramValue"; private static final String CHEKED_FIELDS_LIST = "fields"; private static final String PAYMENT_DIRECTION_FIELD = "paymentDirectionField"; private static final String CHECK_CYRILLIC_PARAM = "checkCyrillic"; private static final String ALLOWED_TAIL_PARAM = "allowedTail"; private static final String STRIP_TRAILING_CR_PARAM = "stripTrailingCR"; private static final String INVALIDCHARS = "INVALIDCHARS"; private static final String FIELD_NAME = "FIELDNAME"; private static final String MAXLENGTH_PARAM_NAME = "MINLENGTH"; private static final String LENGTH_PARAM_NAME = "LENGTH"; private static final String FAIL_CODE_6 = "6"; public void characters(DocCheckExecuteContext context) { String fieldName = getStringField(NAME_ALIAS, context); if (isStringEmpty(fieldName)) { return; } String validCharacters = getStringParam(VALIDCHARACTERS_PARAM, context); validCharacters = convertString(validCharacters); String invalidChars = filterValidCharacters(fieldName, validCharacters, " "); if (invalidChars != null) { fail("5", context, INVALIDCHARS, invalidChars); } } /*Проверять, что если PARAM_FIELD_ALIAS равно: - 0, то в поле содержаться только допустимые VALIDCHARACTERS_PARAM - 1, то в поле содержаться только допустимые VALIDCHARACTERS_RU_PARAM */ public void charactersIncludingRU(DocCheckExecuteContext context) { final String fieldName = getStringField(NAME_ALIAS, context); if (isStringEmpty(fieldName)) { return; } final String validCharacters = getStringParam(VALIDCHARACTERS_PARAM, context); final String validCharactersRU = getStringParam(VALIDCHARACTERS_RU_PARAM, context); String convertedValidCharacters = null; if (paymentIsOutside(context)) { convertedValidCharacters = convertString(validCharacters); } else if (paymentIsInside(context)) { convertedValidCharacters = convertString(validCharactersRU); } if (convertedValidCharacters != null) { final String invalidChars = filterValidCharacters(fieldName, convertedValidCharacters, " "); if (invalidChars != null) { fail("INVALID_CHARS_ERROR", context, INVALIDCHARS, invalidChars); } } } private boolean paymentIsOutside(DocCheckExecuteContext context) { return "0".equals(getStringField(PARAM_FIELD_ALIAS, context)); } private boolean paymentIsInside(DocCheckExecuteContext context) { return "1".equals(getStringField(PARAM_FIELD_ALIAS, context)); } public void charactersParam(DocCheckExecuteContext context) { Object fieldValue = getFieldValue(PARAM_FIELD_ALIAS, context); String valueField = fieldValue == null ? null : fieldValue.toString(); ICheckParam param = context.getParam(PARAM_VALUE_ALIAS); String stringParam = param == null ? null : param.getValue(); if (valueField != null && stringParam != null && StringUtils.hasText(valueField) && stringParam.equals(valueField)) { characters(context); } } public void charactersParamForListOfField(DocCheckExecuteContext context) { String paramFieldValue = getStringField(PARAM_FIELD_ALIAS, context); String paramControlValue = getStringParam(PARAM_VALUE_ALIAS, context); if (StringUtils.hasText(paramFieldValue) && StringUtils.hasText(paramControlValue) && paramFieldValue.equals(paramControlValue)) { String validCharacters = getStringParam(VALIDCHARACTERS_PARAM, context); String validCharactersRU = getStringParam(VALIDCHARACTERS_RU_PARAM, context); if ("true".equalsIgnoreCase(getStringParam(CHECK_CYRILLIC_PARAM, context))) { if ("1".equals(getStringField(PAYMENT_DIRECTION_FIELD, context))) { validCharacters = convertString(validCharactersRU); } } validCharacters = convertString(validCharacters); String list = getStringParam(CHEKED_FIELDS_LIST, context); String[] fieldsList = list == null ? null : LIST_SPLITTER.split(list); boolean isValid = true; if (fieldsList != null) { TreeSet<Character> invalidChars = new TreeSet<Character>(); for (String fieldName : fieldsList) { String fieldValue = getStringField(fieldName, context); if (StringUtils.hasText(fieldValue)) { filterValidCharacters(invalidChars, fieldValue, validCharacters); if (!invalidChars.isEmpty()) { isValid = false; } } } if (!isValid) { fail("notValid", context, INVALIDCHARS, org.apache.commons.lang.StringUtils.join(invalidChars, " ")); } } } } public void length(DocCheckExecuteContext context) { // Проверять, что длина поля не превышает заданного количества символов, // в противном случае сообщение [6]. String fieldName = getStringField(NAME_ALIAS, context); if (isStringEmpty(fieldName)) { return; } int maxLen = getIntegerParam(MAX_LENGTH_PARAM, context); if (fieldName.length() < maxLen) { fail("6", context, ImmutableMap.<String, Object>of("MAXLENGTH", maxLen, "LENGTH", fieldName.length())); } } /** * Проверять, что длина поля не превышает заданного количества символов, * в противном случае сообщение [6]. * ALLOWED_TAIL_PARAM - находящаяся в хвосте строка, которая в подсчете длины не участвует. Например, это нужно, * когда при подписании в коммент вставляется системный комментарий, и его учитывать не нужно. * STRIP_TRAILING_CR_PARAM - отбрасывать ли хвостовой перевод строки */ public void checkLengthIgnoreTail(DocCheckExecuteContext context) { String fieldValue = getStringField(NAME_ALIAS, context); if (isStringEmpty(fieldValue)) { return; } String allowedTail = getStringParam(ALLOWED_TAIL_PARAM, context); boolean stripTrailingCR = "true".equalsIgnoreCase(getStringParam(STRIP_TRAILING_CR_PARAM, context)); if (allowedTail != null && fieldValue.endsWith(allowedTail)) { fieldValue = fieldValue.substring(0, fieldValue.length() - allowedTail.length() ); if (stripTrailingCR && fieldValue.endsWith("\n")) { fieldValue = fieldValue.substring(0, fieldValue.length() - 1); } } int maxLen = getIntegerParam(MAX_LENGTH_PARAM, context); if (fieldValue.length() > maxLen) { fail("6", context, ImmutableMap.<String, Object>of("MAXLENGTH", maxLen, "LENGTH", fieldValue.length())); } } /** * Проверка длины поля без учета символов переноса строки */ public void checkLengthIgnoreCrLf(DocCheckExecuteContext context) { String checkedValue = clearCrLf(emptyIfNull(getStringField(NAME_ALIAS, context))); int maxLen = getIntegerParam(MAX_LENGTH_PARAM, context); if (checkedValue.length() > maxLen) { fail(FAIL_CODE_6, context, ImmutableMap.of(MAXLENGTH_PARAM_NAME, maxLen, LENGTH_PARAM_NAME, checkedValue.length())); } } public void charactersForEMail(DocCheckExecuteContext context) { String fieldName = getStringField(NAME_ALIAS, context); if (isStringEmpty(fieldName)) { return; } String validCharacters = getStringParam(VALIDCHARACTERS_PARAM, context); validCharacters = convertString(validCharacters); String invalidChars = filterValidCharacters(fieldName, validCharacters, " "); if (invalidChars != null) { fail("5", context, INVALIDCHARS, invalidChars); return; } if (!fieldName.contains("@") || fieldName.startsWith("@") || fieldName.endsWith("@")|| !fieldName.contains(".") || fieldName.startsWith(".") || fieldName.endsWith(".")) { fail("wrongEMail", context); } } public void spaceExist(DocCheckExecuteContext context) { String fieldName = getStringField(NAME_ALIAS, context); if (fieldName == null) { return; } if (fieldName.contains(" ")) { fail("0", context); } } /** * Проверка на наличие в поле платежного документа символов, не входящих в кодировку ISO8859-5. * Поля для контроля задаются в настройках чекера. * В параметрах ошибки передаются описание поля, в котором найдены невалидные символы и перечень таких символов. */ public void checkValidSymbols(DocCheckExecuteContext context) { String stringOfCheckingFields = getStringParam(CHEKED_FIELDS_LIST, context); if (!StringUtils.hasText(stringOfCheckingFields)) { return; } List<String> checkingFields = stringToList(stringOfCheckingFields); String convertedValidCharacters = convertString(getStringParam(VALIDCHARACTERS_PARAM, context)); for (String checkingField : checkingFields) { String fieldValue = getStringField(checkingField, context); if (!StringUtils.hasText(fieldValue)) { continue; } String invalidChars = filterValidCharacters(fieldValue, convertedValidCharacters, " "); if (StringUtils.hasText(invalidChars)) { DocTypeInfo docType = context.getDoc().getDocType(); DocSchema ds = AppObjResources.getDocSchema(docType); DocContentDef contentDef = ds.getContent(); String fieldName = contentDef.getDocFieldDef(checkingField).getDesc(); fail("0", context, ImmutableMap.<String, Object>of(FIELD_NAME, fieldName, INVALIDCHARS, invalidChars)); } } } /** * Преобразует строку в список строк, используя в качестве разделителя запятую. Дополнительно удаляет пробелы * по краям получившегося элемента. * * @param stringParam строка с параметрами, которую нужно преобразовать. * @return список, содержащий отдельные строковые элементы. */ private List<String> stringToList(String stringParam) { String[] strValues = LIST_SPLITTER.split(stringParam); List<String> result = new ArrayList<String>(); for (String value : strValues) { value = value.trim(); if (!value.isEmpty()) { result.add(value); } } return result; } }
Editor is loading...