use of com.haulmont.cuba.gui.components.filter.condition.DynamicAttributesCondition in project cuba by cuba-platform.
the class ParamWrapper method getValue.
@Override
public Object getValue() {
Object value = param.getValue();
if (value instanceof String && !StringUtils.isEmpty((String) value) && !((String) value).startsWith(ParametersHelper.CASE_INSENSITIVE_MARKER)) {
// try to wrap value for case-insensitive "like" search
if (condition instanceof PropertyCondition || condition instanceof DynamicAttributesCondition) {
String escapedValue = value.toString();
if (condition.getEntityMetaClass() != null) {
String thisStore = AppBeans.get(MetadataTools.class).getStoreName(condition.getEntityMetaClass());
GlobalConfig config = AppBeans.get(Configuration.class).getConfig(GlobalConfig.class);
if (config.getDisableEscapingLikeForDataStores() == null || !config.getDisableEscapingLikeForDataStores().contains(thisStore)) {
escapedValue = QueryUtils.escapeForLike(escapedValue);
}
} else {
escapedValue = QueryUtils.escapeForLike(escapedValue);
}
Op op = condition.getOperator();
if (Op.CONTAINS.equals(op) || op.equals(Op.DOES_NOT_CONTAIN)) {
value = wrapValueForLike(escapedValue);
} else if (Op.STARTS_WITH.equals(op)) {
value = wrapValueForLike(escapedValue, false, true);
} else if (Op.ENDS_WITH.equals(op)) {
value = wrapValueForLike(escapedValue, true, false);
}
} else if (condition instanceof CustomCondition) {
String where = ((CustomCondition) condition).getWhere();
Op op = condition.getOperator();
Matcher matcher = LIKE_PATTERN.matcher(where);
if (matcher.find()) {
String stringValue = value.toString();
boolean escape = StringUtils.isNotEmpty(matcher.group(3));
if (escape) {
String escapeChar = matcher.group(4);
if (StringUtils.isNotEmpty(escapeChar)) {
stringValue = QueryUtils.escapeForLike(stringValue, escapeChar);
}
}
if (Op.STARTS_WITH.equals(op)) {
value = wrapValueForLike(stringValue, false, true);
} else if (Op.ENDS_WITH.equals(op)) {
value = wrapValueForLike(stringValue, true, false);
} else {
value = wrapValueForLike(stringValue);
}
}
}
} else if (value instanceof Entity) {
value = ((Entity) value).getId();
} else if (value instanceof Collection) {
List<Object> list = new ArrayList<>(((Collection) value).size());
for (Object obj : ((Collection) value)) {
list.add(obj instanceof Entity ? ((Entity) obj).getId() : obj);
}
value = list;
} else if (value instanceof EnumClass) {
value = ((EnumClass) value).getId();
}
return value;
}
Aggregations