Как предотвратить отображение пустых / нулевых значений в "неправильном" поле для фильтра - PullRequest
0 голосов
/ 10 июля 2020

Я работаю над фильтром, который сортирует разные типы данных. Когда пользователь выбирает «Неверно» в качестве фильтра, отображается информация, которая проходит через «неправильное» значение. Проблема в том, что отображаются пустые значения и пробелы, которых не должно быть. Эти значения должны отображаться под другим фильтром. Что мне нужно сделать в приведенном ниже коде, чтобы любые пустые / нулевые значения не отображались в «неправильном» фильтре?

public static Specification<itemData> hasFreeItem(final String[] filter) {
    return new Specification<itemData>() {
        public Predicate toPredicate(Root<itemData> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
            if (isEmpty(filter)) {
                return null;
            }
            String maxCurrValue = "1000";
            Collection<Predicate> predicates = new ArrayList<>();
            Collection<Predicate> incorrect = new ArrayList<>();
            for(String obj : filter) {
                if (obj.equals("incorrect")) {
                    boolean has1000 = false;
                    boolean has500 = false;
                    boolean hasContains = false;
                    for (String temp : filter) {
                        if (temp.equals("1000")) {
                            has1000 = true;
                        } else if (temp.equals("500")) {
                            has500 = true;
                        }
                        else if (temp.equals("contains")) {
                            hasContains = true;
                        }
                    }
                    if (!has1000) {
                        incorrect.add(builder.notEqual(root.join(itemData_.productData).join(productData_.contents, JoinType.LEFT).get(Contents_.freeItems), "1000"));
                    }
                    if (!has500) {
                        incorrect.add(builder.notEqual(root.join(itemData_.productData).join(productData_.contents, JoinType.LEFT).get(Contents_.freeItems), "500"));
                    }
                    if (!hasContains) {
                        incorrect.add(builder.notEqual(root.join(itemData_.productData).join(productData_.contents, JoinType.LEFT).get(Contents_.freeItems), "A"));
                        incorrect.add(builder.notEqual(root.join(itemData_.productData).join(productData_.contents, JoinType.LEFT).get(Contents_.freeItems), "No"));
                    }
                    Predicate neverMostRecent = builder.lessThan(root.join(itemData_.productData).join(productData_.contents, JoinType.LEFT).get(Contents_.freeItems), maxCurrValue);
                    incorrect.add(neverMostRecent);
                } else if (obj.equals("contains")) {
                    predicates.add(builder.equal(root.join(itemData_.productData).join(productData_.contents, JoinType.LEFT).get(Contents_.freeItems), "No"));
                } else if (obj.equals("")) {
                    predicates.add(builder.isNull(root.join(itemData_.productData).join(productData_.contents, JoinType.LEFT).get(Contents_.freeItems)));
                    predicates.add(builder.equal(root.join(itemData_.productData).join(productData_.contents, JoinType.LEFT).get(Contents_.freeItems), ""));
                } else if (obj.equals("A")) {
                    predicates.add(builder.notEqual(root.join(itemData_.productData).join(productData_.contents, JoinType.LEFT).get(Contents_.itemDerived), ""));
                } else {
                    predicates.add(builder.equal(root.join(itemData_.productData).join(productData_.contents, JoinType.LEFT).get(Contents_.freeItems), obj));
                }
            }
            Predicate predicate = builder.or(predicates.toArray(new Predicate[predicates.size()]));
            if (incorrect.isEmpty()) {
                return predicate;
            }
            Predicate incorrectPredicate = builder.and(incorrect.toArray(new Predicate[incorrect.size()]));
            return builder.or(predicate, incorrectPredicate);
        }
    };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...