package org.buckit.datasource.flatfile;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.buckit.Config;
import org.buckit.datasource.DataSourceManager;
import org.buckit.datasource.type.KitsDataSource;
import org.buckit.model.Kit;
public class FlatFileKitsDataSource implements KitsDataSource{
private DataSourceManager datasource;
private Map<String, Kit> kits;
private Map<String, Integer> kitslast; //key=userid/kitname
public FlatFileKitsDataSource(DataSourceManager dataSource) {
datasource = dataSource;
}
public DataSourceManager getDataSource(){
return datasource;
}
@Override
public boolean load() {
kits = new HashMap<String, Kit>();
kitslast = new HashMap<String, Integer>();
List<String> lines = FileHandler.getLines("kits");
LineReader r;
int delay, level;
int[][] items;
String name;
for (int i=0; i<lines.size(); i++) {
r = new LineReader(lines.get(i));
name = r.nextStr();
items = getItemArray(r.nextStr());
delay = r.nextInt();
level = r.nextInt();
Kit kit = new Kit(-1, name, items, level, delay);
kits.put(kit.getName(), kit);
}
FFLog.newInit("Kits", kits.size());
List<String> lines2 = FileHandler.getLines("kitslast");
int userid, time;
String kitname;
for (int i=0; i<lines2.size(); i++) {
r = new LineReader(lines.get(i));
userid = r.nextInt();
kitname = r.nextStr();
time = r.nextInt();
kitslast.put(userid+"/"+kitname, time);
}
FFLog.newInit("Kits-used", kitslast.size());
return true;
}
public boolean setKit(Kit kit) {
if (kits.containsKey(kit.getName())) {
List<String> lines = FileHandler.getLines("kits");
LineReader r;
String name;
for (int i=0; i<lines.size(); i++) {
r = new LineReader(lines.get(i));
name = r.nextStr();
if (kit.getName().equals(name)) {
String str = kit.getName() + FileHandler.sep1 +
kit.itemsToString() + FileHandler.sep1 +
kit.getDelay() + FileHandler.sep1 +
kit.getMinaccesslevel();
lines.set(i, str);
FFLog.newEdit("Kits", "edit kit '"+kit.getName()+"'");
break;
}
}
kits.put(kit.getName(), kit);
return FileHandler.writeFile("kits", lines);
} else {
FFLog.newEdit("Kits", "new kit '"+kit.getName()+"'");
kits.put(kit.getName(), kit);
return FileHandler.addLine("kits", kit.getName() + FileHandler.sep1 +
kit.itemsToString() + FileHandler.sep1 +
kit.getDelay() + FileHandler.sep1 +
kit.getMinaccesslevel());
}
}
@Override
public Kit getKit(String name) {
return kits.get(name);
}
@Override
public Collection<Kit> getKits() {
return kits.values();
}
@Override
public boolean setLastUsed(int userid, String kitname, int time) {
boolean exists = false;
kitslast.put(userid+"/"+kitname, time);
List<String> lines = FileHandler.getLines("kitslast");
LineReader r;
int useridL;
String kitnameL;
for (int i=0; i<lines.size(); i++) {
r = new LineReader(lines.get(i));
useridL = r.nextInt();
kitnameL = r.nextStr();
if (userid == useridL && kitname.equals(kitnameL)) {
lines.set(i, userid + FileHandler.sep1 +
kitname + FileHandler.sep1 +
time);
exists = true;
FFLog.newEdit("Kits-used", "kit '"+kitname+"' reused by '"+userid+"'");
break;
}
}
if (!exists) {
lines.add( userid + FileHandler.sep1 +
kitname + FileHandler.sep1 +
time);
FFLog.newEdit("Kits-used", "kit '"+kitname+"' used by '"+userid+"'");
}
return FileHandler.writeFile("kitslast", lines);
}
@Override
public int lastUsed(int userid, String kitname) {
if (kitslast.get(userid+"/"+kitname) == null)
return 0;
else
return kitslast.get(userid+"/"+kitname);
}
private static int[][] getItemArray(String str) {
String[] split = str.split(Config.DATABASE_SEPERATOR);
int[][] rt = new int[split.length][3];
String[] parts;
for (int i = 0; i < split.length; i++) {
parts = split[i].split(Config.DATABASE_DELIMITER);
try {
rt[i][0] = Integer.parseInt(parts[0]);
rt[i][1] = Integer.parseInt(parts[1]);
rt[i][2] = Integer.parseInt(parts[2]);
} catch (Exception e) {
e.printStackTrace();
}
}
return rt;
}
}