/* * This file is part of aion-emu <aion-emu.com>. * * aion-emu is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * aion-emu is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with aion-emu. If not, see <http://www.gnu.org/licenses/>. */ package mysql5; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import org.apache.log4j.Logger; import com.aionemu.commons.database.DB; import com.aionemu.commons.database.IUStH; import com.aionemu.commons.database.ParamReadStH; import com.aionemu.commons.database.dao.DAOManager; import com.aionemu.gameserver.dao.BlockListDAO; import com.aionemu.gameserver.dao.PlayerDAO; import com.aionemu.gameserver.dataholders.PlayerInitialData; import com.aionemu.gameserver.model.gameobjects.player.BlockList; import com.aionemu.gameserver.model.gameobjects.player.BlockedPlayer; import com.aionemu.gameserver.model.gameobjects.player.Player; import com.aionemu.gameserver.model.gameobjects.player.PlayerCommonData; import com.aionemu.gameserver.world.World; /** * MySQL5 DAO for editing the block list * @author Ben * */ public class MySQL5BlockListDAO extends BlockListDAO { public static final String LOAD_QUERY = "SELECT blocked_player, reason FROM blocks WHERE player=?"; public static final String ADD_QUERY = "INSERT INTO blocks (player, blocked_player, reason) VALUES (?, ?, ?)"; public static final String DEL_QUERY = "DELETE FROM blocks WHERE player=? AND blocked_player=?"; public static final String SET_REASON_QUERY = "UPDATE blocks SET reason=? WHERE player=? AND blocked_player=?"; private static Logger log = Logger.getLogger(MySQL5BlockListDAO.class); /** * {@inheritDoc} */ @Override public boolean addBlockedUser(final int playerObjId,final int objIdToBlock,final String reason) { return DB.insertUpdate(ADD_QUERY, new IUStH(){ @Override public void handleInsertUpdate(PreparedStatement stmt) throws SQLException { stmt.setInt(1, playerObjId); stmt.setInt(2,objIdToBlock); stmt.setString(3, reason); stmt.execute(); } }); } /** * {@inheritDoc} */ @Override public boolean delBlockedUser(final int playerObjId,final int objIdToDelete) { return DB.insertUpdate(DEL_QUERY, new IUStH(){ @Override public void handleInsertUpdate(PreparedStatement stmt) throws SQLException { stmt.setInt(1, playerObjId); stmt.setInt(2,objIdToDelete); stmt.execute(); } }); } /** * {@inheritDoc} */ @Override public BlockList load(final Player player, final World world, final PlayerInitialData playerInitialData) { final Map<Integer, BlockedPlayer> list = new HashMap<Integer, BlockedPlayer>(); DB.select(LOAD_QUERY, new ParamReadStH() { @Override public void handleRead(ResultSet rset) throws SQLException { PlayerDAO playerDao = DAOManager.getDAO(PlayerDAO.class); while (rset.next()) { int blockedOid = rset.getInt("blocked_player"); PlayerCommonData pcd = playerDao.loadPlayerCommonData(blockedOid, world, playerInitialData); if (pcd == null) { log.error("Attempt to load block list for " + player.getName() + " tried to load a player which does not exist: " + blockedOid); } else { list.put(blockedOid, new BlockedPlayer(pcd, rset.getString("reason"))); } } } @Override public void setParams(PreparedStatement stmt) throws SQLException { stmt.setInt(1, player.getObjectId()); } }); return new BlockList(list); } /** * {@inheritDoc} */ @Override public boolean setReason(final int playerObjId, final int blockedPlayerObjId, final String reason) { return DB.insertUpdate(SET_REASON_QUERY, new IUStH(){ @Override public void handleInsertUpdate(PreparedStatement stmt) throws SQLException { stmt.setString(1, reason); stmt.setInt(2, playerObjId); stmt.setInt(3, blockedPlayerObjId); stmt.execute(); } }); } /** * {@inheritDoc} */ @Override public boolean supports(String databaseName, int majorVersion, int minorVersion) { return MySQL5DAOUtils.supports(databaseName, majorVersion, minorVersion); } }