Search in sources :

Example 1 with DynamicAttributesCondition

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;
}
Also used : Op(com.haulmont.cuba.core.global.filter.Op) Entity(com.haulmont.cuba.core.entity.Entity) CustomCondition(com.haulmont.cuba.gui.components.filter.condition.CustomCondition) Matcher(java.util.regex.Matcher) DynamicAttributesCondition(com.haulmont.cuba.gui.components.filter.condition.DynamicAttributesCondition) ArrayList(java.util.ArrayList) PropertyCondition(com.haulmont.cuba.gui.components.filter.condition.PropertyCondition) EnumClass(com.haulmont.chile.core.datatypes.impl.EnumClass) Collection(java.util.Collection)

Aggregations

EnumClass (com.haulmont.chile.core.datatypes.impl.EnumClass)1 Entity (com.haulmont.cuba.core.entity.Entity)1 Op (com.haulmont.cuba.core.global.filter.Op)1 CustomCondition (com.haulmont.cuba.gui.components.filter.condition.CustomCondition)1 DynamicAttributesCondition (com.haulmont.cuba.gui.components.filter.condition.DynamicAttributesCondition)1 PropertyCondition (com.haulmont.cuba.gui.components.filter.condition.PropertyCondition)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 Matcher (java.util.regex.Matcher)1