Finising work on transfer information (to and from collections) and delivery confirmation.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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++;
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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++;
|
||||
}
|
||||
|
||||
@@ -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++;
|
||||
}
|
||||
|
||||
@@ -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++;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user