diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/CollectionsManager.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/CollectionsManager.java index 9afefed11..3800c50da 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/CollectionsManager.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/CollectionsManager.java @@ -22,15 +22,15 @@ public class CollectionsManager { private PlayerDAO _playerDAO; private CollectionDAO _collectionDAO; - private DeliveryService _deliveryService; + private TransferDAO _transferDAO; private CountDownLatch _collectionReadyLatch = new CountDownLatch(1); private DefaultCardCollection _defaultCollection; - public CollectionsManager(PlayerDAO playerDAO, CollectionDAO collectionDAO, DeliveryService deliveryService, final LotroCardBlueprintLibrary lotroCardBlueprintLibrary) { + public CollectionsManager(PlayerDAO playerDAO, CollectionDAO collectionDAO, TransferDAO transferDAO, final LotroCardBlueprintLibrary lotroCardBlueprintLibrary) { _playerDAO = playerDAO; _collectionDAO = collectionDAO; - _deliveryService = deliveryService; + _transferDAO = transferDAO; _defaultCollection = new DefaultCardCollection(); @@ -140,18 +140,18 @@ public class CollectionsManager { } } - public void addPlayerCollection(String player, CollectionType collectionType, CardCollection cardCollection) { - addPlayerCollection(_playerDAO.getPlayer(player), collectionType, cardCollection); + public void addPlayerCollection(boolean notifyPlayer, String reason, String player, CollectionType collectionType, CardCollection cardCollection) { + addPlayerCollection(notifyPlayer, reason, _playerDAO.getPlayer(player), collectionType, cardCollection); } - public void addPlayerCollection(Player player, CollectionType collectionType, CardCollection cardCollection) { + public void addPlayerCollection(boolean notifyPlayer, String reason, Player player, CollectionType collectionType, CardCollection cardCollection) { if (collectionType.getCode().contains("+")) throw new IllegalArgumentException("Invalid collection type: " + collectionType); + _readWriteLock.writeLock().lock(); try { setPlayerCollection(player, collectionType.getCode(), cardCollection); - if (cardCollection.getAll().size() > 0) - addPackage(player, "New collection", collectionType, cardCollection); + _transferDAO.addTransferTo(notifyPlayer, player.getName(), reason, collectionType.getFullName(), cardCollection.getCurrency(), cardCollection); } finally { _readWriteLock.writeLock().unlock(); } @@ -186,10 +186,14 @@ public class CollectionsManager { if (playerCollection == null) return null; MutableCardCollection mutableCardCollection = new DefaultCardCollection(playerCollection); + final CardCollection packContents = mutableCardCollection.openPack(packId, selection, packsStorage); if (packContents != null) { setPlayerCollection(player, collectionType.getCode(), mutableCardCollection); - addPackage(player, "Opened pack", collectionType, packContents); + + String reason = "Opened pack"; + _transferDAO.addTransferFrom(player.getName(), reason, collectionType.getFullName(), 0, cardCollectionFromBlueprintId(1, packId)); + _transferDAO.addTransferTo(true, player.getName(), reason, collectionType.getFullName(), packContents.getCurrency(), packContents); } return packContents; } finally { @@ -197,7 +201,13 @@ public class CollectionsManager { } } - public void addItemsToPlayerCollection(Player player, CollectionType collectionType, Collection items) { + private CardCollection cardCollectionFromBlueprintId(int count, String blueprintId) { + DefaultCardCollection result =new DefaultCardCollection(); + result.addItem(blueprintId, count); + return result; + } + + public void addItemsToPlayerCollection(boolean notifyPlayer, String reason, Player player, CollectionType collectionType, Collection items) { _readWriteLock.writeLock().lock(); try { final CardCollection playerCollection = getPlayerCollection(player, collectionType.getCode()); @@ -210,35 +220,37 @@ public class CollectionsManager { } setPlayerCollection(player, collectionType.getCode(), mutableCardCollection); - addPackage(player, "Items added to collection", collectionType, addedCards); + _transferDAO.addTransferTo(notifyPlayer, player.getName(), reason, collectionType.getFullName(), 0, addedCards); } } finally { _readWriteLock.writeLock().unlock(); } } - public void addItemsToPlayerCollection(String player, CollectionType collectionType, Collection items) { - addItemsToPlayerCollection(_playerDAO.getPlayer(player), collectionType, items); + public void addItemsToPlayerCollection(boolean notifyPlayer, String reason, String player, CollectionType collectionType, Collection items) { + addItemsToPlayerCollection(notifyPlayer, reason, _playerDAO.getPlayer(player), collectionType, items); } - public boolean tradeCards(Player player, CollectionType collectionType, String blueprintId1, int count1, String blueprintId2, int count2, int currencyCost) { + public boolean tradeCards(Player player, CollectionType collectionType, String removeBlueprintId, int removeCount, String addBlueprintId, int addCount, int currencyCost) { _readWriteLock.writeLock().lock(); try { final CardCollection playerCollection = getPlayerCollection(player, collectionType.getCode()); if (playerCollection != null) { MutableCardCollection mutableCardCollection = new DefaultCardCollection(playerCollection); - if (!mutableCardCollection.removeItem(blueprintId1, count1)) + if (!mutableCardCollection.removeItem(removeBlueprintId, removeCount)) return false; if (!mutableCardCollection.removeCurrency(currencyCost)) return false; - mutableCardCollection.addItem(blueprintId2, count2); + mutableCardCollection.addItem(addBlueprintId, addCount); setPlayerCollection(player, collectionType.getCode(), mutableCardCollection); DefaultCardCollection newCards = new DefaultCardCollection(); - newCards.addItem(blueprintId2, count2); + newCards.addItem(addBlueprintId, addCount); - addPackage(player, "Trading items", collectionType, newCards); + String reason = "Trading items"; + _transferDAO.addTransferFrom(player.getName(), reason, collectionType.getFullName(), currencyCost, cardCollectionFromBlueprintId(removeCount, removeBlueprintId)); + _transferDAO.addTransferTo(false, player.getName(), reason, collectionType.getFullName(), 0, cardCollectionFromBlueprintId(addCount, addBlueprintId)); return true; } @@ -260,10 +272,10 @@ public class CollectionsManager { setPlayerCollection(player, collectionType.getCode(), mutableCardCollection); - DefaultCardCollection newCards = new DefaultCardCollection(); - newCards.addItem(blueprintId, 1); + String reason = "Items bought"; + _transferDAO.addTransferFrom(player.getName(), reason, collectionType.getFullName(), currency, new DefaultCardCollection()); + _transferDAO.addTransferTo(true, player.getName(), reason, collectionType.getFullName(), 0, cardCollectionFromBlueprintId(1, blueprintId)); - addPackage(player, "Items bought", collectionType, newCards); return true; } return false; @@ -284,9 +296,9 @@ public class CollectionsManager { setPlayerCollection(player, collectionType.getCode(), mutableCardCollection); - DefaultCardCollection newCurrency = new DefaultCardCollection(); - newCurrency.addCurrency(currency); - addPackage(player, "Selling items", collectionType, newCurrency); + _transferDAO.addTransferFrom(player.getName(), "Selling items", collectionType.getFullName(), 0, cardCollectionFromBlueprintId(1, blueprintId)); + _transferDAO.addTransferTo(true, player.getName(), "Selling items", collectionType.getFullName(), currency, new DefaultCardCollection()); + return true; } return false; @@ -295,11 +307,11 @@ public class CollectionsManager { } } - public void addCurrencyToPlayerCollection(String player, String reason, CollectionType collectionType, int currency) { - addCurrencyToPlayerCollection(_playerDAO.getPlayer(player), reason, collectionType, currency); + public void addCurrencyToPlayerCollection(boolean notifyPlayer, String reason, String player, CollectionType collectionType, int currency) { + addCurrencyToPlayerCollection(notifyPlayer, reason, _playerDAO.getPlayer(player), collectionType, currency); } - public void addCurrencyToPlayerCollection(Player player, String reason, CollectionType collectionType, int currency) { + public void addCurrencyToPlayerCollection(boolean notifyPlayer, String reason, Player player, CollectionType collectionType, int currency) { if (currency > 0) { _readWriteLock.writeLock().lock(); try { @@ -313,7 +325,7 @@ public class CollectionsManager { DefaultCardCollection newCurrency = new DefaultCardCollection(); newCurrency.addCurrency(currency); - addPackage(player, reason, collectionType, newCurrency); + _transferDAO.addTransferTo(notifyPlayer, player.getName(), reason, collectionType.getFullName(), currency, new DefaultCardCollection()); } } finally { _readWriteLock.writeLock().unlock(); @@ -321,7 +333,7 @@ public class CollectionsManager { } } - public boolean removeCurrencyFromPlayerCollection(Player player, CollectionType collectionType, int currency) { + public boolean removeCurrencyFromPlayerCollection(String reason, Player player, CollectionType collectionType, int currency) { _readWriteLock.writeLock().lock(); try { final CardCollection playerCollection = getPlayerCollection(player, collectionType.getCode()); @@ -329,6 +341,9 @@ public class CollectionsManager { MutableCardCollection mutableCardCollection = new DefaultCardCollection(playerCollection); if (mutableCardCollection.removeCurrency(currency)) { setPlayerCollection(player, collectionType.getCode(), mutableCardCollection); + + _transferDAO.addTransferFrom(player.getName(), reason, collectionType.getFullName(), currency, new DefaultCardCollection()); + return true; } } @@ -337,8 +352,4 @@ public class CollectionsManager { _readWriteLock.writeLock().unlock(); } } - - private void addPackage(Player player, String reason, CollectionType collectionType, CardCollection cards) { - _deliveryService.addPackage(player, reason, collectionType.getFullName(), cards); - } } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/DeliveryDAO.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/DeliveryDAO.java deleted file mode 100644 index 0d83d6fb2..000000000 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/DeliveryDAO.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.gempukku.lotro.collection; - -import com.gempukku.lotro.game.CardCollection; - -import java.util.Map; - -public interface DeliveryDAO { - public boolean hasUndeliveredPackages(String player); - public void addPackage(String player, String reason, String name, CardCollection itemCollection); - public Map consumeUndeliveredPackages(String player); -} diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/DeliveryService.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/DeliveryService.java deleted file mode 100644 index c459ddb3c..000000000 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/DeliveryService.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.gempukku.lotro.collection; - -import com.gempukku.lotro.game.CardCollection; -import com.gempukku.lotro.game.Player; - -import java.util.Map; -import java.util.concurrent.locks.ReadWriteLock; -import java.util.concurrent.locks.ReentrantReadWriteLock; - -public class DeliveryService { - private DeliveryDAO _deliveryDAO; - - private ReadWriteLock _deliveryLock = new ReentrantReadWriteLock(false); - - public DeliveryService(DeliveryDAO deliveryDAO) { - _deliveryDAO = deliveryDAO; - } - - public void addPackage(Player player, String reason, String packageName, CardCollection itemCollection) { - _deliveryLock.writeLock().lock(); - try { - _deliveryDAO.addPackage(player.getName(), reason, packageName, itemCollection); - } finally { - _deliveryLock.writeLock().unlock(); - } - } - - public boolean hasUndeliveredPackages(String player) { - _deliveryLock.readLock().lock(); - try { - return _deliveryDAO.hasUndeliveredPackages(player); - } finally { - _deliveryLock.readLock().unlock(); - } - } - - public Map consumePackages(Player player) { - _deliveryLock.writeLock().lock(); - try { - return _deliveryDAO.consumeUndeliveredPackages(player.getName()); - } finally { - _deliveryLock.writeLock().unlock(); - } - } -} diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/TransferDAO.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/TransferDAO.java new file mode 100644 index 000000000..9e4be116b --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/TransferDAO.java @@ -0,0 +1,13 @@ +package com.gempukku.lotro.collection; + +import com.gempukku.lotro.game.CardCollection; + +import java.util.Map; + +public interface TransferDAO { + public boolean hasUndeliveredPackages(String player); + public Map consumeUndeliveredPackages(String player); + + public void addTransferTo(boolean notifyPlayer, String player, String reason, String collectionName, int currency, CardCollection items); + public void addTransferFrom(String player, String reason, String collectionName, int currency, CardCollection items); +} diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/DbDeliveryDAO.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/DbDeliveryDAO.java deleted file mode 100644 index d1ac8320f..000000000 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/DbDeliveryDAO.java +++ /dev/null @@ -1,148 +0,0 @@ -package com.gempukku.lotro.db; - -import com.gempukku.lotro.collection.CollectionSerializer; -import com.gempukku.lotro.collection.DeliveryDAO; -import com.gempukku.lotro.game.CardCollection; -import com.gempukku.lotro.game.DefaultCardCollection; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.sql.*; -import java.util.HashMap; -import java.util.Map; - -public class DbDeliveryDAO implements DeliveryDAO { - private DbAccess _dbAccess; - private CollectionSerializer _collectionSerializer; - - public DbDeliveryDAO(DbAccess dbAccess, CollectionSerializer collectionSerializer) { - _dbAccess = dbAccess; - _collectionSerializer = collectionSerializer; - } - - @Override - public void addPackage(String player, String reason, String name, CardCollection itemCollection) { - try { - Connection connection = _dbAccess.getDataSource().getConnection(); - try { - String sql = "insert into delivery (player, reason, name, date, collection, delivered) values (?, ?, ?, ?, ?, ?)"; - - PreparedStatement statement = connection.prepareStatement(sql); - try { - statement.setString(1, player); - statement.setString(2, reason); - statement.setString(3, name); - statement.setLong(4, System.currentTimeMillis()); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - _collectionSerializer.serializeCollection(itemCollection, baos); - statement.setBlob(5, new ByteArrayInputStream(baos.toByteArray())); - statement.setInt(6, 0); - statement.execute(); - } finally { - statement.close(); - } - } finally { - connection.close(); - } - } catch (SQLException exp) { - throw new RuntimeException("Unable to insert new delivery", exp); - } catch (IOException exp) { - throw new RuntimeException("Unable to insert new delivery", exp); - } - } - - @Override - public boolean hasUndeliveredPackages(String player) { - try { - Connection connection = _dbAccess.getDataSource().getConnection(); - try { - String sql = "select count(*) from delivery where player=? and delivered=0"; - - PreparedStatement statement = connection.prepareStatement(sql); - try { - statement.setString(1, player); - ResultSet resultSet = statement.executeQuery(); - try { - if (resultSet.next()) - return resultSet.getInt(1) > 0; - else - return false; - } finally { - resultSet.close(); - } - } finally { - statement.close(); - } - } finally { - connection.close(); - } - } catch (SQLException exp) { - throw new RuntimeException("Unable to check if there are any undelivered packages", exp); - } - } - - @Override - public Map consumeUndeliveredPackages(String player) { - try { - Connection connection = _dbAccess.getDataSource().getConnection(); - try { - Map result = new HashMap(); - - String sql = "select name, collection from delivery where player=? and delivered=0"; - - PreparedStatement statement = connection.prepareStatement(sql); - try { - statement.setString(1, player); - ResultSet resultSet = statement.executeQuery(); - try { - while (resultSet.next()) { - String name = resultSet.getString(1); - - DefaultCardCollection cardCollection = result.get(name); - if (cardCollection == null) - cardCollection = new DefaultCardCollection(); - - Blob blob = resultSet.getBlob(2); - try { - InputStream inputStream = blob.getBinaryStream(); - try { - CardCollection retrieved = _collectionSerializer.deserializeCollection(inputStream); - cardCollection.addCurrency(retrieved.getCurrency()); - for (CardCollection.Item item : retrieved.getAll().values()) - cardCollection.addItem(item.getBlueprintId(), item.getCount()); - } finally { - inputStream.close(); - } - } finally { - blob.free(); - } - result.put(name, cardCollection); - } - } finally { - resultSet.close(); - } - } finally { - statement.close(); - } - - sql = "update delivery set delivered=1 where player=?"; - statement = connection.prepareStatement(sql); - try { - statement.setString(1, player); - statement.executeUpdate(); - } finally { - statement.close(); - } - return result; - } finally { - connection.close(); - } - } catch (SQLException exp) { - throw new RuntimeException("Unable to consume undelivered packages", exp); - } catch (IOException exp) { - throw new RuntimeException("Unable to consume undelivered packages", exp); - } - } -} diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/DbTransferDAO.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/DbTransferDAO.java new file mode 100644 index 000000000..0e51c6a63 --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/DbTransferDAO.java @@ -0,0 +1,178 @@ +package com.gempukku.lotro.db; + +import com.gempukku.lotro.collection.TransferDAO; +import com.gempukku.lotro.game.CardCollection; +import com.gempukku.lotro.game.DefaultCardCollection; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; + +public class DbTransferDAO implements TransferDAO { + private DbAccess _dbAccess; + + public DbTransferDAO(DbAccess dbAccess) { + _dbAccess = dbAccess; + } + + @Override + public void addTransferFrom(String player, String reason, String collectionName, int currency, CardCollection items) { + if (currency>0 || items.getAll().size()>0) { + try { + Connection connection = _dbAccess.getDataSource().getConnection(); + try { + String sql = "insert into transfer (notify, player, reason, name, currency, collection, direction) values (?, ?, ?, ?, ?, ?, 'from')"; + + PreparedStatement statement = connection.prepareStatement(sql); + try { + statement.setInt(1, 0); + statement.setString(2, player); + statement.setString(3, reason); + statement.setString(4, collectionName); + statement.setInt(5, currency); + statement.setString(6, serializeCollection(items)); + statement.execute(); + } finally { + statement.close(); + } + } finally { + connection.close(); + } + } catch (SQLException exp) { + throw new RuntimeException("Unable to add transfer from", exp); + } + } + } + + @Override + public void addTransferTo(boolean notifyPlayer, String player, String reason, String collectionName, int currency, CardCollection items) { + if (currency > 0 || items.getAll().size() > 0) { + try { + Connection connection = _dbAccess.getDataSource().getConnection(); + try { + String sql = "insert into transfer (notify, player, reason, name, currency, collection, direction) values (?, ?, ?, ?, ?, ?, 'to')"; + + PreparedStatement statement = connection.prepareStatement(sql); + try { + statement.setInt(1, notifyPlayer ? 1 : 0); + statement.setString(2, player); + statement.setString(3, reason); + statement.setString(4, collectionName); + statement.setInt(5, currency); + statement.setString(6, serializeCollection(items)); + statement.execute(); + } finally { + statement.close(); + } + } finally { + connection.close(); + } + } catch (SQLException exp) { + throw new RuntimeException("Unable to add transfer to", exp); + } + } + } + + @Override + public boolean hasUndeliveredPackages(String player) { + try { + Connection connection = _dbAccess.getDataSource().getConnection(); + try { + String sql = "select count(*) from transfer where player=? and notify=1"; + + PreparedStatement statement = connection.prepareStatement(sql); + try { + statement.setString(1, player); + ResultSet resultSet = statement.executeQuery(); + try { + if (resultSet.next()) + return resultSet.getInt(1) > 0; + else + return false; + } finally { + resultSet.close(); + } + } finally { + statement.close(); + } + } finally { + connection.close(); + } + } catch (SQLException exp) { + throw new RuntimeException("Unable to check if there are any undelivered packages", exp); + } + } + + @Override + public Map consumeUndeliveredPackages(String player) { + try { + Connection connection = _dbAccess.getDataSource().getConnection(); + try { + Map result = new HashMap(); + + String sql = "select name, currency, collection from transfer where player=? and notify=1"; + + PreparedStatement statement = connection.prepareStatement(sql); + try { + statement.setString(1, player); + ResultSet resultSet = statement.executeQuery(); + try { + while (resultSet.next()) { + String name = resultSet.getString(1); + + DefaultCardCollection cardCollection = result.get(name); + if (cardCollection == null) + cardCollection = new DefaultCardCollection(); + + cardCollection.addCurrency(resultSet.getInt(2)); + CardCollection retrieved = deserializeCollection(resultSet.getString(3)); + for (CardCollection.Item item : retrieved.getAll().values()) + cardCollection.addItem(item.getBlueprintId(), item.getCount()); + result.put(name, cardCollection); + } + } finally { + resultSet.close(); + } + } finally { + statement.close(); + } + + sql = "update transfer set notify=0 where player=?"; + statement = connection.prepareStatement(sql); + try { + statement.setString(1, player); + statement.executeUpdate(); + } finally { + statement.close(); + } + return result; + } finally { + connection.close(); + } + } catch (SQLException exp) { + throw new RuntimeException("Unable to consume undelivered packages", exp); + } + } + + private String serializeCollection(CardCollection cardCollection) { + StringBuilder sb = new StringBuilder(); + for (CardCollection.Item item : cardCollection.getAll().values()) + sb.append(item.getCount()).append("x").append(item.getBlueprintId()).append(","); + return sb.toString(); + } + + private CardCollection deserializeCollection(String collection) { + DefaultCardCollection cardCollection = new DefaultCardCollection(); + for (String item : collection.split(",")) { + String[] itemSplit = item.split("x", 2); + int count = Integer.parseInt(itemSplit[0]); + String blueprintId = itemSplit[1]; + cardCollection.addItem(blueprintId, count); + } + + return cardCollection; + } +} diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft/DefaultDraft.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft/DefaultDraft.java index fccab292c..5bbd664f8 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft/DefaultDraft.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/draft/DefaultDraft.java @@ -44,7 +44,7 @@ public class DefaultDraft implements Draft { CardCollection fixedCollection = _draftPack.getFixedCollection(); for (String player : _players) - _collectionsManager.addPlayerCollection(player, _collectionType, fixedCollection); + _collectionsManager.addPlayerCollection(false, "New draft fixed collection", player, _collectionType, fixedCollection); } @Override @@ -98,7 +98,7 @@ public class DefaultDraft implements Draft { MutableCardCollection cardChoice = _cardChoice.get(playerName); if (cardChoice != null) { if (cardChoice.removeItem(cardId, 1)) { - _collectionsManager.addItemsToPlayerCollection(playerName, _collectionType, Arrays.asList(CardCollection.Item.createItem(cardId, 1))); + _collectionsManager.addItemsToPlayerCollection(false, "Pick in draft", playerName, _collectionType, Arrays.asList(CardCollection.Item.createItem(cardId, 1))); _cardChoice.remove(playerName); } } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/ConstructedLeagueData.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/ConstructedLeagueData.java index e286342cf..711d27e1c 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/ConstructedLeagueData.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/ConstructedLeagueData.java @@ -59,7 +59,7 @@ public class ConstructedLeagueData implements LeagueData { for (PlayerStanding leagueStanding : leagueStandings) { CardCollection leaguePrize = _leaguePrizes.getPrizeForLeague(leagueStanding.getStanding(), leagueStandings.size(), _prizeMultiplier); if (leaguePrize != null) - collectionsManager.addItemsToPlayerCollection(leagueStanding.getPlayerName(), _prizeCollectionType, leaguePrize.getAll().values()); + collectionsManager.addItemsToPlayerCollection(true, "End of league prizes", leagueStanding.getPlayerName(), _prizeCollectionType, leaguePrize.getAll().values()); } status++; } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeagueService.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeagueService.java index 85b06a08e..ada70657e 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeagueService.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/LeagueService.java @@ -94,7 +94,7 @@ public class LeagueService { if (isPlayerInLeague(league, player)) return false; int cost = league.getCost(); - if (_collectionsManager.removeCurrencyFromPlayerCollection(player, new CollectionType("permanent", "My cards"), cost)) { + if (_collectionsManager.removeCurrencyFromPlayerCollection("Joining "+league.getName()+" league", player, new CollectionType("permanent", "My cards"), cost)) { _leagueParticipationDAO.userJoinsLeague(league.getType(), player, remoteAddr); league.getLeagueData().joinLeague(_collectionsManager, player, DateUtils.getCurrentDate()); @@ -160,7 +160,7 @@ public class LeagueService { else prize = serie.getPrizeForLeagueMatchLoser(count, playerMatchesPlayedOn.size()); if (prize != null) - _collectionsManager.addItemsToPlayerCollection(player, new CollectionType("permanent", "My cards"), prize.getAll().values()); + _collectionsManager.addItemsToPlayerCollection(true, "Prize for winning league game", player, new CollectionType("permanent", "My cards"), prize.getAll().values()); } public synchronized Collection getPlayerMatchesInSerie(League league, LeagueSerieData serie, String player) { diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewConstructedLeagueData.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewConstructedLeagueData.java index 314a017af..f3e9367e5 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewConstructedLeagueData.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewConstructedLeagueData.java @@ -63,7 +63,7 @@ public class NewConstructedLeagueData implements LeagueData { for (PlayerStanding leagueStanding : leagueStandings) { CardCollection leaguePrize = _leaguePrizes.getPrizeForLeague(leagueStanding.getStanding(), leagueStandings.size(), _prizeMultiplier); if (leaguePrize != null) - collectionsManager.addItemsToPlayerCollection(leagueStanding.getPlayerName(), _prizeCollectionType, leaguePrize.getAll().values()); + collectionsManager.addItemsToPlayerCollection(true, "End of league prizes", leagueStanding.getPlayerName(), _prizeCollectionType, leaguePrize.getAll().values()); } status++; } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewSealedLeagueData.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewSealedLeagueData.java index 9cd30a5a8..2ee7c17b7 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewSealedLeagueData.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/NewSealedLeagueData.java @@ -60,7 +60,7 @@ public class NewSealedLeagueData implements LeagueData { startingCollection.addItem(serieCollectionItem.getKey(), serieCollectionItem.getValue().getCount()); } } - collectionManager.addPlayerCollection(player, _collectionType, startingCollection); + collectionManager.addPlayerCollection(true, "Sealed league product", player, _collectionType, startingCollection); return startingCollection; } @@ -74,7 +74,7 @@ public class NewSealedLeagueData implements LeagueData { CardCollection leagueProduct = _leagueProduct.getCollectionForSerie(_leagueType.getSealedCode(), i); Map map = collectionsManager.getPlayersCollection(_collectionType.getCode()); for (Map.Entry playerCardCollectionEntry : map.entrySet()) { - collectionsManager.addItemsToPlayerCollection(playerCardCollectionEntry.getKey(), _collectionType, leagueProduct.getAll().values()); + collectionsManager.addItemsToPlayerCollection(true, "New sealed league product", playerCardCollectionEntry.getKey(), _collectionType, leagueProduct.getAll().values()); } status = i + 1; } @@ -86,7 +86,7 @@ public class NewSealedLeagueData implements LeagueData { for (PlayerStanding leagueStanding : leagueStandings) { CardCollection leaguePrize = _leaguePrizes.getPrizeForLeague(leagueStanding.getStanding(), leagueStandings.size(), 1f); if (leaguePrize != null) - collectionsManager.addItemsToPlayerCollection(leagueStanding.getPlayerName(), _prizeCollectionType, leaguePrize.getAll().values()); + collectionsManager.addItemsToPlayerCollection(true, "End of league prizes", leagueStanding.getPlayerName(), _prizeCollectionType, leaguePrize.getAll().values()); } status++; } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SealedLeagueData.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SealedLeagueData.java index 16e1445a7..b0db14ba3 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SealedLeagueData.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/league/SealedLeagueData.java @@ -60,7 +60,7 @@ public class SealedLeagueData implements LeagueData { startingCollection.addItem(serieCollectionItem.getKey(), serieCollectionItem.getValue().getCount()); } } - collectionManager.addPlayerCollection(player, _collectionType, startingCollection); + collectionManager.addPlayerCollection(true, "Sealed league product", player, _collectionType, startingCollection); return startingCollection; } @@ -74,7 +74,7 @@ public class SealedLeagueData implements LeagueData { CardCollection leagueProduct = _leagueProduct.getCollectionForSerie(_format, i); Map map = collectionsManager.getPlayersCollection(_collectionType.getCode()); for (Map.Entry playerCardCollectionEntry : map.entrySet()) { - collectionsManager.addItemsToPlayerCollection(playerCardCollectionEntry.getKey(), _collectionType, leagueProduct.getAll().values()); + collectionsManager.addItemsToPlayerCollection(true, "New sealed league product", playerCardCollectionEntry.getKey(), _collectionType, leagueProduct.getAll().values()); } status = i + 1; } @@ -86,7 +86,7 @@ public class SealedLeagueData implements LeagueData { for (PlayerStanding leagueStanding : leagueStandings) { CardCollection leaguePrize = _leaguePrizes.getPrizeForLeague(leagueStanding.getStanding(), leagueStandings.size(), 1f); if (leaguePrize != null) - collectionsManager.addItemsToPlayerCollection(leagueStanding.getPlayerName(), _prizeCollectionType, leaguePrize.getAll().values()); + collectionsManager.addItemsToPlayerCollection(true, "End of league prizes", leagueStanding.getPlayerName(), _prizeCollectionType, leaguePrize.getAll().values()); } status++; } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/SingleEliminationRecurringQueue.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/SingleEliminationRecurringQueue.java index f94906cf2..bc426daa2 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/SingleEliminationRecurringQueue.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/tournament/SingleEliminationRecurringQueue.java @@ -84,7 +84,7 @@ public class SingleEliminationRecurringQueue implements TournamentQueue { @Override public synchronized void joinPlayer(CollectionsManager collectionsManager, Player player, LotroDeck deck) { if (!_players.contains(player.getName()) && _players.size() < _playerCap) { - if (_cost <= 0 || collectionsManager.removeCurrencyFromPlayerCollection(player, _currencyCollection, _cost)) { + if (_cost <= 0 || collectionsManager.removeCurrencyFromPlayerCollection("Joined "+getTournamentQueueName()+" queue", player, _currencyCollection, _cost)) { _players.add(player.getName()); if (_requiresDeck) _playerDecks.put(player.getName(), deck); @@ -101,7 +101,7 @@ public class SingleEliminationRecurringQueue implements TournamentQueue { public synchronized void leavePlayer(CollectionsManager collectionsManager, Player player) { if (_players.contains(player.getName())) { if (_cost > 0) - collectionsManager.addCurrencyToPlayerCollection(player, "Return for leaving queue", _currencyCollection, _cost); + collectionsManager.addCurrencyToPlayerCollection(true, "Return for leaving "+getTournamentQueueName()+" queue", player, _currencyCollection, _cost); _players.remove(player.getName()); _playerDecks.remove(player.getName()); } @@ -111,7 +111,7 @@ public class SingleEliminationRecurringQueue implements TournamentQueue { public synchronized void leaveAllPlayers(CollectionsManager collectionsManager) { if (_cost > 0) { for (String player : _players) - collectionsManager.addCurrencyToPlayerCollection(player, "Return for leaving queue", _currencyCollection, _cost); + collectionsManager.addCurrencyToPlayerCollection(false, "Return for leaving "+getTournamentQueueName()+" queue", player, _currencyCollection, _cost); } _players.clear(); _playerDecks.clear(); diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/league/SealedLeagueDataTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/league/SealedLeagueDataTest.java index 3a641e1e0..a02f873b2 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/league/SealedLeagueDataTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/league/SealedLeagueDataTest.java @@ -25,7 +25,7 @@ public class SealedLeagueDataTest { CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class); Player player = new Player(1, "Test", "A", null); data.joinLeague(collectionsManager, player, i); - Mockito.verify(collectionsManager, new Times(1)).addPlayerCollection(Mockito.eq(player), Mockito.eq(collectionType), Mockito.argThat( + Mockito.verify(collectionsManager, new Times(1)).addPlayerCollection(Mockito.anyBoolean(), Mockito.anyString(), Mockito.eq(player), Mockito.eq(collectionType), Mockito.argThat( new BaseMatcher() { @Override public void describeTo(Description description) { @@ -60,7 +60,7 @@ public class SealedLeagueDataTest { CollectionsManager collectionsManager = Mockito.mock(CollectionsManager.class); Player player = new Player(1, "Test", "A", null); data.joinLeague(collectionsManager, player, i); - Mockito.verify(collectionsManager, new Times(1)).addPlayerCollection(Mockito.eq(player), Mockito.eq(collectionType), Mockito.argThat( + Mockito.verify(collectionsManager, new Times(1)).addPlayerCollection(Mockito.anyBoolean(), Mockito.anyString(), Mockito.eq(player), Mockito.eq(collectionType), Mockito.argThat( new BaseMatcher() { @Override public void describeTo(Description description) { @@ -135,7 +135,7 @@ public class SealedLeagueDataTest { expectedToAdd.add(CardCollection.Item.createItem("MoM - Booster", 3)); expectedToAdd.add(CardCollection.Item.createItem("2_51", 1)); Mockito.verify(collectionsManager, new Times(1)).getPlayersCollection("test"); - Mockito.verify(collectionsManager, new Times(1)).addItemsToPlayerCollection(Mockito.eq(player), Mockito.eq(collectionType), + Mockito.verify(collectionsManager, new Times(1)).addItemsToPlayerCollection(Mockito.anyBoolean(), Mockito.anyString(), Mockito.eq(player), Mockito.eq(collectionType), Mockito.argThat( new ArgumentMatcher>() { @Override diff --git a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/AbstractResource.java b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/AbstractResource.java index c39ba8ea5..ea13fc11f 100644 --- a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/AbstractResource.java +++ b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/AbstractResource.java @@ -3,7 +3,7 @@ package com.gempukku.lotro.server; import com.gempukku.lotro.DateUtils; import com.gempukku.lotro.PlayerLock; import com.gempukku.lotro.collection.CollectionsManager; -import com.gempukku.lotro.collection.DeliveryService; +import com.gempukku.lotro.collection.TransferDAO; import com.gempukku.lotro.db.PlayerDAO; import com.gempukku.lotro.db.vo.CollectionType; import com.gempukku.lotro.game.Player; @@ -23,7 +23,7 @@ public abstract class AbstractResource { protected CollectionsManager _collectionManager; @Context - protected DeliveryService _deliveryService; + protected TransferDAO _transferDAO; protected final void processLoginReward(HttpServletRequest request) throws Exception { String logged = getLoggedUser(request); @@ -36,11 +36,11 @@ public abstract class AbstractResource { Integer lastReward = player.getLastLoginReward(); if (lastReward == null) { _playerDao.setLastReward(player, latestMonday); - _collectionManager.addCurrencyToPlayerCollection(player, "Initial currency balance", new CollectionType("permanent", "My cards"), 20000); + _collectionManager.addCurrencyToPlayerCollection(true, "Initial currency balance", player, new CollectionType("permanent", "My cards"), 20000); } else { if (latestMonday != lastReward) { if (_playerDao.updateLastReward(player, lastReward, latestMonday)) - _collectionManager.addCurrencyToPlayerCollection(player, "Weekly currency reward", new CollectionType("permanent", "My cards"), 5000); + _collectionManager.addCurrencyToPlayerCollection(true, "Weekly activity reward", player, new CollectionType("permanent", "My cards"), 5000); } } } @@ -49,7 +49,7 @@ public abstract class AbstractResource { protected final void processDeliveryServiceNotification(HttpServletRequest request, HttpServletResponse response) { String logged = getLoggedUser(request); - if (logged != null && _deliveryService.hasUndeliveredPackages(logged)) + if (logged != null && _transferDAO.hasUndeliveredPackages(logged)) response.addHeader("Delivery-Service-Package", "true"); } diff --git a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/AdminResource.java b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/AdminResource.java index 35c75d278..6764fdeb2 100644 --- a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/AdminResource.java +++ b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/AdminResource.java @@ -279,7 +279,7 @@ public class AdminResource extends AbstractResource { for (String playerName : playerNames) { Player player = _playerDao.getPlayer(playerName); - _collectionsManager.addItemsToPlayerCollection(player, createCollectionType(collectionType), productItems); + _collectionsManager.addItemsToPlayerCollection(true, "Administrator action", player, createCollectionType(collectionType), productItems); } return "OK"; diff --git a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/DeliveryResource.java b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/DeliveryResource.java index a63e4f968..55243c1bc 100644 --- a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/DeliveryResource.java +++ b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/DeliveryResource.java @@ -29,7 +29,7 @@ public class DeliveryResource extends AbstractResource { public Document getDelivery( @Context HttpServletRequest request) throws ParserConfigurationException { Player resourceOwner = getResourceOwnerSafely(request, null); - Map delivery = _deliveryService.consumePackages(resourceOwner); + Map delivery = _transferDAO.consumeUndeliveredPackages(resourceOwner.getName()); if (delivery == null) throw new WebApplicationException(Response.Status.NOT_FOUND); diff --git a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/provider/DaoBuilder.java b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/provider/DaoBuilder.java index c813cd521..79d5c3849 100644 --- a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/provider/DaoBuilder.java +++ b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/provider/DaoBuilder.java @@ -1,7 +1,7 @@ package com.gempukku.lotro.server.provider; import com.gempukku.lotro.collection.CollectionSerializer; -import com.gempukku.lotro.collection.DeliveryDAO; +import com.gempukku.lotro.collection.TransferDAO; import com.gempukku.lotro.db.*; import com.gempukku.lotro.game.LotroCardBlueprintLibrary; import com.gempukku.lotro.tournament.TournamentDAO; @@ -29,6 +29,6 @@ public class DaoBuilder { objectMap.put(DeckDAO.class, new DbDeckDAO(dbAccess, library)); objectMap.put(CollectionDAO.class, new DbCollectionDAO(dbAccess, collectionSerializer)); objectMap.put(PlayerDAO.class, new DbPlayerDAO(dbAccess)); - objectMap.put(DeliveryDAO.class, new DbDeliveryDAO(dbAccess, collectionSerializer)); + objectMap.put(TransferDAO.class, new DbTransferDAO(dbAccess)); } } diff --git a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/provider/ServerBuilder.java b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/provider/ServerBuilder.java index be99bb0e8..9aa987dee 100644 --- a/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/provider/ServerBuilder.java +++ b/gemp-lotr/gemp-lotr-web-server/src/main/java/com/gempukku/lotro/server/provider/ServerBuilder.java @@ -2,8 +2,7 @@ package com.gempukku.lotro.server.provider; import com.gempukku.lotro.chat.ChatServer; import com.gempukku.lotro.collection.CollectionsManager; -import com.gempukku.lotro.collection.DeliveryDAO; -import com.gempukku.lotro.collection.DeliveryService; +import com.gempukku.lotro.collection.TransferDAO; import com.gempukku.lotro.db.*; import com.gempukku.lotro.game.GameHistoryService; import com.gempukku.lotro.game.GameRecorder; @@ -33,15 +32,11 @@ public class ServerBuilder { new GameRecorder( extract(objectMap, GameHistoryService.class))); - objectMap.put(DeliveryService.class, - new DeliveryService( - extract(objectMap, DeliveryDAO.class))); - objectMap.put(CollectionsManager.class, new CollectionsManager( extract(objectMap, PlayerDAO.class), extract(objectMap, CollectionDAO.class), - extract(objectMap, DeliveryService.class), + extract(objectMap, TransferDAO.class), extract(objectMap, LotroCardBlueprintLibrary.class))); objectMap.put(LeagueService.class,