/*
* 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);
}
}