/* * This program 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. * * This program 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 * this program. If not, see . */ package com.l2jserver.gameserver.model; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import javolution.util.FastList; import javolution.util.FastMap; import com.l2jserver.L2DatabaseFactory; import com.l2jserver.gameserver.datatables.UITable; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.model.entity.ActionKey; /** * * @author mrTJO */ public class L2UIKeysSettings { protected static final Logger _log = Logger.getLogger(L2UIKeysSettings.class.getName()); private final L2PcInstance _player; Map> _storedKeys; Map> _storedCategories; boolean _saved = true; public L2UIKeysSettings(L2PcInstance player) { _player = player; loadFromDB(); } public void storeAll(Map> catMap, Map> keyMap) { _saved = false; _storedCategories = catMap; _storedKeys = keyMap; } public void storeCategories(Map> catMap) { _saved = false; _storedCategories = catMap; } public Map> getCategories() { return _storedCategories; } public void storeKeys(Map> keyMap) { _saved = false; _storedKeys = keyMap; } public Map> getKeys() { return _storedKeys; } public void loadFromDB() { getCatsFromDB(); getKeysFromDB(); } /** * Save Categories and Mapped Keys into GameServer DataBase */ public void saveInDB() { String query; int playerId = _player.getObjectId(); if (_saved) return; query = "REPLACE INTO character_ui_categories (`charId`, `catId`, `order`, `cmdId`) VALUES "; for (int category : _storedCategories.keySet()) { int order = 0; for (int key : _storedCategories.get(category)) { query += "(" + playerId + ", " + category + ", " + (order++) + ", " + key + "),"; } } query = query.substring(0, query.length() - 1) + "; "; Connection con = null; PreparedStatement statement; try { con = L2DatabaseFactory.getInstance().getConnection(); statement = con.prepareStatement(query); statement.execute(); statement.close(); } catch (Exception e) { _log.log(Level.WARNING, "Exception: saveInDB(): " + e.getMessage(), e); } query = "REPLACE INTO character_ui_actions (`charId`, `cat`, `order`, `cmd`, `key`, `tgKey1`, `tgKey2`, `show`) VALUES"; for (List keyLst : _storedKeys.values()) { int order = 0; for (ActionKey key : keyLst) { query += key.getSqlSaveString(playerId, order++) + ","; } } query = query.substring(0, query.length() - 1) + ";"; try { if (con == null) con = L2DatabaseFactory.getInstance().getConnection(); statement = con.prepareStatement(query); statement.execute(); statement.close(); } catch (Exception e) { _log.log(Level.WARNING, "Exception: saveInDB(): " + e.getMessage(), e); } finally { L2DatabaseFactory.close(con); } _saved = true; } public void getCatsFromDB() { if (_storedCategories != null) return; _storedCategories = new FastMap<>(); Connection con = null; try { con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement stmt = con.prepareStatement("SELECT * FROM character_ui_categories WHERE `charId` = ? ORDER BY `catId`, `order`"); stmt.setInt(1, _player.getObjectId()); ResultSet rs = stmt.executeQuery(); while (rs.next()) { int cat = rs.getInt("catId"); int cmd = rs.getInt("cmdId"); insertCategory(cat, cmd); } stmt.close(); rs.close(); } catch (Exception e) { _log.log(Level.WARNING, "Exception: getCatsFromDB(): " + e.getMessage(), e); } finally { L2DatabaseFactory.close(con); } if (_storedCategories.size() < 1) _storedCategories = UITable.getInstance().getCategories(); } public void getKeysFromDB() { if (_storedKeys != null) return; _storedKeys = new FastMap<>(); Connection con = null; try { con = L2DatabaseFactory.getInstance().getConnection(); PreparedStatement stmt = con.prepareStatement("SELECT * FROM character_ui_actions WHERE `charId` = ? ORDER BY `cat`, `order`"); stmt.setInt(1, _player.getObjectId()); ResultSet rs = stmt.executeQuery(); while (rs.next()) { int cat = rs.getInt("cat"); int cmd = rs.getInt("cmd"); int key = rs.getInt("key"); int tgKey1 = rs.getInt("tgKey1"); int tgKey2 = rs.getInt("tgKey2"); int show = rs.getInt("show"); insertKey(cat, cmd, key, tgKey1, tgKey2, show); } stmt.close(); rs.close(); } catch (Exception e) { _log.log(Level.WARNING, "Exception: getKeysFromDB(): " + e.getMessage(), e); } finally { L2DatabaseFactory.close(con); } if (_storedKeys.size() < 1) _storedKeys = UITable.getInstance().getKeys(); } public void insertCategory(int cat, int cmd) { if (_storedCategories.containsKey(cat)) _storedCategories.get(cat).add(cmd); else { List tmp = new FastList<>(); tmp.add(cmd); _storedCategories.put(cat, tmp); } } public void insertKey(int cat, int cmdId, int key, int tgKey1, int tgKey2, int show) { ActionKey tmk = new ActionKey(cat, cmdId, key, tgKey1, tgKey2, show); if (_storedKeys.containsKey(cat)) _storedKeys.get(cat).add(tmk); else { List tmp = new FastList<>(); tmp.add(tmk); _storedKeys.put(cat, tmp); } } public boolean isSaved() { return _saved; } }