/*
* This file is part of aion-unique <aion-unique.org>.
*
* aion-unique 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-unique 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-unique. 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.ArrayList;
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.gameserver.dao.LegionMemberDAO;
import com.aionemu.gameserver.model.PlayerClass;
import com.aionemu.gameserver.model.legion.LegionMember;
import com.aionemu.gameserver.model.legion.LegionMemberEx;
import com.aionemu.gameserver.model.legion.LegionRank;
import com.aionemu.gameserver.services.LegionService;
/**
* Class that that is responsible for loading/storing {@link com.aionemu.gameserver.model.legion.LegionMember} object
* from MySQL 5.
*
* @author Simple
*/
public class MySQL5LegionMemberDAO extends LegionMemberDAO
{
/** Logger */
private static final Logger log = Logger.getLogger(MySQL5LegionMemberDAO.class);
/** LegionMember Queries */
private static final String INSERT_LEGIONMEMBER_QUERY = "INSERT INTO legion_members(`legion_id`, `player_id`, `rank`) VALUES (?, ?, ?)";
private static final String UPDATE_LEGIONMEMBER_QUERY = "UPDATE legion_members SET nickname=?, rank=?, selfintro=? WHERE player_id=?";
private static final String SELECT_LEGIONMEMBER_QUERY = "SELECT * FROM legion_members WHERE player_id = ?";
private static final String DELETE_LEGIONMEMBER_QUERY = "DELETE FROM legion_members WHERE player_id = ?";
private static final String SELECT_LEGIONMEMBERS_QUERY = "SELECT player_id FROM legion_members WHERE legion_id = ?";
/** LegionMemberEx Queries **/
private static final String SELECT_LEGIONMEMBEREX_QUERY = "SELECT players.name, players.exp, players.player_class, players.last_online, players.world_id, legion_members.* FROM players, legion_members WHERE id = ? AND players.id=legion_members.player_id";
private static final String SELECT_LEGIONMEMBEREX2_QUERY = "SELECT players.id, players.exp, players.player_class, players.last_online, players.world_id, legion_members.* FROM players, legion_members WHERE name = ? AND players.id=legion_members.player_id";
/**
* {@inheritDoc}
*/
@Override
public boolean isIdUsed(final int playerObjId)
{
PreparedStatement s = DB
.prepareStatement("SELECT count(id) as cnt FROM legion_members WHERE ? = legion_members.player_id");
try
{
s.setInt(1, playerObjId);
ResultSet rs = s.executeQuery();
rs.next();
return rs.getInt("cnt") > 0;
}
catch(SQLException e)
{
log.error("Can't check if name " + playerObjId + ", is used, returning possitive result", e);
return true;
}
finally
{
DB.close(s);
}
}
/**
* {@inheritDoc}
*/
@Override
public boolean saveNewLegionMember(final LegionMember legionMember)
{
boolean success = DB.insertUpdate(INSERT_LEGIONMEMBER_QUERY, new IUStH(){
@Override
public void handleInsertUpdate(PreparedStatement preparedStatement) throws SQLException
{
preparedStatement.setInt(1, legionMember.getLegion().getLegionId());
preparedStatement.setInt(2, legionMember.getObjectId());
preparedStatement.setString(3, legionMember.getRank().toString());
preparedStatement.execute();
}
});
return success;
}
/**
* {@inheritDoc}
*/
@Override
public void storeLegionMember(final int playerId, final LegionMember legionMember)
{
DB.insertUpdate(UPDATE_LEGIONMEMBER_QUERY, new IUStH(){
@Override
public void handleInsertUpdate(PreparedStatement stmt) throws SQLException
{
stmt.setString(1, legionMember.getNickname());
stmt.setString(2, legionMember.getRank().toString());
stmt.setString(3, legionMember.getSelfIntro());
stmt.setInt(4, playerId);
stmt.execute();
}
});
}
/**
* {@inheritDoc}
*/
@Override
public LegionMember loadLegionMember(final int playerObjId, final LegionService legionService)
{
if(playerObjId == 0)
return null;
final LegionMember legionMember = new LegionMember(playerObjId);
boolean success = DB.select(SELECT_LEGIONMEMBER_QUERY, new ParamReadStH(){
@Override
public void setParams(PreparedStatement stmt) throws SQLException
{
stmt.setInt(1, playerObjId);
}
@Override
public void handleRead(ResultSet resultSet)
{
try
{
resultSet.next();
int legionId = resultSet.getInt("legion_id");
legionMember.setRank(LegionRank.valueOf(resultSet.getString("rank")));
legionMember.setNickname(resultSet.getString("nickname"));
legionMember.setSelfIntro(resultSet.getString("selfintro"));
legionMember.setLegion(legionService.getLegion(legionId));
}
catch(SQLException sqlE)
{
log.debug("[DAO: MySQL5LegionMemberDAO] Player is not in a Legion");
}
}
});
if(success && legionMember.getLegion() != null)
{
return legionMember;
}
else
return null;
}
/**
* {@inheritDoc}
*/
@Override
public LegionMemberEx loadLegionMemberEx(final int playerObjId, final LegionService legionService)
{
final LegionMemberEx legionMemberEx = new LegionMemberEx(playerObjId);
boolean success = DB.select(SELECT_LEGIONMEMBEREX_QUERY, new ParamReadStH(){
@Override
public void setParams(PreparedStatement stmt) throws SQLException
{
stmt.setInt(1, playerObjId);
}
@Override
public void handleRead(ResultSet resultSet)
{
try
{
resultSet.next();
legionMemberEx.setName(resultSet.getString("players.name"));
legionMemberEx.setExp(resultSet.getLong("players.exp"));
legionMemberEx.setPlayerClass(PlayerClass.valueOf(resultSet.getString("players.player_class")));
legionMemberEx.setLastOnline(resultSet.getTimestamp("players.last_online"));
legionMemberEx.setWorldId(resultSet.getInt("players.world_id"));
int legionId = resultSet.getInt("legion_members.legion_id");
legionMemberEx.setRank(LegionRank.valueOf(resultSet.getString("legion_members.rank")));
legionMemberEx.setNickname(resultSet.getString("legion_members.nickname"));
legionMemberEx.setSelfIntro(resultSet.getString("legion_members.selfintro"));
legionMemberEx.setLegion(legionService.getLegion(legionId));
}
catch(SQLException sqlE)
{
log.debug("[DAO: MySQL5LegionMemberDAO] Player is not in a Legion");
}
}
});
if(success && legionMemberEx.getLegion() != null)
{
return legionMemberEx;
}
else
return null;
}
/**
* {@inheritDoc}
*/
@Override
public LegionMemberEx loadLegionMemberEx(final String playerName, final LegionService legionService)
{
final LegionMemberEx legionMember = new LegionMemberEx(playerName);
boolean success = DB.select(SELECT_LEGIONMEMBEREX2_QUERY, new ParamReadStH(){
@Override
public void setParams(PreparedStatement stmt) throws SQLException
{
stmt.setString(1, playerName);
}
@Override
public void handleRead(ResultSet resultSet)
{
try
{
resultSet.next();
legionMember.setObjectId(resultSet.getInt("id"));
legionMember.setExp(resultSet.getLong("exp"));
legionMember.setPlayerClass(PlayerClass.valueOf(resultSet.getString("player_class")));
legionMember.setLastOnline(resultSet.getTimestamp("last_online"));
legionMember.setWorldId(resultSet.getInt("world_id"));
int legionId = resultSet.getInt("legion_id");
legionMember.setRank(LegionRank.valueOf(resultSet.getString("rank")));
legionMember.setNickname(resultSet.getString("nickname"));
legionMember.setSelfIntro(resultSet.getString("selfintro"));
legionMember.setLegion(legionService.getLegion(legionId));
}
catch(SQLException sqlE)
{
log.debug("[DAO: MySQL5LegionMemberDAO] Player is not in a Legion");
}
}
});
if(success && legionMember.getLegion() != null)
{
return legionMember;
}
else
return null;
}
/**
* {@inheritDoc}
*/
@Override
public ArrayList<Integer> loadLegionMembers(final int legionId)
{
final ArrayList<Integer> legionMembers = new ArrayList<Integer>();
boolean success = DB.select(SELECT_LEGIONMEMBERS_QUERY, new ParamReadStH(){
@Override
public void setParams(PreparedStatement stmt) throws SQLException
{
stmt.setInt(1, legionId);
}
@Override
public void handleRead(ResultSet resultSet)
{
try
{
while(resultSet.next())
{
int playerObjId = resultSet.getInt("player_id");
legionMembers.add(playerObjId);
}
}
catch(SQLException sqlE)
{
log.error("[DAO: MySQL5LegionMemberDAO] No players in Legion. DELETE Legion Id: " + legionId);
}
}
});
if(success && legionMembers.size() > 0)
{
return legionMembers;
}
else
return null;
}
/**
* {@inheritDoc}
*/
@Override
public boolean supports(String s, int i, int i1)
{
return MySQL5DAOUtils.supports(s, i, i1);
}
/**
* {@inheritDoc}
*/
@Override
public void deleteLegionMember(int playerObjId)
{
PreparedStatement statement = DB.prepareStatement(DELETE_LEGIONMEMBER_QUERY);
try
{
statement.setInt(1, playerObjId);
}
catch(SQLException e)
{
log.error("Some crap, can't set int parameter to PreparedStatement", e);
}
DB.executeUpdateAndClose(statement);
}
/**
* {@inheritDoc}
*/
@Override
public int[] getUsedIDs()
{
// TODO Auto-generated method stub
return null;
}
}