From 6e2edbf1c2cddbe9597f73aeb81ebfed6f8ce7ed Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Mon, 9 Jan 2012 02:38:32 +0000 Subject: [PATCH] - Player owned cards can now be used in casual games, in addition to the normal ones. --- .../com/gempukku/lotro/ServerManagement.java | 5 ++-- .../com/gempukku/lotro/db/CollectionDAO.java | 4 +-- .../java/com/gempukku/lotro/db/LeagueDAO.java | 5 ++-- .../gempukku/lotro/game/CardCollection.java | 4 ++- .../lotro/game/DefaultCardCollection.java | 8 ++++++ .../gempukku/lotro/game/OwnershipCheck.java | 5 ++++ .../com/gempukku/lotro/hall/HallServer.java | 25 +++++++++++-------- .../lotro/hall/MergedOwnershipCheck.java | 19 ++++++++++++++ .../gempukku/lotro/server/DaoProvider.java | 7 ++++-- .../src/main/webapp/includes/changeLog.html | 3 +++ 10 files changed, 64 insertions(+), 21 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/OwnershipCheck.java create mode 100644 gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/MergedOwnershipCheck.java diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/ServerManagement.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/ServerManagement.java index 35279a959..6cbea349b 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/ServerManagement.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/ServerManagement.java @@ -1,5 +1,6 @@ package com.gempukku.lotro; +import com.gempukku.lotro.collection.CollectionSerializer; import com.gempukku.lotro.db.DbAccess; import com.gempukku.lotro.db.LeagueDAO; import com.gempukku.lotro.db.vo.League; @@ -22,7 +23,7 @@ public class ServerManagement { } private static void addLeague(DbAccess dbAccess) throws IOException, SQLException { - LeagueDAO leagueDao = new LeagueDAO(dbAccess); + LeagueDAO leagueDao = new LeagueDAO(dbAccess, new CollectionSerializer()); DefaultCardCollection collection = new DefaultCardCollection(); collection.addItem("FotR - League Starter", 1); @@ -30,7 +31,7 @@ public class ServerManagement { } private static League getLeague(DbAccess dbAccess, String leagueType) { - LeagueDAO leagueDao = new LeagueDAO(dbAccess); + LeagueDAO leagueDao = new LeagueDAO(dbAccess, new CollectionSerializer()); for (League league : leagueDao.getActiveLeagues()) { if (league.getType().equals(leagueType)) return league; diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/CollectionDAO.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/CollectionDAO.java index 415801c1f..de4bf88fa 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/CollectionDAO.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/CollectionDAO.java @@ -20,9 +20,9 @@ public class CollectionDAO { private Map> _collections = new ConcurrentHashMap>(); - public CollectionDAO(DbAccess dbAccess) { + public CollectionDAO(DbAccess dbAccess, CollectionSerializer collectionSerializer) { _dbAccess = dbAccess; - _collectionSerializer = new CollectionSerializer(); + _collectionSerializer = collectionSerializer; } public void clearCache() { diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/LeagueDAO.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/LeagueDAO.java index 70b9450f2..b0cfd101a 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/LeagueDAO.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/LeagueDAO.java @@ -20,10 +20,9 @@ public class LeagueDAO { private int _dateLoaded; private Set _activeLeagues = new HashSet(); - public LeagueDAO(DbAccess dbAccess) { + public LeagueDAO(DbAccess dbAccess, CollectionSerializer serializer) { _dbAccess = dbAccess; - - _serializer = new CollectionSerializer(); + _serializer = serializer; } public void clearCache() { diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/CardCollection.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/CardCollection.java index 87afe13f9..630c91a56 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/CardCollection.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/CardCollection.java @@ -3,9 +3,11 @@ package com.gempukku.lotro.game; import java.util.List; import java.util.Map; -public interface CardCollection { +public interface CardCollection extends OwnershipCheck { public Map getAll(); + public int getItemCount(String blueprintId); + public List getItems(String filter, LotroCardBlueprintLibrary library); public static class Item { diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/DefaultCardCollection.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/DefaultCardCollection.java index 5c4fe92fd..d191c0807 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/DefaultCardCollection.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/DefaultCardCollection.java @@ -176,6 +176,14 @@ public class DefaultCardCollection implements MutableCardCollection { return Collections.unmodifiableMap(_counts); } + @Override + public int getItemCount(String blueprintId) { + Integer count = _counts.get(blueprintId); + if (count == null) + return 0; + return count; + } + @Override public List getItems(String filter, LotroCardBlueprintLibrary library) { if (filter == null) diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/OwnershipCheck.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/OwnershipCheck.java new file mode 100644 index 000000000..0a5132934 --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/OwnershipCheck.java @@ -0,0 +1,5 @@ +package com.gempukku.lotro.game; + +public interface OwnershipCheck { + public int getItemCount(String blueprintId); +} diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java index c3aec38ce..ecd032b3b 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java @@ -226,24 +226,27 @@ public class HallServer extends AbstractServer { } // Now check if player owns all the cards - CardCollection collection; - if (collectionType.getCode().equals("default")) - collection = _lotroServer.getDefaultCollection(); - else - collection = _collectionDao.getCollectionForPlayer(player, collectionType.getCode()); + OwnershipCheck ownershipCheck; + if (collectionType.getCode().equals("default")) { + // Merging player-owned cards in collection with the default one (containing all basic cards) + MutableCardCollection ownedCollection = _collectionDao.getCollectionForPlayer(player, "permanent"); + if (ownedCollection != null) + ownershipCheck = new MergedOwnershipCheck(_lotroServer.getDefaultCollection(), ownedCollection); + else + ownershipCheck = _lotroServer.getDefaultCollection(); + } else + ownershipCheck = _collectionDao.getCollectionForPlayer(player, collectionType.getCode()); - if (collection == null) + if (ownershipCheck == null) throw new HallException("You don't have cards in the required collection to play in this format"); Map deckCardCounts = CollectionUtils.getTotalCardCountForDeck(lotroDeck); - final Map collectionCardCounts = collection.getAll(); for (Map.Entry cardCount : deckCardCounts.entrySet()) { - final Integer collectionCount = collectionCardCounts.get(cardCount.getKey()); - if (collectionCount == null || collectionCount < cardCount.getValue()) { + final int collectionCount = ownershipCheck.getItemCount(cardCount.getKey()); + if (collectionCount < cardCount.getValue()) { String cardName = _library.getLotroCardBlueprint(cardCount.getKey()).getName(); - int owned = (collectionCount == null) ? 0 : collectionCount; - throw new HallException("You don't have the required cards in collection: " + cardName + " required " + cardCount.getValue() + ", owned " + owned); + throw new HallException("You don't have the required cards in collection: " + cardName + " required " + cardCount.getValue() + ", owned " + collectionCount); } } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/MergedOwnershipCheck.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/MergedOwnershipCheck.java new file mode 100644 index 000000000..ac343cc81 --- /dev/null +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/MergedOwnershipCheck.java @@ -0,0 +1,19 @@ +package com.gempukku.lotro.hall; + +import com.gempukku.lotro.game.OwnershipCheck; + +public class MergedOwnershipCheck implements OwnershipCheck { + private OwnershipCheck[] _ownershipChecks; + + public MergedOwnershipCheck(OwnershipCheck... ownershipChecks) { + _ownershipChecks = ownershipChecks; + } + + @Override + public int getItemCount(String blueprintId) { + int count = 0; + for (OwnershipCheck ownershipCheck : _ownershipChecks) + count += ownershipCheck.getItemCount(blueprintId); + return count; + } +} diff --git a/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/DaoProvider.java b/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/DaoProvider.java index df6711e46..f45ab0c56 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/DaoProvider.java +++ b/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/DaoProvider.java @@ -1,5 +1,6 @@ package com.gempukku.lotro.server; +import com.gempukku.lotro.collection.CollectionSerializer; import com.gempukku.lotro.db.*; import com.sun.jersey.core.spi.component.ComponentContext; import com.sun.jersey.core.spi.component.ComponentScope; @@ -23,9 +24,11 @@ public class DaoProvider implements InjectableProvider { private Injectable _leaguePointsDAOInjectable; private DbAccess _dbAccess; + private CollectionSerializer _collectionSerializer; public DaoProvider() { _dbAccess = new DbAccess(); + _collectionSerializer = new CollectionSerializer(); } @Override @@ -90,7 +93,7 @@ public class DaoProvider implements InjectableProvider { private synchronized Injectable getLeagueDaoSafely() { if (_leagueDaoInjectable == null) { - final LeagueDAO leagueDao = new LeagueDAO(_dbAccess); + final LeagueDAO leagueDao = new LeagueDAO(_dbAccess, _collectionSerializer); _leagueDaoInjectable = new Injectable() { @Override public LeagueDAO getValue() { @@ -129,7 +132,7 @@ public class DaoProvider implements InjectableProvider { private synchronized Injectable getCollectionDaoSafely() { if (_collectionDaoInjectable == null) { - final CollectionDAO collectionDao = new CollectionDAO(_dbAccess); + final CollectionDAO collectionDao = new CollectionDAO(_dbAccess, _collectionSerializer); _collectionDaoInjectable = new Injectable() { @Override public CollectionDAO getValue() { diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html b/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html index eb101aad9..8b58378be 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/includes/changeLog.html @@ -1,4 +1,7 @@
+8 Jan. 2012
+- Player owned cards can now be used in casual games, in addition to the normal ones.
+
 7 Jan. 2012
 - "Damrod" now correctly checks his spot play condition.
 - "Cave Troll's Hammer" from Black Rider now is of ORC culture, not MORIA.