Finising work on transfer information (to and from collections) and delivery confirmation.

This commit is contained in:
marcins78
2012-12-04 14:03:00 +00:00
parent 5c6f2d7779
commit d16b5192d1
19 changed files with 264 additions and 271 deletions

View File

@@ -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<CardCollection.Item> 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<CardCollection.Item> 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<CardCollection.Item> items) {
addItemsToPlayerCollection(_playerDAO.getPlayer(player), collectionType, items);
public void addItemsToPlayerCollection(boolean notifyPlayer, String reason, String player, CollectionType collectionType, Collection<CardCollection.Item> 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);
}
}

View File

@@ -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<String, ? extends CardCollection> consumeUndeliveredPackages(String player);
}

View File

@@ -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<String, ? extends CardCollection> consumePackages(Player player) {
_deliveryLock.writeLock().lock();
try {
return _deliveryDAO.consumeUndeliveredPackages(player.getName());
} finally {
_deliveryLock.writeLock().unlock();
}
}
}

View File

@@ -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<String, ? extends CardCollection> 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);
}

View File

@@ -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<String, ? extends CardCollection> consumeUndeliveredPackages(String player) {
try {
Connection connection = _dbAccess.getDataSource().getConnection();
try {
Map<String, DefaultCardCollection> result = new HashMap<String, DefaultCardCollection>();
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);
}
}
}

View File

@@ -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<String, ? extends CardCollection> consumeUndeliveredPackages(String player) {
try {
Connection connection = _dbAccess.getDataSource().getConnection();
try {
Map<String, DefaultCardCollection> result = new HashMap<String, DefaultCardCollection>();
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;
}
}

View File

@@ -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);
}
}

View File

@@ -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++;
}

View File

@@ -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<LeagueMatchResult> getPlayerMatchesInSerie(League league, LeagueSerieData serie, String player) {

View File

@@ -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++;
}

View File

@@ -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<Player, CardCollection> map = collectionsManager.getPlayersCollection(_collectionType.getCode());
for (Map.Entry<Player, CardCollection> 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++;
}

View File

@@ -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<Player, CardCollection> map = collectionsManager.getPlayersCollection(_collectionType.getCode());
for (Map.Entry<Player, CardCollection> 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++;
}

View File

@@ -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();

View File

@@ -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<CardCollection>() {
@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<CardCollection>() {
@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<Collection<CardCollection.Item>>() {
@Override

View File

@@ -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");
}

View File

@@ -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";

View File

@@ -29,7 +29,7 @@ public class DeliveryResource extends AbstractResource {
public Document getDelivery(
@Context HttpServletRequest request) throws ParserConfigurationException {
Player resourceOwner = getResourceOwnerSafely(request, null);
Map<String, ? extends CardCollection> delivery = _deliveryService.consumePackages(resourceOwner);
Map<String, ? extends CardCollection> delivery = _transferDAO.consumeUndeliveredPackages(resourceOwner.getName());
if (delivery == null)
throw new WebApplicationException(Response.Status.NOT_FOUND);

View File

@@ -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));
}
}

View File

@@ -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,