Untitled
unknown
java
5 years ago
13 kB
3
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...