Не могу понять почему не проходит пункт
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;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Date;
import java.util.GregorianCalendar;
public class Solution {
public static void main(String[] args) {
Date dateAfter = (new GregorianCalendar(2013, 8, 13, 5,4, 50)).getTime();
Date dateBefore = (new GregorianCalendar(2014, 0, 3, 3,45, 23)).getTime();
LogParser logParser = new LogParser(Paths.get("/media/roman/data/workspace/java/JavaRushTasks/4.JavaCollections/src/com/javarush/task/task39/task3913/logs"));
/*System.out.println(logParser.getNumberOfUniqueIPs(null, null));
System.out.println(logParser.getNumberOfUniqueIPs(
dateAfter,
dateBefore));
System.out.println(logParser.getUniqueIPs(dateAfter, dateBefore));
System.out.println(logParser.getIPsForUser("Amigo", null, dateBefore));
System.out.println(logParser.getIPsForEvent(Event.DONE_TASK, null, null));
System.out.println(logParser.getIPsForStatus(Status.OK, null, null));
System.out.println("======================================================");
System.out.println(logParser.getAllUsers());
System.out.println(logParser.getNumberOfUsers(dateAfter, dateBefore));
System.out.println(logParser.getNumberOfUserEvents("Vasya Pupkin", null, null));
System.out.println("======================================================");
System.out.println(logParser.getSolvedTaskUsers(null, null, 1));
System.out.println(logParser.getDoneTaskUsers(null, null, 15));
System.out.println("======================================================");*/
//System.out.println(logParser.getDataFromString("192.168.100.2\tVasya Pupkin\t30.08.2012 16:08:40\tDONE_TASK 15\tOK"));
//System.out.println(logParser.getDatesForUserAndEvent("Amigo", Event.LOGIN, dateAfter, null));
//System.out.println(logParser.getDatesWhenSomethingFailed(dateAfter, dateBefore));
//System.out.println(logParser.getDatesWhenErrorHappened(null, null));
//System.out.println(logParser.getDateWhenUserLoggedFirstTime("Amigo", dateAfter, null));
//System.out.println(logParser.getDateWhenUserSolvedTask("Amigo", 18, null, null));
//System.out.println(logParser.getDateWhenUserDoneTask("Vasya Pupkin", 15, null, null));
//System.out.println(logParser.getDatesWhenUserWroteMessage("Eduard Petrovich Morozko", null, null));
//System.out.println(logParser.getDatesWhenUserDownloadedPlugin("Eduard Petrovich Morozko", null, null));
//System.out.println(logParser.getNumberOfAllEvents(null, null));
//System.out.println(logParser.getAllEvents(null, null));
//System.out.println(logParser.getEventsForIP("127.0.0.1", null, null));
//System.out.println(logParser.getEventsForUser("Amigo", null, null));
//System.out.println(logParser.getFailedEvents(null, null));
//System.out.println(logParser.getErrorEvents(null, null));
//System.out.println(logParser.getNumberOfAttemptToSolveTask(11, null, null));
//System.out.println(logParser.getNumberOfSuccessfulAttemptToSolveTask(154, null, null));
//System.out.println(logParser.getAllSolvedTasksAndTheirNumber(null, dateBefore));
//System.out.println(logParser.getAllDoneTasksAndTheirNumber(null, null));
//System.out.println(logParser.execute("get ip"));
//System.out.println(logParser.execute("get user"));
//System.out.println(logParser.execute("get date"));
//System.out.println(logParser.execute("get event"));
//System.out.println(logParser.execute("get status"));
System.out.println(logParser.execute("get status for event = \"DONE_TASK\""));
//System.out.println(Arrays.toString(logParser.queryParser("get user")));
}
}