From c0c7dc590002cb3ca1e5b103bdf17cb7918eae08 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sun, 23 Aug 2015 00:57:05 +0200 Subject: [PATCH] * Fixed a bug of deck import not finding cards that were never included in regular core or expansion sets (e.g. Command Tower). The deck imports are now case insensitive (and also a little bit slower). --- .../cards/decks/importer/DecDeckImporter.java | 2 +- .../cards/decks/importer/MWSDeckImporter.java | 2 +- .../cards/decks/importer/TxtDeckImporter.java | 4 +-- .../mage/cards/repository/CardRepository.java | 32 ++++++++++++++++--- Mage/src/mage/game/draft/DraftCube.java | 2 +- 5 files changed, 32 insertions(+), 10 deletions(-) diff --git a/Mage/src/mage/cards/decks/importer/DecDeckImporter.java b/Mage/src/mage/cards/decks/importer/DecDeckImporter.java index 617313d634e..b1b095cf605 100644 --- a/Mage/src/mage/cards/decks/importer/DecDeckImporter.java +++ b/Mage/src/mage/cards/decks/importer/DecDeckImporter.java @@ -55,7 +55,7 @@ public class DecDeckImporter extends DeckImporter { String lineName = line.substring(delim).trim(); try { int num = Integer.parseInt(lineNum); - CardInfo cardInfo = CardRepository.instance.findPreferedCoreExpansionCard(lineName); + CardInfo cardInfo = CardRepository.instance.findPreferedCoreExpansionCard(lineName, true); if (cardInfo == null) { sbMessage.append("Could not find card: '").append(lineName).append("' at line ").append(lineCount).append("\n"); } else { diff --git a/Mage/src/mage/cards/decks/importer/MWSDeckImporter.java b/Mage/src/mage/cards/decks/importer/MWSDeckImporter.java index 3b29c552950..f8bb97629ae 100644 --- a/Mage/src/mage/cards/decks/importer/MWSDeckImporter.java +++ b/Mage/src/mage/cards/decks/importer/MWSDeckImporter.java @@ -74,7 +74,7 @@ public class MWSDeckImporter extends DeckImporter { cardInfo = cards.get(new Random().nextInt(cards.size())); } } else { - cardInfo = CardRepository.instance.findPreferedCoreExpansionCard(lineName); + cardInfo = CardRepository.instance.findPreferedCoreExpansionCard(lineName, true); } if (cardInfo == null) { diff --git a/Mage/src/mage/cards/decks/importer/TxtDeckImporter.java b/Mage/src/mage/cards/decks/importer/TxtDeckImporter.java index dbfb00b268b..3f5cf742f06 100644 --- a/Mage/src/mage/cards/decks/importer/TxtDeckImporter.java +++ b/Mage/src/mage/cards/decks/importer/TxtDeckImporter.java @@ -74,7 +74,7 @@ public class TxtDeckImporter extends DeckImporter { } String lineNum = line.substring(0, delim).trim(); String lineName = line.substring(delim).replace("’", "\'").trim(); - lineName = lineName.replace("&", "//").replace("Æ", "AE").replace("ö", "ö"); + lineName = lineName.replace("&", "//").replace("Æ", "AE").replace("ö", "ö").replace("û", "u").replace("\"", "'"); if (lineName.contains("//") && !lineName.contains(" // ")) { lineName = lineName.replace("//", " // "); } @@ -86,7 +86,7 @@ public class TxtDeckImporter extends DeckImporter { } try { int num = Integer.parseInt(lineNum.replaceAll("\\D+", "")); - CardInfo cardInfo = CardRepository.instance.findPreferedCoreExpansionCard(lineName); + CardInfo cardInfo = CardRepository.instance.findPreferedCoreExpansionCard(lineName, true); if (cardInfo == null) { sbMessage.append("Could not find card: '").append(lineName).append("' at line ").append(lineCount).append("\n"); } else { diff --git a/Mage/src/mage/cards/repository/CardRepository.java b/Mage/src/mage/cards/repository/CardRepository.java index 5aec317ec69..115c36f9285 100644 --- a/Mage/src/mage/cards/repository/CardRepository.java +++ b/Mage/src/mage/cards/repository/CardRepository.java @@ -29,6 +29,7 @@ package mage.cards.repository; import com.j256.ormlite.dao.Dao; import com.j256.ormlite.dao.DaoManager; +import com.j256.ormlite.dao.GenericRawResults; import com.j256.ormlite.jdbc.JdbcConnectionSource; import com.j256.ormlite.stmt.QueryBuilder; import com.j256.ormlite.stmt.SelectArg; @@ -40,7 +41,6 @@ import java.io.File; import java.sql.SQLException; import java.util.ArrayList; import java.util.Date; -import java.util.GregorianCalendar; import java.util.List; import java.util.Random; import java.util.Set; @@ -318,11 +318,16 @@ public enum CardRepository { return null; } - public CardInfo findPreferedCoreExpansionCard(String name) { - List cards = findCards(name); + public CardInfo findPreferedCoreExpansionCard(String name, boolean caseInsensitive) { + List cards; + if (caseInsensitive) { + cards = findCardsCaseInsensitive(name); + } else { + cards = findCards(name); + } if (!cards.isEmpty()) { - Date lastReleaseDate = new GregorianCalendar(1900, 1, 1).getTime(); - Date lastExpansionDate = new GregorianCalendar(1900, 1, 1).getTime(); + Date lastReleaseDate = null; + Date lastExpansionDate = null; CardInfo cardToUse = null; for (CardInfo cardinfo : cards) { ExpansionInfo set = ExpansionRepository.instance.getSetByCode(cardinfo.getSetCode()); @@ -353,6 +358,23 @@ public enum CardRepository { return new ArrayList<>(); } + public List findCardsCaseInsensitive(String name) { + try { + String sqlName = name.toLowerCase().replaceAll("\'", "\'\'"); + GenericRawResults rawResults = cardDao.queryRaw( + "select * from " + CardRepository.VERSION_ENTITY_NAME + " where lower(name) = '" + sqlName + "'", + cardDao.getRawRowMapper()); + List result = new ArrayList<>(); + for (CardInfo cardinfo : rawResults) { + result.add(cardinfo); + } + return result; + } catch (SQLException ex) { + Logger.getLogger(CardRepository.class).error("Error during execution of raw sql statement", ex); + } + return new ArrayList<>(); + } + public List findCards(CardCriteria criteria) { try { QueryBuilder queryBuilder = cardDao.queryBuilder(); diff --git a/Mage/src/mage/game/draft/DraftCube.java b/Mage/src/mage/game/draft/DraftCube.java index cb17656cca8..974ca560955 100644 --- a/Mage/src/mage/game/draft/DraftCube.java +++ b/Mage/src/mage/game/draft/DraftCube.java @@ -112,7 +112,7 @@ public abstract class DraftCube { cardInfo = cardList.get(0); } } else { - cardInfo = CardRepository.instance.findPreferedCoreExpansionCard(cardId.getName()); + cardInfo = CardRepository.instance.findPreferedCoreExpansionCard(cardId.getName(), false); } if (cardInfo != null) {