All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.n2oapp.framework.config.util.FieldCompileUtil Maven / Gradle / Ivy

There is a newer version: 7.28.2
Show newest version
package net.n2oapp.framework.config.util;

import net.n2oapp.framework.api.metadata.aware.PreFiltersAware;
import net.n2oapp.framework.api.metadata.control.N2oField;
import net.n2oapp.framework.api.metadata.global.dao.N2oPreFilter;
import net.n2oapp.framework.api.metadata.global.dao.query.N2oQuery;
import net.n2oapp.framework.api.metadata.local.CompiledQuery;

import java.util.ArrayList;
import java.util.List;

import static net.n2oapp.framework.api.StringUtils.isLink;
import static net.n2oapp.framework.api.StringUtils.unwrapLink;

/**
 * Утилита для компиляции поля
 */
public class FieldCompileUtil {

    /**
     * Инициализация reset зависимостей по префильтрам метаданных
     *
     * @param source Метаданная, содержащая префильтры
     * @return Массив зависимостей
     */
    public static N2oField.Dependency[] getResetOnChangeDependency(PreFiltersAware source) {
        List dependencies = new ArrayList<>();

        if (source.getPreFilters() != null) {
            for (N2oPreFilter preFilter : source.getPreFilters()) {
                if (Boolean.TRUE.equals(preFilter.getResetOnChange()) && isLink(preFilter.getValue())) {
                    N2oField.ResetDependency reset = new N2oField.ResetDependency();
                    reset.setOn(new String[]{unwrapLink(preFilter.getValue())});
                    reset.setApplyOnInit(false);
                    dependencies.add(reset);
                }
            }
        }
        return dependencies.toArray(N2oField.Dependency[]::new);
    }

    /**
     * Находит подходящие фильтры для поля.
     * Подходящими для поля a являются a, a.b, a.c, a*.b, a*.c
     * Подходящими для поля a.b являются a.b, a.b.c, a.b*.c
     *
     * @param fieldId Идентификатор поля
     * @param query   Скомпилированная модель выборки
     * @return Список подходящих для поля фильтров
     */
    public static List getFilters(String fieldId, CompiledQuery query) {
        List filters = new ArrayList<>();
        if (fieldId == null)
            return filters;
        query.getFilterFieldsMap().keySet().forEach(filterId -> {
            if (fieldId.equals(filterId)) {
                filters.add(query.getFilterFieldsMap().get(filterId));
            } else if (filterId.startsWith(fieldId)) {
                String tmp = filterId.substring(fieldId.length());
                if ((tmp.startsWith(".") && tmp.indexOf(".", 1) == -1) ||
                        (tmp.startsWith("*.") && tmp.indexOf(".", 2) == -1)) {
                    filters.add(query.getFilterFieldsMap().get(filterId));
                }
            }
        });
        return filters;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy