Не могу понять почему не проходит пункт
2.Вызов метода execute с параметром "get ip for date = "[any_date]"" должен возвращать множество уникальных IP адресов, события с которых произведены в указанное время [any_date].
при том, что остальные проходят, в том числе нахождение других параметров по дате. Метод, которые это все делает - общий. Поэтому совсем не понятно куда копать? Возможно дату нужно по-другому парсить? Но ведь до этого этапа все тесты проходило.
@Override
public Set<Object> execute(String query) {
String[] params = queryParser(query);
return getQuery(params[0], params[1], params[2]);
}
private String[] queryParser(String s) {
String[] result = new String[3];
String str = s.substring(s.indexOf(' ') + 1);
if (s.indexOf("for") > 0) {
result[0] = str.substring(0, str.indexOf(' '));
str = s.substring(s.indexOf("for") + 4);
result[1] = str.substring(0, str.indexOf(' '));
str = s.substring(s.indexOf(" = ") + 4);
result[2] = str.substring(0, str.indexOf('"'));
} else {
result[0] = str;
}
return result;
}
private Set<Object> getQuery(String field1, String field2, String value1) {
Set<Object> results = new HashSet<>();
try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(logDir, "*.log")) {
for (Path path : directoryStream) {
BufferedReader fileReader = new BufferedReader(new FileReader(path.toString()));
while (fileReader.ready()) {
String str = fileReader.readLine();
Map<String, String> data = getDataFromString(str);
String ipFromData = data.get("ip");
String userFromData = data.get("user");
Date date = parseDate(data.get("date"));
String eventFromData = data.get("event");
String statusFromData = data.get("status");
//String taskFromData = data.get("task");
if ( field2 == null && value1 == null
|| field2.equals("ip") && value1.equals(ipFromData)
|| field2.equals("user") && value1.equals(userFromData)
|| field2.equals("date") && parseDate(value1).equals(date)
|| field2.equals("event") && value1.equals(eventFromData)
|| field2.equals("status") && value1.equals(statusFromData)
) {
switch (field1) {
case "ip" :
results.add(ipFromData);
break;
case "user" :
results.add(userFromData);
break;
case "date" :
results.add(date);
break;
case "event" :
results.add(Event.valueOf(eventFromData));
break;
case "status" :
results.add(Status.valueOf(statusFromData));
break;
}
}
}
fileReader.close();
path.getFileName();
}
} catch (IOException e) {
e.printStackTrace();
}
return results;
}
private Map<String, String> getDataFromString(String s) {
Map<String, String> result = new HashMap<>();
String ip = s.substring(0, s.indexOf('\t'));
result.put("ip", ip);
String str = s.substring(s.indexOf('\t')+1);
String user = str.substring(0, str.indexOf('\t'));
result.put("user", user);
str = str.substring(str.indexOf('\t')+1);
String date = str.substring(0, str.indexOf('\t'));
result.put("date", date);
str = str.substring(str.indexOf('\t')+1);
String event = str.substring(0, str.indexOf('\t'));
if (event.indexOf(' ') > 0) {
String taskNumber = event.substring(event.indexOf(' ')+1);
event = event.substring(0, event.indexOf(' '));
result.put("task", taskNumber);
}
result.put("event", event);
str = str.substring(str.indexOf('\t')+1);
String status = str;
result.put("status", status);
return result;
}
private Date parseDate(String s) {
String string = s;
int date = Integer.parseInt(string.substring(0, string.indexOf('.')));
string = string.substring(string.indexOf('.')+1);
int month = Integer.parseInt(string.substring(0, string.indexOf('.'))) - 1;
string = string.substring(string.indexOf('.')+1);
int year = Integer.parseInt(string.substring(0, string.indexOf(' ')));
string = string.substring(string.indexOf(' ')+1);
int hrs = Integer.parseInt(string.substring(0, string.indexOf(':')));
string = string.substring(string.indexOf(':')+1);
int min = Integer.parseInt(string.substring(0, string.indexOf(':')));
string = string.substring(string.indexOf(':')+1);
int sec = Integer.parseInt(string);
return (new GregorianCalendar(year, month, date, hrs, min, sec)).getTime();
}package com.javarush.task.task39.task3913;
public enum Event {
LOGIN,
DOWNLOAD_PLUGIN,
WRITE_MESSAGE,
SOLVE_TASK,
DONE_TASK
}