DeckRecognizer will try to get the latest edition for cards typed

This commit is contained in:
Maxmtg
2012-01-28 16:18:21 +00:00
parent e8c981e1cc
commit c27918c67e
2 changed files with 38 additions and 2 deletions

View File

@@ -186,7 +186,7 @@ public class DeckRecognizer {
*/ */
else { else {
if (CardDb.instance().isCardSupported(line)) { if (CardDb.instance().isCardSupported(line)) {
return Token.knownCard(CardDb.instance().getCard(line), 1); return Token.knownCard(CardDb.instance().getCardFromLatestSet(line), 1);
} }
result = DeckRecognizer.recognizeNonCard(line, 1); result = DeckRecognizer.recognizeNonCard(line, 1);
} }
@@ -195,7 +195,7 @@ public class DeckRecognizer {
private static Token recognizePossibleNameAndNumber(final String name, final int n) { private static Token recognizePossibleNameAndNumber(final String name, final int n) {
if (CardDb.instance().isCardSupported(name)) { if (CardDb.instance().isCardSupported(name)) {
return Token.knownCard(CardDb.instance().getCard(name), n); return Token.knownCard(CardDb.instance().getCardFromLatestSet(name), n);
} }
final Token known = DeckRecognizer.recognizeNonCard(name, n); final Token known = DeckRecognizer.recognizeNonCard(name, n);

View File

@@ -26,11 +26,13 @@ import java.util.Map.Entry;
import java.util.NoSuchElementException; import java.util.NoSuchElementException;
import net.slightlymagic.braids.util.lambda.Lambda1; import net.slightlymagic.braids.util.lambda.Lambda1;
import net.slightlymagic.maxmtg.Predicate;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.ImmutablePair;
import forge.Card; import forge.Card;
import forge.SetUtils;
import forge.card.CardInSet; import forge.card.CardInSet;
import forge.card.CardRules; import forge.card.CardRules;
import forge.card.MtgDataParser; import forge.card.MtgDataParser;
@@ -336,4 +338,38 @@ public final class CardDb {
return this.allCardsFlat; return this.allCardsFlat;
} }
/**
* TODO: Write javadoc for this method.
* @param name
* @return
*/
public CardPrinted getCardFromLatestSet(String name) {
// Sometimes they read from decks things like "CardName|Set" - but we
// can handle it
final ImmutablePair<String, String> nameWithSet = CardDb.splitCardName(name);
if (nameWithSet.right != null) {
return this.getCard(nameWithSet.left, nameWithSet.right);
}
// OK, plain name here
Predicate<CardPrinted> predicate = CardPrinted.Predicates.name(nameWithSet.left);
List<CardPrinted> namedCards = predicate.select(this.allCardsFlat);
if ( namedCards.isEmpty() )
throw new NoSuchElementException(String.format("Card '%s' not found in our database.", name));
// Find card with maximal set index
CardPrinted result = namedCards.get(0);
int resIndex = SetUtils.getSetByCode((result).getSet()).getIndex();
for(CardPrinted card : namedCards)
{
int thisIndex = SetUtils.getSetByCode((card).getSet()).getIndex();
if ( thisIndex > resIndex ) {
result = card;
resIndex = thisIndex;
}
}
return result;
}
} }