From 1e3e30969d633ab070880d575ade61e61c30a70b Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Tue, 13 Mar 2012 14:40:14 +0000 Subject: [PATCH] Work on merchant. --- .../com/gempukku/lotro/db/DbMerchantDAO.java | 6 +-- .../lotro/merchant/MerchantService.java | 46 +++++++++++++++---- .../lotro/merchant/ParametrizedMerchant.java | 21 ++++++++- .../lotro/merchant/MockMerchantDAO.java | 4 ++ .../merchant/ParametrizedMerchantTest.java | 8 ++-- .../lotro/server/MerchantResource.java | 9 ++-- 6 files changed, 73 insertions(+), 21 deletions(-) diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/DbMerchantDAO.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/DbMerchantDAO.java index ff4e8cfe5..48da9fd4c 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/DbMerchantDAO.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/DbMerchantDAO.java @@ -33,7 +33,7 @@ public class DbMerchantDAO implements MerchantDAO { try { Connection connection = _dbAccess.getDataSource().getConnection(); try { - PreparedStatement statement = connection.prepareStatement("update merchant set transaction_price=?, transaction_date=?, transaction_type=? where blueprint_id=?"); + PreparedStatement statement = connection.prepareStatement("update merchant_data set transaction_price=?, transaction_date=?, transaction_type=? where blueprint_id=?"); try { statement.setFloat(1, price); statement.setTimestamp(2, new Timestamp(date.getTime())); @@ -55,7 +55,7 @@ public class DbMerchantDAO implements MerchantDAO { try { Connection connection = _dbAccess.getDataSource().getConnection(); try { - PreparedStatement statement = connection.prepareStatement("insert into merchant (transaction_price, transaction_date, transaction_type, blueprint_id) values (?,?,?,?)"); + PreparedStatement statement = connection.prepareStatement("insert into merchant_data (transaction_price, transaction_date, transaction_type, blueprint_id) values (?,?,?,?)"); try { statement.setFloat(1, price); statement.setTimestamp(2, new Timestamp(date.getTime())); @@ -82,7 +82,7 @@ public class DbMerchantDAO implements MerchantDAO { try { Connection connection = _dbAccess.getDataSource().getConnection(); try { - PreparedStatement statement = connection.prepareStatement("select blueprint_id, transaction_price, transaction_date, transaction_type from merchant where blueprint_id=?"); + PreparedStatement statement = connection.prepareStatement("select blueprint_id, transaction_price, transaction_date, transaction_type from merchant_data where blueprint_id=?"); try { statement.setString(1, blueprintId); ResultSet rs = statement.executeQuery(); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/merchant/MerchantService.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/merchant/MerchantService.java index fce284dd8..fcb50d136 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/merchant/MerchantService.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/merchant/MerchantService.java @@ -23,12 +23,15 @@ public class MerchantService { private ReadWriteLock _lock = new ReentrantReadWriteLock(true); private Set _merchantableItems = new HashSet(); private Set _merchantableStrings = new HashSet(); + + private Map _fixedPriceItems = new HashMap(); + private CollectionType _permanentCollection = new CollectionType("permanent", "My cards"); private CollectionsManager _collectionsManager; public MerchantService(LotroCardBlueprintLibrary library, CollectionsManager collectionsManager, MerchantDAO merchantDAO) { _collectionsManager = collectionsManager; - ParametrizedMerchant parametrizedMerchant = new ParametrizedMerchant(); + ParametrizedMerchant parametrizedMerchant = new ParametrizedMerchant(library); parametrizedMerchant.setMerchantSetupDate(new Date()); parametrizedMerchant.setMerchantDao(merchantDAO); _merchant = parametrizedMerchant; @@ -42,6 +45,28 @@ public class MerchantService { _merchantableStrings.add(baseBlueprintId); } } + + addBooster("FotR - Booster", 1000); + addBooster("MoM - Booster", 1000); + addBooster("RotEL - Booster", 1000); + addBooster("TTT - Booster", 1000); + addBooster("BoHD - Booster", 1000); + addBooster("EoF - Booster", 1000); + addBooster("RotK - Booster", 1000); + addBooster("SoG - Booster", 1000); + addBooster("MD - Booster", 1000); + addBooster("SH - Booster", 1000); + addBooster("BR - Booster", 1000); + addBooster("BL - Booster", 1000); + addBooster("HU - Booster", 1000); + addBooster("RoS - Booster", 1000); + addBooster("TaD - Booster", 1000); + } + + private void addBooster(String blueprintId, int price) { + _fixedPriceItems.put(blueprintId, price); + _merchantableItems.add(new BasicCardItem(blueprintId)); + _merchantableStrings.add(blueprintId); } public Set getSellableItems() { @@ -58,13 +83,18 @@ public class MerchantService { for (CardItem cardItem : cardBlueprintIds) { String blueprintId = cardItem.getBlueprintId(); - Integer buyPrice = _merchant.getCardBuyPrice(blueprintId, currentTime); - if (buyPrice != null) - buyPrices.put(blueprintId, buyPrice); - if (_merchantableStrings.contains(blueprintId)) { - Integer sellPrice = _merchant.getCardSellPrice(blueprintId, currentTime); - if (sellPrice != null) - sellPrices.put(blueprintId, sellPrice); + Integer fixedPrice = _fixedPriceItems.get(blueprintId); + if (fixedPrice != null) { + sellPrices.put(blueprintId, fixedPrice); + } else { + Integer buyPrice = _merchant.getCardBuyPrice(blueprintId, currentTime); + if (buyPrice != null) + buyPrices.put(blueprintId, buyPrice); + if (_merchantableStrings.contains(blueprintId)) { + Integer sellPrice = _merchant.getCardSellPrice(blueprintId, currentTime); + if (sellPrice != null) + sellPrices.put(blueprintId, sellPrice); + } } } PriceGuarantee priceGuarantee = new PriceGuarantee(sellPrices, buyPrices, currentTime); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/merchant/ParametrizedMerchant.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/merchant/ParametrizedMerchant.java index dc1eb8c8b..b5134aff3 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/merchant/ParametrizedMerchant.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/merchant/ParametrizedMerchant.java @@ -3,6 +3,7 @@ package com.gempukku.lotro.merchant; import com.gempukku.lotro.cards.packs.RarityReader; import com.gempukku.lotro.cards.packs.SetRarity; import com.gempukku.lotro.db.MerchantDAO; +import com.gempukku.lotro.game.LotroCardBlueprintLibrary; import java.util.Date; import java.util.HashMap; @@ -23,8 +24,10 @@ public class ParametrizedMerchant implements Merchant { private MerchantDAO _merchantDao; private Map _rarity = new HashMap(); + private LotroCardBlueprintLibrary _library; - public ParametrizedMerchant() { + public ParametrizedMerchant(LotroCardBlueprintLibrary library) { + _library = library; RarityReader rarityReader = new RarityReader(); for (int i = 0; i <= 19; i++) _rarity.put(i, rarityReader.getSetRarity(String.valueOf(i))); @@ -40,10 +43,21 @@ public class ParametrizedMerchant implements Merchant { @Override public Integer getCardBuyPrice(String blueprintId, Date currentTime) { + boolean foil = false; + if (blueprintId.endsWith("*")) + foil = true; + + blueprintId = _library.getBaseBlueprintId(blueprintId); + Double normalPrice = getNormalPrice(blueprintId, currentTime); if (normalPrice == null) return null; - return (int) Math.floor(_profitMargin * normalPrice / getSetupComponent(currentTime)); + + int price = (int) Math.floor(_profitMargin * normalPrice / getSetupComponent(currentTime)); + + if (foil) + return 2 * price; + return price; } @Override @@ -98,6 +112,9 @@ public class ParametrizedMerchant implements Merchant { @Override public void cardBought(String blueprintId, Date currentTime, int price) { + if (blueprintId.endsWith("*")) + price = price / 2; + blueprintId = _library.getBaseBlueprintId(blueprintId); _merchantDao.addTransaction(blueprintId, (price / _profitMargin), currentTime, MerchantDAO.TransactionType.BUY); } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/merchant/MockMerchantDAO.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/merchant/MockMerchantDAO.java index 46bd00765..8bb531786 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/merchant/MockMerchantDAO.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/merchant/MockMerchantDAO.java @@ -24,4 +24,8 @@ public class MockMerchantDAO implements MerchantDAO { return new Transaction(_dates.get(blueprintId), _prices.get(blueprintId), _transactionTypes.get(blueprintId)); return null; } + + @Override + public void clearCache() { + } } diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/merchant/ParametrizedMerchantTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/merchant/ParametrizedMerchantTest.java index 4c642fc22..b23a56b31 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/merchant/ParametrizedMerchantTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/merchant/ParametrizedMerchantTest.java @@ -1,12 +1,12 @@ package com.gempukku.lotro.merchant; import com.gempukku.lotro.db.MerchantDAO; +import com.gempukku.lotro.game.LotroCardBlueprintLibrary; +import static org.junit.Assert.assertTrue; import org.junit.Test; import java.util.Date; -import static org.junit.Assert.assertTrue; - public class ParametrizedMerchantTest { @Test public void checkTransactionRevertsPriceAfterFiveDays() { @@ -15,7 +15,7 @@ public class ParametrizedMerchantTest { MerchantDAO merchantDao = new MockMerchantDAO(); - ParametrizedMerchant merchant = new ParametrizedMerchant(); + ParametrizedMerchant merchant = new ParametrizedMerchant(new LotroCardBlueprintLibrary()); merchant.setMerchantDao(merchantDao); merchant.setMerchantSetupDate(setupDate); @@ -38,7 +38,7 @@ public class ParametrizedMerchantTest { MerchantDAO merchantDao = new MockMerchantDAO(); - ParametrizedMerchant merchant = new ParametrizedMerchant(); + ParametrizedMerchant merchant = new ParametrizedMerchant(new LotroCardBlueprintLibrary()); merchant.setMerchantDao(merchantDao); merchant.setMerchantSetupDate(setupDate); diff --git a/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/MerchantResource.java b/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/MerchantResource.java index decbbdc4d..b7d305bbf 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/MerchantResource.java +++ b/gemp-lotr/gemp-lotr-web/src/main/java/com/gempukku/lotro/server/MerchantResource.java @@ -95,9 +95,10 @@ public class MerchantResource extends AbstractResource { Document doc = documentBuilder.newDocument(); - Element collectionElem = doc.createElement("merchant"); - collectionElem.setAttribute("count", String.valueOf(filteredResult.size())); - doc.appendChild(collectionElem); + Element merchantElem = doc.createElement("merchant"); + merchantElem.setAttribute("currency", String.valueOf(_collectionsManager.getPlayerCollection(resourceOwner, "permanent").getCurrency())); + merchantElem.setAttribute("count", String.valueOf(filteredResult.size())); + doc.appendChild(merchantElem); for (CardItem cardItem : pageToDisplay) { String blueprintId = cardItem.getBlueprintId(); @@ -118,7 +119,7 @@ public class MerchantResource extends AbstractResource { Integer sellPrice = sellPrices.get(blueprintId); if (sellPrice != null) elem.setAttribute("sellPrice", sellPrice.toString()); - collectionElem.appendChild(elem); + merchantElem.appendChild(elem); } return doc;