From: Astrid S. <ast...@us...> - 2008-09-10 21:47:21
|
Update of /cvsroot/arianne/stendhal/src/games/stendhal/server/core/engine In directory sc8-pr-cvs11.sourceforge.net:/tmp/cvs-serv17238/src/games/stendhal/server/core/engine Modified Files: ItemLogger.java StendhalPlayerDatabase.java Log Message: move itemlogger methods to itemlogger Index: StendhalPlayerDatabase.java =================================================================== RCS file: /cvsroot/arianne/stendhal/src/games/stendhal/server/core/engine/StendhalPlayerDatabase.java,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** StendhalPlayerDatabase.java 10 Sep 2008 20:59:47 -0000 1.21 --- StendhalPlayerDatabase.java 10 Sep 2008 21:47:29 -0000 1.22 *************** *** 32,36 **** private static final Logger logger = Logger.getLogger(StendhalPlayerDatabase.class); ! private static final String ATTR_ITEM_LOGID = "logid"; --- 32,36 ---- private static final Logger logger = Logger.getLogger(StendhalPlayerDatabase.class); ! *************** *** 412,523 **** } - public void itemLog(final RPObject item, final RPEntity player, final String event, final String param1, final String param2, final String param3, final String param4) { - if (!item.getRPClass().subclassOf("item")) { - return; - } - - final Transaction transaction = SingletonRepository.getPlayerDatabase().getTransaction(); - try { - - itemLogAssignIDIfNotPresent(transaction, item); - itemLogWriteEntry(transaction, item, player, event, param1, param2, param3, param4); - - transaction.commit(); - } catch (final SQLException e) { - logger.error(e, e); - try { - transaction.rollback(); - } catch (final SQLException e1) { - logger.error(e1, e1); - } - } - } - - /** - * Assigns the next logid to the specified item in case it does not already have one. - * - * @param items item - */ - public void itemLogAssignIDIfNotPresent(final RPObject... items) { - final Transaction transaction = SingletonRepository.getPlayerDatabase().getTransaction(); - try { - for (final RPObject item : items) { - if (item.getRPClass().subclassOf("item")) { - itemLogAssignIDIfNotPresent(transaction, item); - } - } - - transaction.commit(); - } catch (final SQLException e) { - logger.error(e, e); - try { - transaction.rollback(); - } catch (final SQLException e1) { - logger.error(e1, e1); - } - } - } - - /** - * Assigns the next logid to the specified item in case it does not already have one. - * - * @param transaction database transaction - * @param item item - * @throws SQLException in case of a database error - */ - private void itemLogAssignIDIfNotPresent(final Transaction transaction, final RPObject item) throws SQLException { - if (item.has(ATTR_ITEM_LOGID)) { - return; - } - - // increment the last_id value (or initialize it in case that table has 0 rows). - final int count = transaction.getAccessor().execute("UPDATE itemid SET last_id = last_id+1;"); - if (count < 0) { - logger.error("Unexpected return value of execute method: " + count); - } else if (count == 0) { - // Note: This is just a workaround in case the itemid table is empty. - // In case itemlog was emptied, too; this workaround does not work because - // there are still items with higher ids out there. - logger.warn("Initializing itemid table, this may take a few minutes in case this database is not empty."); - transaction.getAccessor().execute("insert into itemid set last_id = (SELECT IFNull(max(itemid) + 1 ,1) FROM itemlog) ;"); - //transaction.getAccessor().execute("INSERT INTO itemid (last_id) SELECT max(itemid) + 1 FROM itemlog;"); - logger.warn("itemid initialized."); - } - - // read last_id from database - final int id = transaction.getAccessor().querySingleCellInt("SELECT last_id FROM itemid"); - item.put(ATTR_ITEM_LOGID, id); - itemLogInsertName(transaction, item); - } - - - /** - * Logs the name of the item on first - * @param transaction - * @param item - * @throws SQLException - */ - private void itemLogInsertName(final Transaction transaction, final RPObject item) throws SQLException { - itemLogWriteEntry(transaction, item, null, "register", getAttribute(item, "name"), getAttribute(item, "quantity"), getAttribute(item, "infostring"), getAttribute(item, "bound")); - } - - private void itemLogWriteEntry(final Transaction transaction, final RPObject item, final RPEntity player, final String event, final String param1, final String param2, final String param3, final String param4) throws SQLException { - String playerName = null; - if (player != null) { - playerName = player.getName(); - } - final String query = "INSERT INTO itemlog (itemid, source, event, " - + "param1, param2, param3, param4) VALUES (" - + item.getInt(ATTR_ITEM_LOGID) + ", '" - + StringChecker.trimAndEscapeSQLString(playerName, 64) + "', '" - + StringChecker.trimAndEscapeSQLString(event, 64) + "', '" - + StringChecker.trimAndEscapeSQLString(param1, 64) + "', '" - + StringChecker.trimAndEscapeSQLString(param2, 64) + "', '" - + StringChecker.trimAndEscapeSQLString(param3, 64) + "', '" - + StringChecker.trimAndEscapeSQLString(param4, 64) + "');"; - - transaction.getAccessor().execute(query); - } - /** * Logs a kill. --- 412,415 ---- *************** *** 589,604 **** } } ! /** ! * gets an optional attribute ! * ! * @param object object to read the optional attribute from ! * @return attribute name of attribute ! */ ! private String getAttribute(final RPObject object, final String attribute) { ! if (object.has(attribute)) { ! return object.get(attribute); ! } else { ! return "null"; ! } ! } } --- 481,484 ---- } } ! } Index: ItemLogger.java =================================================================== RCS file: /cvsroot/arianne/stendhal/src/games/stendhal/server/core/engine/ItemLogger.java,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** ItemLogger.java 12 Jul 2008 14:44:19 -0000 1.22 --- ItemLogger.java 10 Sep 2008 21:47:29 -0000 1.23 *************** *** 1,4 **** --- 1,8 ---- package games.stendhal.server.core.engine; + import java.sql.SQLException; + + import org.apache.log4j.Logger; + import games.stendhal.server.entity.Entity; import games.stendhal.server.entity.PassiveEntity; *************** *** 9,12 **** --- 13,18 ---- import marauroa.common.game.RPObject; import marauroa.common.game.RPSlot; + import marauroa.server.game.db.StringChecker; + import marauroa.server.game.db.Transaction; /** *************** *** 16,21 **** */ public class ItemLogger { - private static final String ATTR_ITEM_LOGID = "logid"; private static String getQuantity(final RPObject item) { --- 22,28 ---- */ public class ItemLogger { private static final String ATTR_ITEM_LOGID = "logid"; + private static final Logger logger = Logger.getLogger(ItemLogger.class); + private static String getQuantity(final RPObject item) { *************** *** 64,68 **** final Player player = (Player) entity; ! ((StendhalPlayerDatabase) SingletonRepository.getPlayerDatabase()).itemLogAssignIDIfNotPresent(oldItem, outlivingItem); final String oldQuantity = getQuantity(oldItem); final String oldOutlivingQuantity = getQuantity(outlivingItem); --- 71,75 ---- final Player player = (Player) entity; ! itemLogAssignIDIfNotPresent(oldItem, outlivingItem); final String oldQuantity = getQuantity(oldItem); final String oldOutlivingQuantity = getQuantity(outlivingItem); *************** *** 78,87 **** } ! private static void itemLog(final RPObject item, final RPEntity player, final String event, final String param1, final String param2, final String param3, final String param4) { ! ((StendhalPlayerDatabase) SingletonRepository.getPlayerDatabase()).itemLog(item, player, event, param1, param2, param3, param4); ! } public static void splitOff(final Player player, final Item item, final StackableItem newItem, final int quantity) { ! ((StendhalPlayerDatabase) SingletonRepository.getPlayerDatabase()).itemLogAssignIDIfNotPresent(item, newItem); final String outlivingQuantity = getQuantity(item); final String newQuantity = getQuantity(newItem); --- 85,92 ---- } ! public static void splitOff(final Player player, final Item item, final StackableItem newItem, final int quantity) { ! itemLogAssignIDIfNotPresent(item, newItem); final String outlivingQuantity = getQuantity(item); final String newQuantity = getQuantity(newItem); *************** *** 91,94 **** --- 96,217 ---- } + public static void itemLog(final RPObject item, final RPEntity player, final String event, final String param1, final String param2, final String param3, final String param4) { + if (!item.getRPClass().subclassOf("item")) { + return; + } + + final Transaction transaction = SingletonRepository.getPlayerDatabase().getTransaction(); + try { + + itemLogAssignIDIfNotPresent(transaction, item); + itemLogWriteEntry(transaction, item, player, event, param1, param2, param3, param4); + + transaction.commit(); + } catch (final SQLException e) { + logger.error(e, e); + try { + transaction.rollback(); + } catch (final SQLException e1) { + logger.error(e1, e1); + } + } + } + + /** + * Assigns the next logid to the specified item in case it does not already have one. + * + * @param items item + */ + public static void itemLogAssignIDIfNotPresent(final RPObject... items) { + final Transaction transaction = SingletonRepository.getPlayerDatabase().getTransaction(); + try { + for (final RPObject item : items) { + if (item.getRPClass().subclassOf("item")) { + itemLogAssignIDIfNotPresent(transaction, item); + } + } + + transaction.commit(); + } catch (final SQLException e) { + logger.error(e, e); + try { + transaction.rollback(); + } catch (final SQLException e1) { + logger.error(e1, e1); + } + } + } + + /** + * Assigns the next logid to the specified item in case it does not already have one. + * + * @param transaction database transaction + * @param item item + * @throws SQLException in case of a database error + */ + private static void itemLogAssignIDIfNotPresent(final Transaction transaction, final RPObject item) throws SQLException { + if (item.has(ATTR_ITEM_LOGID)) { + return; + } + + // increment the last_id value (or initialize it in case that table has 0 rows). + final int count = transaction.getAccessor().execute("UPDATE itemid SET last_id = last_id+1;"); + if (count < 0) { + logger.error("Unexpected return value of execute method: " + count); + } else if (count == 0) { + // Note: This is just a workaround in case the itemid table is empty. + // In case itemlog was emptied, too; this workaround does not work because + // there are still items with higher ids out there. + logger.warn("Initializing itemid table, this may take a few minutes in case this database is not empty."); + transaction.getAccessor().execute("INSERT INTO itemid (last_id) SELECT max(itemid) + 1 FROM itemlog;"); + logger.warn("itemid initialized."); + } + + // read last_id from database + final int id = transaction.getAccessor().querySingleCellInt("SELECT last_id FROM itemid"); + item.put(ATTR_ITEM_LOGID, id); + itemLogInsertName(transaction, item); + } + + /** + * Logs the name of the item on first + * @param transaction + * @param item + * @throws SQLException + */ + private static void itemLogInsertName(final Transaction transaction, final RPObject item) throws SQLException { + itemLogWriteEntry(transaction, item, null, "register", getAttribute(item, "name"), getAttribute(item, "quantity"), getAttribute(item, "infostring"), getAttribute(item, "bound")); + } + + private static void itemLogWriteEntry(final Transaction transaction, final RPObject item, final RPEntity player, final String event, final String param1, final String param2, final String param3, final String param4) throws SQLException { + String playerName = null; + if (player != null) { + playerName = player.getName(); + } + final String query = "INSERT INTO itemlog (itemid, source, event, " + + "param1, param2, param3, param4) VALUES (" + + item.getInt(ATTR_ITEM_LOGID) + ", '" + + StringChecker.trimAndEscapeSQLString(playerName, 64) + "', '" + + StringChecker.trimAndEscapeSQLString(event, 64) + "', '" + + StringChecker.trimAndEscapeSQLString(param1, 64) + "', '" + + StringChecker.trimAndEscapeSQLString(param2, 64) + "', '" + + StringChecker.trimAndEscapeSQLString(param3, 64) + "', '" + + StringChecker.trimAndEscapeSQLString(param4, 64) + "');"; + + transaction.getAccessor().execute(query); + } + /** + * gets an optional attribute + * + * @param object object to read the optional attribute from + * @return attribute name of attribute + */ + private static String getAttribute(final RPObject object, final String attribute) { + if (object.has(attribute)) { + return object.get(attribute); + } else { + return "null"; + } + } /* create name quantity quest-name / killed creature / summon zone x y / summonat target target-slot quantity / olditem |