package me.brandonc.benchmark.chart;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class ResultSet {
private List<String[]> data = new ArrayList<String[]>();
public void loadDataFromFolder(File results) {
FileFilter fileFilter = new FileFilter() {
public boolean accept(File file) {
return file.getName().endsWith(".log");
}
};
File[] files = results.listFiles(fileFilter);
for (File file : files) {
if (file.isFile()) {
loadDataFromFile(file);
}
}
}
public void loadDataFromFile(File file) {
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader(file);
br = new BufferedReader(fr);
// fetch dataStoreInfo from filename
String filename = file.getName();
String[] dataStoreInfo = filename.split("\\.");
String dataStore = dataStoreInfo[0];
String engine = "";
String setting = "";
String suffix = "";
if (dataStoreInfo.length > 2) {
engine = dataStoreInfo[1];
suffix += engine;
}
if (dataStoreInfo.length > 3) {
setting = dataStoreInfo[2];
suffix += "." + setting;
}
// fetch results from log
String line;
while ((line = br.readLine()) != null) {
StringTokenizer tokens = new StringTokenizer(line, "\t");
String values[] = new String[Column.values().length];
values[Column.DATASTORE.ordinal()] = dataStore;
values[Column.ENGINE.ordinal()] = engine;
values[Column.SETTING.ordinal()] = setting;
while (tokens.hasMoreTokens()) {
String token = tokens.nextToken();
String[] namePair = token.split(":");
int pos = Column.resolve(namePair[0].trim());
values[pos] = namePair[1].trim();
}
if (!suffix.equals("")) {
values[Column.METHOD.ordinal()] = values[Column.METHOD.ordinal()] + "(" + suffix + ")";
}
data.add(values);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(br);
IOUtils.closeQuietly(fr);
}
}
public List<String[]> getData() {
return data;
}
}