package org.buckit.datasource.database; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; 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 DatabaseHomesDataSource implements HomesDataSource{ private static String SELECT_HOME = "SELECT id,x,y,z,rotX,rotY,world FROM " + Config.DATABASE_HOMES_TABLE + " WHERE userid = ? AND name = ? LIMIT 1"; private static String INSERT_HOME = "INSERT INTO " + Config.DATABASE_HOMES_TABLE + " (name,userid,username,world,x,y,z,rotX,rotY) VALUES (?,?,?,?,?,?,?,?,?)"; private static String DELETE_HOME = "DELETE FROM " + Config.DATABASE_HOMES_TABLE + " WHERE userid = ? AND name = ?"; private static String SELECT_HOMES = "SELECT id,name,x,y,z,rotX,rotY,world FROM " + Config.DATABASE_HOMES_TABLE + " WHERE userid = ?"; private DataSourceManager datasource; private Server server; public DatabaseHomesDataSource(DataSourceManager dataSource) { datasource = dataSource; server = datasource.getServer(); } public DataSourceManager getDataSource(){ return datasource; } @Override public boolean deleteHome(int userId, String name) { Connection conn = null; PreparedStatement st = null; try { conn = DatabaseFactory.getInstance().getConnection(); st = conn.prepareStatement(DELETE_HOME); st.setInt(1, userId); st.setString(2, name); st.execute(); } catch (Exception e) { e.printStackTrace(); return false; } finally { try { if (conn != null) conn.close(); if (st != null) st.close(); } catch (Exception e) { } } return true; } @Override public Home getHome(int userId, String name) { Connection conn = null; PreparedStatement st = null; ResultSet rs = null; Home home = null; try { conn = DatabaseFactory.getInstance().getConnection(); st = conn.prepareStatement(SELECT_HOME); st.setInt(1, userId); st.setString(2, name); rs = st.executeQuery(); if (rs.next()) { home = new Home(rs.getInt("id"), name, new Location(server.getWorld(rs.getString("world")), rs.getDouble("x"), rs.getDouble("y"), rs.getDouble("z"), rs.getFloat("rotX"), rs.getFloat("rotY"))); } } catch (Exception e) { e.printStackTrace(); return home; } finally { try { if (conn != null) conn.close(); if (st != null) st.close(); if (rs != null) rs.close(); } catch (Exception e) { } } return home; } @Override public List<Home> getHomes(int userId) { Connection conn = null; PreparedStatement st = null; ResultSet rs = null; List<Home> homes = new ArrayList<Home>(); try { conn = DatabaseFactory.getInstance().getConnection(); st = conn.prepareStatement(SELECT_HOMES); st.setInt(1, userId); rs = st.executeQuery(); while (rs.next()) { homes.add(new Home(rs.getInt("id"), rs.getString("name"), new Location(server.getWorld(rs.getString("world")), rs.getDouble("x"), rs.getDouble("y"), rs.getDouble("z"), rs.getFloat("rotX"), rs.getFloat("rotY")))); } } catch (Exception e) { e.printStackTrace(); return homes; } finally { try { if (conn != null) conn.close(); if (st != null) st.close(); if (rs != null) rs.close(); } catch (Exception e) { } } return homes; } @Override public boolean load() { return true; // do nothing } @Override public boolean setHome(int userId, String username, String name, Location home) { Connection conn = null; PreparedStatement st = null; try { conn = DatabaseFactory.getInstance().getConnection(); st = conn.prepareStatement(INSERT_HOME); st.setString(1, name); st.setInt(2, userId); st.setString(3, username); st.setString(4, home.getWorld().getName()); st.setDouble(5, home.getX()); st.setDouble(6, home.getY()); st.setDouble(7, home.getZ()); st.setFloat(8, home.getPitch()); st.setFloat(9, home.getYaw()); st.execute(); } catch (Exception e) { e.printStackTrace(); return false; } finally { try { if (conn != null) conn.close(); if (st != null) st.close(); } catch (Exception e) { } } return true; } }