From bbab59e7669be96206a18185d5bcae90c8141c3d Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Wed, 21 Sep 2011 15:27:17 +0000 Subject: [PATCH] refactored and a bit improved DeckImport --- src/main/java/forge/deck/DeckRecognizer.java | 53 ++++++++++--------- .../java/forge/gui/deckeditor/DeckImport.java | 14 ++--- 2 files changed, 36 insertions(+), 31 deletions(-) diff --git a/src/main/java/forge/deck/DeckRecognizer.java b/src/main/java/forge/deck/DeckRecognizer.java index fe42d8e17d0..93b8583c72b 100644 --- a/src/main/java/forge/deck/DeckRecognizer.java +++ b/src/main/java/forge/deck/DeckRecognizer.java @@ -16,11 +16,11 @@ import forge.item.CardPrinted; */ public class DeckRecognizer { public enum TokenType { - KnownCardWithNumber, - UnknownCardWithNumber, + KnownCard, + UnknownCard, SectionName, Comment, - Unknown + UnknownText } public static class Token { @@ -29,30 +29,27 @@ public class DeckRecognizer { private final int number; private final String text; - public Token(CardPrinted knownCard, int count) { - card = knownCard; - text = null; - number = count; - type = TokenType.KnownCardWithNumber; + public static Token knownCard(CardPrinted theCard, int count) { + return new Token(theCard, TokenType.KnownCard, count, null); + } + public static Token unknownCard(String cardNme, int count) { + return new Token(null, TokenType.UnknownCard, count, cardNme); } - public Token(String unknownCard, int count) { - card = null; - text = unknownCard; + private Token(CardPrinted knownCard, TokenType type1, int count, String message) + { + card = knownCard; number = count; - type = TokenType.UnknownCardWithNumber; + type = type1; + text = message; } public Token(TokenType type1, int count, String message) { - if (type1 == TokenType.KnownCardWithNumber || type1 == TokenType.UnknownCardWithNumber) { - throw new IllegalArgumentException("Use specialized constructors for recognized card lines"); + this(null, type1, count, message); + if (type1 == TokenType.KnownCard || type1 == TokenType.UnknownCard) { + throw new IllegalArgumentException("Use factory methods for recognized card lines"); } - - card = null; - number = count; - type = type1; - text = message; } public String getText() { return text; } @@ -82,19 +79,19 @@ public class DeckRecognizer { return new Token(cardName, amount); } */else { if ( CardDb.instance().isCardSupported(line)) { - return new Token( CardDb.instance().getCard(line), 1); + return Token.knownCard(CardDb.instance().getCard(line), 1); } result = recognizeNonCard(line, 1); } - return result != null ? result : new Token(TokenType.Unknown, 0, line); + return result != null ? result : new Token(TokenType.UnknownText, 0, line); } private static Token recognizePossibleNameAndNumber(String name, int n) { if ( CardDb.instance().isCardSupported(name)) - return new Token( CardDb.instance().getCard(name), n); + return Token.knownCard(CardDb.instance().getCard(name), n); Token known = recognizeNonCard(name, n); - return null == known ? new Token(name, n) : known; + return null == known ? Token.unknownCard(name, n) : known; } private static Token recognizeNonCard(String text, int n) { @@ -104,8 +101,14 @@ public class DeckRecognizer { } private final static String[] knownComments = new String[] { - "lands", "creatures", "creature", "spells", "enchancements", "other spells", "artifacts", "cards" }; - private static boolean isDecoration(String line) { + "land", "lands", "creatures", "creature", "spells", "enchancements", "other spells", "artifacts" }; + private final static String[] knownCommentParts = new String[] { "card" }; + + private static boolean isDecoration(String lineAsIs) { + String line = lineAsIs.toLowerCase(); + for (String s : knownCommentParts) { + if (line.contains(s)) { return true; } + } for (String s : knownComments) { if (line.equalsIgnoreCase(s)) { return true; } } diff --git a/src/main/java/forge/gui/deckeditor/DeckImport.java b/src/main/java/forge/gui/deckeditor/DeckImport.java index f5a6a065a8a..d8d7f56fe21 100644 --- a/src/main/java/forge/gui/deckeditor/DeckImport.java +++ b/src/main/java/forge/gui/deckeditor/DeckImport.java @@ -50,7 +50,7 @@ public class DeckImport extends JDialog { "
Legend
" + "" + "
Submit feedback to Max mtg on slightlymagic.net forum
" + @@ -119,6 +119,7 @@ public class DeckImport extends JDialog { processWindowEvent(new WindowEvent(DeckImport.this, WindowEvent.WINDOW_CLOSING)); } }); txtInput.getDocument().addDocumentListener(new OnChangeTextUpdate()); + cmdAccept.setEnabled(false); } private void readInput() @@ -155,12 +156,13 @@ public class DeckImport extends JDialog { int[] cardsUnknown = new int[2]; int idx = 0; for (DeckRecognizer.Token t : tokens) { - if (t.getType() == TokenType.KnownCardWithNumber) { cardsOk[idx] += t.getNumber(); } - if (t.getType() == TokenType.UnknownCardWithNumber) { cardsUnknown[idx] += t.getNumber(); } + if (t.getType() == TokenType.KnownCard) { cardsOk[idx] += t.getNumber(); } + if (t.getType() == TokenType.UnknownCard) { cardsUnknown[idx] += t.getNumber(); } if (t.getType() == TokenType.SectionName && t.getText().toLowerCase().contains("side") ) { idx = 1; } } summaryMain.setText(String.format("Main: %d cards recognized, %d unknown cards", cardsOk[0], cardsUnknown[0])); summarySide.setText(String.format("Sideboard: %d cards recognized, %d unknown cards", cardsOk[1], cardsUnknown[1])); + cmdAccept.setEnabled(cardsOk[0] > 0); } private Deck buildDeck(){ @@ -177,13 +179,13 @@ public class DeckImport extends JDialog { private String makeHtmlViewOfToken(DeckRecognizer.Token token) { switch(token.getType()) { - case KnownCardWithNumber: + case KnownCard: return String.format("
%s * %s [%s]
", token.getNumber(), token.getCard().getName(), token.getCard().getSet()); - case UnknownCardWithNumber: + case UnknownCard: return String.format("
%s * %s
", token.getNumber(), token.getText()); case SectionName: return String.format("
%s
", token.getText()); - case Unknown: + case UnknownText: case Comment: return String.format("
%s
", token.getText()); }