package org.buckit.datasource.flatfile; import java.io.File; import java.io.IOException; import java.util.Collection; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.buckit.Config; import org.buckit.datasource.DataSourceManager; import org.buckit.datasource.type.HomesDataSource; import org.buckit.model.Home; import org.bukkit.Location; import org.bukkit.Server; public class FlatFileHomesDataSource implements HomesDataSource{ private DataSourceManager datasource; private Server server; private int lastId=0; public FlatFileHomesDataSource(DataSourceManager dataSource) { datasource = dataSource; server = datasource.getServer(); } public DataSourceManager getDataSource(){ return datasource; } @Override public boolean load() { File dir = new File(Config.FLATFILE_HOMES_DIRECTORY); String[] files = dir.list(); int linestotal=0; if (files != null) { List<String> lines; for (String f : files) { File file = new File(Config.FLATFILE_HOMES_DIRECTORY+f); lines = FileHandler.readFile(file); LineReader r; int homeId; for (int i=0; i<lines.size(); i++) { r = new LineReader(lines.get(i)); homeId = r.nextInt(); if (homeId > lastId) lastId = homeId; linestotal++; } } } FFLog.newFound("Homes", linestotal); return true; } @Override public boolean setHome(int userId, String username, String name, Location home) { boolean exists = false; File f = new File(Config.FLATFILE_HOMES_DIRECTORY+userId+".txt"); if (!f.exists()) { new File(f.getParent()).mkdirs(); try { f.createNewFile(); } catch (IOException e) { e.printStackTrace(); } FFLog.newFile(f.getPath()); } LineReader r; List<String> lines = FileHandler.readFile(f); int homeId; String homeName; for (int i=0; i<lines.size(); i++) { r = new LineReader(lines.get(i)); homeId = r.nextInt(); homeName = r.nextStr(); if (name.equals(homeName)) { lines.set(i, homeId+FileHandler.sep1+ homeName+FileHandler.sep1+ userId+FileHandler.sep1+ username+FileHandler.sep1+ home.getWorld().getName()+FileHandler.sep1+ home.getX()+FileHandler.sep1+ home.getY()+FileHandler.sep1+ home.getZ()+FileHandler.sep1+ home.getPitch()+FileHandler.sep1+ home.getYaw()); exists = true; FFLog.newEdit("Homes ("+username+")", "edit home '"+name+"'"); break; } } if (!exists) { lines.add((lastId+1)+FileHandler.sep1+ name+FileHandler.sep1+ userId+FileHandler.sep1+ username+FileHandler.sep1+ home.getWorld().getName()+FileHandler.sep1+ home.getX()+FileHandler.sep1+ home.getY()+FileHandler.sep1+ home.getZ()+FileHandler.sep1+ home.getPitch()+FileHandler.sep1+ home.getYaw()); lastId++; FFLog.newEdit("Homes ("+username+")", "new home '"+name+"'"); } return FileHandler.writeFile(f, lines); } @Override public Home getHome(int userId, String name) { File f = new File(Config.FLATFILE_HOMES_DIRECTORY+userId+".txt"); List<String> lines = FileHandler.readFile(f); LineReader r; Home home = null; int homeId; String homeName, world; double x,y,z; float rotY, rotX; for (int i=0; i<lines.size(); i++) { r = new LineReader(lines.get(i)); homeId = r.nextInt(); homeName = r.nextStr(); r.skip(); r.skip(); world = r.nextStr(); x = r.nextDouble(); y = r.nextDouble(); z = r.nextDouble(); rotY = r.nextFloat(); rotX = r.nextFloat(); if (name.equals(homeName)) { home = new Home(homeId, name, new Location(server.getWorld(world), x, y, z, rotX, rotY)); break; } } return home; } @Override public Collection<Home> getHomes(int userId) { File f = new File(Config.FLATFILE_HOMES_DIRECTORY+userId+".txt"); List<String> lines = FileHandler.readFile(f); LineReader r; Map<String, Home> homes = new LinkedHashMap<String, Home>(); int homeId; String homeName, world; double x,y,z; float rotY, rotX; for (int i=0; i<lines.size(); i++) { r = new LineReader(lines.get(i)); homeId = r.nextInt(); homeName = r.nextStr(); r.skip(); r.skip(); world = r.nextStr(); x = r.nextDouble(); y = r.nextDouble(); z = r.nextDouble(); rotY = r.nextFloat(); rotX = r.nextFloat(); homes.put(homeName, new Home(homeId, homeName, new Location(server.getWorld(world), x, y, z, rotX, rotY))); } return homes.values(); } @Override public boolean deleteHome(int userId, String name) { File f = new File(Config.FLATFILE_HOMES_DIRECTORY+userId+".txt"); List<String> lines = FileHandler.readFile(f); LineReader r; String homeName; for (int i=0; i<lines.size(); i++) { r = new LineReader(lines.get(i)); homeName = r.getStr(1); if (name.equals(homeName)) { lines.remove(i); FFLog.newEdit("Homes ("+userId+")", "delete home '"+name+"'"); break; } } return FileHandler.writeFile("homes", lines); } }