From a2feda38ced9915eacfce1148ab81d733be298d6 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov <jaydi85@gmail.com> Date: Fri, 22 Mar 2019 20:12:06 +0400 Subject: [PATCH] Fixed mtgo deck export (sorting, empty lines); --- .../decks/exporter/MtgoDeckExporter.java | 59 +++++++++++-------- .../decks/exporter/MtgoDeckExporterTest.java | 19 +++--- 2 files changed, 46 insertions(+), 32 deletions(-) diff --git a/Mage/src/main/java/mage/cards/decks/exporter/MtgoDeckExporter.java b/Mage/src/main/java/mage/cards/decks/exporter/MtgoDeckExporter.java index e6bc6d7083..3ff2af5c67 100644 --- a/Mage/src/main/java/mage/cards/decks/exporter/MtgoDeckExporter.java +++ b/Mage/src/main/java/mage/cards/decks/exporter/MtgoDeckExporter.java @@ -6,8 +6,10 @@ import mage.cards.decks.DeckFileFilter; import javax.swing.filechooser.FileFilter; import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; -import java.util.TreeMap; +import java.util.Map; public class MtgoDeckExporter extends DeckExporter { @@ -17,33 +19,42 @@ public class MtgoDeckExporter extends DeckExporter { @Override public void writeDeck(PrintWriter out, DeckCardLists deck) { - TreeMap<String, Integer> deckCards = toCardMap(deck.getCards()); - TreeMap<String, Integer> sideboard = toCardMap(deck.getSideboard()); - deckCards.forEach((name, count) -> { - out.print(count); - out.print(' '); - out.println(name); - }); + Map<String, Integer> amount = new HashMap<>(); + List<String> deckMain = prepareCardsList(deck.getCards(), amount, "M@"); + List<String> deckSideboard = prepareCardsList(deck.getSideboard(), amount, "S@"); - out.println(); - out.println(); - - sideboard.forEach((name, count) -> { - out.print(count); - out.print(' '); - out.println(name); - }); - - out.println(); + printCards(out, deckMain, amount, "M@"); + if (deckSideboard.size() > 0) { + out.println(); + printCards(out, deckSideboard, amount, "S@"); + } } - private TreeMap<String, Integer> toCardMap(List<DeckCardInfo> cards) { - TreeMap<String, Integer> counts = new TreeMap<>(); - for (DeckCardInfo card : cards) { - int count = counts.getOrDefault(card.getCardName(), 0) + card.getQuantity(); - counts.put(card.getCardName(), count); + private List<String> prepareCardsList(List<DeckCardInfo> sourceCards, Map<String, Integer> amount, String prefix) { + List<String> res = new ArrayList<>(); + for (DeckCardInfo card : sourceCards) { + String code = prefix + card.getCardName(); + int curAmount = amount.getOrDefault(code, 0); + if (curAmount == 0) { + res.add(card.getCardName()); + } + amount.put(code, curAmount + card.getQuantity()); } - return counts; + return res; + } + + private void printCards(PrintWriter out, List<String> deck, Map<String, Integer> amount, String prefix) { + if (deck.size() == 0) return; + + boolean firstCard = true; + for (String name : deck) { + if (!firstCard) out.println(); + out.print(amount.get(prefix + name)); + out.print(' '); + out.print(name); + firstCard = false; + } + out.println(); } @Override diff --git a/Mage/src/test/java/mage/cards/decks/exporter/MtgoDeckExporterTest.java b/Mage/src/test/java/mage/cards/decks/exporter/MtgoDeckExporterTest.java index 3e69e753bd..3a6df51748 100644 --- a/Mage/src/test/java/mage/cards/decks/exporter/MtgoDeckExporterTest.java +++ b/Mage/src/test/java/mage/cards/decks/exporter/MtgoDeckExporterTest.java @@ -15,18 +15,21 @@ public class MtgoDeckExporterTest { public void writeDeck() throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); DeckCardLists deck = new DeckCardLists(); - deck.getCards().add(new DeckCardInfo("Forest", "RNA", "1", 2)); - deck.getCards().add(new DeckCardInfo("Plains", "RNA", "2", 3)); - deck.getSideboard().add(new DeckCardInfo("Island", "RNA", "3", 2)); + deck.getCards().add(new DeckCardInfo("Forest", "1", "RNA", 2)); + deck.getCards().add(new DeckCardInfo("Plains", "2", "RNA", 3)); + deck.getCards().add(new DeckCardInfo("Plains", "2", "RNA", 5)); // must combine + deck.getCards().add(new DeckCardInfo("Mountain", "3", "RNA", 1)); + deck.getSideboard().add(new DeckCardInfo("Island", "1", "RNA", 2)); + deck.getSideboard().add(new DeckCardInfo("Island", "1", "RNA", 5)); // must combine + deck.getSideboard().add(new DeckCardInfo("Mountain", "2", "RNA", 3)); MtgoDeckExporter exporter = new MtgoDeckExporter(); exporter.writeDeck(baos, deck); assertEquals("2 Forest" + System.lineSeparator() + - "3 Plains" + System.lineSeparator() + + "8 Plains" + System.lineSeparator() + + "1 Mountain" + System.lineSeparator() + System.lineSeparator() + - System.lineSeparator() + - "2 Island" + System.lineSeparator() + - System.lineSeparator(), + "7 Island" + System.lineSeparator() + + "3 Mountain" + System.lineSeparator(), baos.toString()); } - } \ No newline at end of file