Posto la classe HTTPLogHandler:
codice:
public class HTTPLogHandler extends FileLoader{
@Override
public void parse() {
for (Iterator<String> i = loadFile().iterator(); i.hasNext();) {
String next = i.next();
String[] splitted = next.split(" ", -1);
String ip = splitted[0];
String usr = splitted[2];
Calendar date = calendarize(splitted[3]);
String method = removeQuotes(splitted[5]);
int sepInd = splitted[6].indexOf("/");
String request = splitted[6].substring(sepInd);
String protocol = removeQuotes(splitted[7]);
String[] protocolSplit = protocol.split("/");
String protocolName = protocolSplit[0];
String protocolVers = protocolSplit[1];
int responseTime = Integer.parseInt(splitted[8]);
int size = Integer.parseInt(splitted[9]);
String referer = removeQuotes(splitted[11]);
String userAgent = next.substring(next.indexOf("("), next.indexOf(")")+1);
HTTPFormat format = new HTTPFormat(ip, usr, date, method, request, protocol, size, size, referer, userAgent);
parsed.add(format);
}
}
/**
* Conversione da stringa a formato Calendar.
* @param s
* @return
*/
public Calendar calendarize(String s){
s = s.replace("[", "");
s = s.replace("]", "");
String[] splitted = s.split(" ", -1);
String dateHour = splitted[0];
int sepIndex = dateHour.indexOf(":");
String dateString = dateHour.substring(0, sepIndex); //L'indice del separatore è letto correttamente
String hourString = dateHour.substring(sepIndex+1);
String date[] = dateString.split("/");
int giorno = Integer.parseInt(date[0]);
int mese = monthFormat(date[1]);
int anno = Integer.parseInt(date[2]);
String hour[] = hourString.split(":");
int hh = Integer.parseInt(hour[0]);
int mm = Integer.parseInt(hour[1]);
int ss = Integer.parseInt(hour[2]);
Calendar c = new GregorianCalendar(anno, mese, giorno, hh, mm, ss);
return c;
}
/**
* Conversione String a formato Integer per i mesi.
* @param m
* @return
*/
public int monthFormat(String m){
int month = 0;
if(m.equals("Gen")){
month = 1;
} else if(m.equals("Feb")){
month = 2;
} else if(m.equals("Mar")){
month = 3;
} else if(m.equals("Apr")){
month = 4;
} else if(m.equals("May")){
month = 5;
} else if(m.equals("Jun")){
month = 6;
} else if(m.equals("Jul")){
month = 7;
} else if(m.equals("Aug")){
month = 8;
} else if(m.equals("Sep")){
month = 9;
} else if(m.equals("Oct")){
month = 10;
} else if(m.equals("Nov")){
month = 11;
} else if(m.equals("Dec")){
month = 12;
}
return month;
}
/**
* Rimozione virgolette.
* @param s
* @return
*/
public String removeQuotes(String s){
char virg = 34;
String virgolette = String.valueOf(virg);
s = s.replace(virgolette, "");
return s;
}
}
Aggiungo per completezza che Il metodo setFilePath è ereditato dalla classe FileHandler:
codice:
public abstract class FileHandler { List<HTTPFormat> parsed = new LinkedList();
String filePath;
public List<HTTPFormat> getParsed() {
return parsed;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
}
Per chiarimenti ovviamente, sono qua!