package org.buckit.datasource.database; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.util.Collection; import java.util.HashMap; import java.util.Map; import org.buckit.Config; import org.buckit.datasource.DataSourceManager; import org.buckit.datasource.database.Field.Type; import org.buckit.datasource.type.KitsDataSource; import org.buckit.model.Kit; public class DatabaseKitsDataSource implements KitsDataSource{ private Map<String, Kit> kits; private static String SELECT_KITS = "SELECT id,name,items,minaccesslevel,delay FROM " + Config.DATABASE_KITS_TABLE; private static String INSERT_KIT = "REPLACE INTO " + Config.DATABASE_KITS_TABLE + " (name,items,minaccesslevel,delay) VALUES (?,?,?,?)"; private DataSourceManager datasource; public DatabaseKitsDataSource(DataSourceManager dataSource) { datasource = dataSource; } public DataSourceManager getDataSource(){ return datasource; } @Override public Kit getKit(String name) { return kits.get(name); } @Override public Collection<Kit> getKits() { return kits.values(); } @Override public boolean load() { kits = new HashMap<String, Kit>(); Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try { conn = DatabaseFactory.getInstance().getConnection(); st = conn.prepareStatement(SELECT_KITS); rs = st.executeQuery(); Kit kit; while (rs.next()) { kit = new Kit(rs.getInt("id"), rs.getString("name"), getItemArray(rs.getString("items")), rs.getInt("minaccesslevel"), rs.getInt("delay")); kits.put(kit.getName(), kit); } } catch (Exception e) { e.printStackTrace(); return false; } finally { try { if (conn != null) conn.close(); if (st != null) st.close(); if (rs != null) rs.close(); } catch (Exception e) { } } // TODO: print result. return true; } 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; } @Override public boolean setLastUsed(int userId, String kitname, int time) { return DatabaseFactory.insertQueryExecutor(Config.DATABASE_KITS_DELAY_TABLE, new Field[] {new Field("userid",userId) , new Field("name",kitname) , new Field("time", time) }, true); } @Override public int lastUsed(int userId, String kitname) { return DatabaseFactory.simpleSelectQueryExecutor(Config.DATABASE_KITS_DELAY_TABLE, new Field[] {new Field("time",Type.INTEGER) }, new Field[] {new Field("userid",userId) , new Field("name",kitname) },1)[0].getInteger("time"); } @Override public boolean setKit(Kit kit) { Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try { conn = DatabaseFactory.getInstance().getConnection(); st = conn.prepareStatement(INSERT_KIT, Statement.RETURN_GENERATED_KEYS); st.setString(1, kit.getName()); st.setString(2, kit.itemsToString()); st.setInt(3, kit.getMinaccesslevel()); st.setInt(4, kit.getDelay()); st.execute(); rs = st.getGeneratedKeys(); if (rs.next()) { kits.put(kit.getName(), new Kit(rs.getInt("id"), kit.getName(), kit.getItemsArray(), kit.getMinaccesslevel(), kit.getDelay())); } } catch (Exception e) { e.printStackTrace(); return false; } finally { try { if (conn != null) conn.close(); if (st != null) st.close(); if (rs != null) rs.close(); } catch (Exception e) { } } return true; } }