Если кому интересно, то начало тут: прошлое обсуждение (закрыл этот вопрос, потому как код не обновился, смысла там что-то писать нет)
Переписал полностью весь код с 5, 6, 7 шага. (QLQuery inteface), выделил утилитные методы в отдельные классы. Методы для работы с запросом в QueryUtils.class методы для работы с логами в LogsUtils.class. Методы сделал статическими. Изменил логику работы метода LogParser.execute(String query) и получил +3 пункта "ОК".
А непонятки остались.
То есть, если рассуждать логически то:
1. Если проходят последние два пункта, а в особенности последний пункт, значит запрос разбирается верно, и алгоритм выборки данных по основной части запроса работает, условие из запроса парсится верно, метод возвращает верный набор данных
2. Если проходит хоть одно из всех прочих условий, значит верно парсятся и даты запрашиваемого промежутка. Алгоритм работы то на все возможные наборы полей запроса тоже один.
То есть либо он по разному тестирует разные наборы <Запрашиваемое поле> for <Условие> = <Значение> and date between <промежуток времени>, либо он требует от одного алгоритма выбора и фильтрации данных разные результаты.
Вопрос знатокам: А че надо то ему вообще?
Проверял ручками что смог - все вроде верно работает.
Понять не могу, как проверяет валидатор и что проверяет. Где он ошибку находит? Что должен вернуть метод, если для какого-то запроса не окажется данных. Например, логическая ошибка запроса вроде: "get status for date = "01.01.2015 0:00:00" and date between "01.01.2019 0:00:00" and "01.01.2020 0:00:00"" - null, пустой список? Фильтровать по датам интервала включительно или же нет?
package com.javarush.task.task39.task3913;
import java.nio.file.Paths;
public class Solution {
public static void main(String[] args) {
LogParser logParser = new LogParser(Paths.get("D:\\TestDirectory"));
//System.out.println(logParser.getNumberOfUniqueIPs(null, new Date()));
final String query = "get ip for event = \"WRITE_MESSAGE\" and date between \"13.09.2013 5:04:50\" and \"12.12.2013 21:56:30\"";
logParser.execute(query).forEach(System.out::println);
}
}