diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java index 06d0450014..a3f3b979ec 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java @@ -25,15 +25,10 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - -/* - * DeckEditorPanel.java - * - * Created on Feb 18, 2010, 2:47:04 PM - */ - package mage.client.deckeditor; +import mage.cards.decks.importer.DeckImporter; +import mage.cards.decks.importer.DeckImporterUtil; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -334,6 +329,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { btnSave.setText("Save"); btnSave.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { btnSaveActionPerformed(evt); } @@ -341,6 +337,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { btnLoad.setText("Load"); btnLoad.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { btnLoadActionPerformed(evt); } @@ -348,6 +345,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { btnNew.setText("New"); btnNew.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { btnNewActionPerformed(evt); } @@ -355,6 +353,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { btnExit.setText("Exit"); btnExit.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { btnExitActionPerformed(evt); } @@ -363,6 +362,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { btnImport.setText("Import"); btnImport.setName("btnImport"); // NOI18N btnImport.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { btnImportActionPerformed(evt); } @@ -371,6 +371,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { btnSubmit.setText("Submit"); btnSubmit.setName("btnSubmit"); // NOI18N btnSubmit.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { btnSubmitActionPerformed(evt); } @@ -379,6 +380,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { btnAddLand.setText("Add Land"); btnAddLand.setName("btnAddLand"); // NOI18N btnAddLand.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { btnAddLandActionPerformed(evt); } @@ -480,7 +482,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { File file = fcSelectDeck.getSelectedFile(); try { setCursor(new Cursor(Cursor.WAIT_CURSOR)); - deck = Deck.load(Sets.loadDeck(file.getPath()), true); + deck = Deck.load(DeckImporterUtil.importDeck(file.getPath()), true); } catch (GameException ex) { JOptionPane.showMessageDialog(MageFrame.getDesktop(), ex.getMessage(), "Error loading deck", JOptionPane.ERROR_MESSAGE); } catch (Exception ex) { @@ -550,9 +552,13 @@ public class DeckEditorPanel extends javax.swing.JPanel { File file = fcImportDeck.getSelectedFile(); try { setCursor(new Cursor(Cursor.WAIT_CURSOR)); - DeckImporter importer = getDeckImporter(file.getPath()); + DeckImporter importer = DeckImporterUtil.getDeckImporter(file.getPath()); if (importer != null) { deck = Deck.load(importer.importDeck(file.getPath())); + String errors = importer.getErrors(); + if(!errors.isEmpty()){ + JOptionPane.showMessageDialog(MageFrame.getDesktop(), errors, "Error importing deck", JOptionPane.ERROR_MESSAGE); + } } else { JOptionPane.showMessageDialog(MageFrame.getDesktop(), "Unknown deck format", "Error importing deck", JOptionPane.ERROR_MESSAGE); @@ -586,17 +592,6 @@ public class DeckEditorPanel extends javax.swing.JPanel { refreshDeck(); } - public DeckImporter getDeckImporter(String file) { - if (file.toLowerCase().endsWith("dec")) - return new DecDeckImporter(); - else if (file.toLowerCase().endsWith("mwdeck")) - return new MWSDeckImporter(); - else if (file.toLowerCase().endsWith("txt")) - return new TxtDeckImporter(); - else - return null; - } - // Variables declaration - do not modify//GEN-BEGIN:variables private mage.client.cards.BigCard bigCard; private javax.swing.JButton btnExit; diff --git a/Mage.Client/src/main/java/mage/client/dialog/JoinTableDialog.java b/Mage.Client/src/main/java/mage/client/dialog/JoinTableDialog.java index 9837fbd4d2..21f74455ca 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/JoinTableDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/JoinTableDialog.java @@ -25,21 +25,13 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - - -/* - * JoinTableDialog.java - * - * Created on 15-Dec-2009, 11:18:48 PM - */ - package mage.client.dialog; -import mage.client.*; import java.util.UUID; import javax.swing.JOptionPane; +import mage.cards.decks.importer.DeckImporterUtil; +import mage.client.MageFrame; import mage.remote.Session; -import mage.sets.Sets; import org.apache.log4j.Logger; /** @@ -136,7 +128,7 @@ public class JoinTableDialog extends MageDialog { private void btnOKActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnOKActionPerformed Session session = MageFrame.getSession(); try { - joined = session.joinTable(roomId, tableId, this.newPlayerPanel.getPlayerName(), "Human", 1, Sets.loadDeck(this.newPlayerPanel.getDeckFile())); + joined = session.joinTable(roomId, tableId, this.newPlayerPanel.getPlayerName(), "Human", 1, DeckImporterUtil.importDeck(this.newPlayerPanel.getDeckFile())); } catch (Exception ex) { handleError(ex); } diff --git a/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java b/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java index 576bab15c7..719adae741 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java @@ -25,18 +25,10 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - -/* - * NewTableDialog.java - * - * Created on 15-Dec-2009, 10:35:42 PM - */ - package mage.client.dialog; import java.io.FileNotFoundException; import java.io.IOException; -import mage.client.*; import java.util.ArrayList; import java.util.List; import java.util.UUID; @@ -45,12 +37,14 @@ import javax.swing.JOptionPane; import javax.swing.SpinnerNumberModel; import mage.Constants.MultiplayerAttackOption; import mage.Constants.RangeOfInfluence; +import mage.client.MageFrame; import mage.client.components.MageComponents; -import mage.remote.Session; +import mage.cards.decks.importer.DeckImporterUtil; import mage.client.table.TablePlayerPanel; import mage.client.util.Event; import mage.client.util.Listener; import mage.game.match.MatchOptions; +import mage.remote.Session; import mage.sets.Sets; import mage.view.GameTypeView; import mage.view.TableView; @@ -322,7 +316,7 @@ public class NewTableDialog extends MageDialog { return; } try { - if (session.joinTable(roomId, table.getTableId(), this.player1Panel.getPlayerName(), "Human", 1, Sets.loadDeck(this.player1Panel.getDeckFile()))) { + if (session.joinTable(roomId, table.getTableId(), this.player1Panel.getPlayerName(), "Human", 1, DeckImporterUtil.importDeck(this.player1Panel.getDeckFile()))) { for (TablePlayerPanel player: players) { if (!player.getPlayerType().equals("Human")) { if (!player.joinTable(roomId, table.getTableId())) { diff --git a/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java b/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java index 549c785e55..3617bab8e7 100644 --- a/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java +++ b/Mage.Client/src/main/java/mage/client/game/PlayAreaPanel.java @@ -25,32 +25,21 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - -/* - * PlayAreaPanel.java - * - * Created on Dec 22, 2009, 10:41:54 AM - */ - package mage.client.game; -import java.awt.*; -import java.io.FileNotFoundException; -import java.io.IOException; +import java.awt.Color; +import java.awt.Dimension; import java.util.UUID; -import java.util.logging.Level; -import java.util.logging.Logger; - -import mage.client.MageFrame; -import mage.client.cards.BigCard; -import mage.sets.Sets; -import mage.view.PlayerView; - -import javax.swing.*; -import javax.swing.border.Border; -import javax.swing.border.EmptyBorder; +import javax.swing.BorderFactory; +import javax.swing.GroupLayout; import javax.swing.GroupLayout.Alignment; import javax.swing.LayoutStyle.ComponentPlacement; +import javax.swing.border.Border; +import javax.swing.border.EmptyBorder; +import mage.client.MageFrame; +import mage.client.cards.BigCard; +import mage.cards.decks.importer.DeckImporterUtil; +import mage.view.PlayerView; /** * @@ -76,7 +65,7 @@ public class PlayAreaPanel extends javax.swing.JPanel { update(player); } - public void init(PlayerView player, BigCard bigCard, UUID gameId) { + public final void init(PlayerView player, BigCard bigCard, UUID gameId) { this.playerPanel.init(gameId, player.getPlayerId(), bigCard); this.battlefieldPanel.init(gameId, bigCard); if (MageFrame.getSession().isTestMode()) { @@ -89,7 +78,7 @@ public class PlayAreaPanel extends javax.swing.JPanel { } } - public void update(PlayerView player) { + public final void update(PlayerView player) { this.playerPanel.update(player); this.battlefieldPanel.update(player.getBattlefield()); } @@ -107,6 +96,7 @@ public class PlayAreaPanel extends javax.swing.JPanel { btnCheat.setText("Cheat"); btnCheat.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { btnCheatActionPerformed(evt); } @@ -145,13 +135,7 @@ public class PlayAreaPanel extends javax.swing.JPanel { } private void btnCheatActionPerformed(java.awt.event.ActionEvent evt) { - try { - MageFrame.getSession().cheat(gameId, playerId, Sets.loadDeck("cheat.dck")); - } catch (FileNotFoundException ex) { - Logger.getLogger(PlayAreaPanel.class.getName()).log(Level.SEVERE, null, ex); - } catch (IOException ex) { - Logger.getLogger(PlayAreaPanel.class.getName()).log(Level.SEVERE, null, ex); - } + MageFrame.getSession().cheat(gameId, playerId, DeckImporterUtil.importDeck("cheat.dck")); } diff --git a/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java b/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java index 432b1cbcdd..c38776827a 100644 --- a/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java +++ b/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java @@ -64,13 +64,10 @@ import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; -import java.io.FileNotFoundException; -import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.UUID; -import java.util.logging.Level; -import java.util.logging.Logger; +import mage.cards.decks.importer.DckDeckImporter; /** * Enhanced player pane. @@ -520,13 +517,8 @@ public class PlayerPanelExt extends javax.swing.JPanel { } private void btnCheatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCheatActionPerformed - try { - session.cheat(gameId, playerId, Sets.loadDeck("cheat.dck")); - } catch (FileNotFoundException ex) { - Logger.getLogger(PlayAreaPanel.class.getName()).log(Level.SEVERE, null, ex); - } catch (IOException ex) { - Logger.getLogger(PlayAreaPanel.class.getName()).log(Level.SEVERE, null, ex); - } + DckDeckImporter deckImporter = new DckDeckImporter(); + session.cheat(gameId, playerId, deckImporter.importDeck("cheat.dck")); } private HoverButton avatar; diff --git a/Mage.Client/src/main/java/mage/client/table/TablePlayerPanel.java b/Mage.Client/src/main/java/mage/client/table/TablePlayerPanel.java index 2eb3f7b6cb..5317fe48c3 100644 --- a/Mage.Client/src/main/java/mage/client/table/TablePlayerPanel.java +++ b/Mage.Client/src/main/java/mage/client/table/TablePlayerPanel.java @@ -37,15 +37,13 @@ package mage.client.table; import java.io.FileNotFoundException; import java.io.IOException; import java.util.UUID; - import javax.swing.DefaultComboBoxModel; - import mage.client.MageFrame; -import mage.remote.Session; +import mage.cards.decks.importer.DeckImporterUtil; import mage.client.util.Config; import mage.client.util.Event; import mage.client.util.Listener; -import mage.sets.Sets; +import mage.remote.Session; /** * @@ -79,7 +77,7 @@ public class TablePlayerPanel extends javax.swing.JPanel { public boolean joinTable(UUID roomId, UUID tableId) throws FileNotFoundException, IOException, ClassNotFoundException { if (!this.cbPlayerType.getSelectedItem().equals("Human")) { - return session.joinTable(roomId, tableId, this.newPlayerPanel.getPlayerName(), (String)this.cbPlayerType.getSelectedItem(), this.newPlayerPanel.getLevel(), Sets.loadDeck(this.newPlayerPanel.getDeckFile())); + return session.joinTable(roomId, tableId, this.newPlayerPanel.getPlayerName(), (String)this.cbPlayerType.getSelectedItem(), this.newPlayerPanel.getLevel(), DeckImporterUtil.importDeck(this.newPlayerPanel.getDeckFile())); } return true; } diff --git a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java index f3532c3fee..956be78d1b 100644 --- a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java +++ b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java @@ -47,7 +47,6 @@ import mage.remote.MageRemoteException; import mage.remote.Session; import mage.client.util.ButtonColumn; import mage.game.match.MatchOptions; -import mage.sets.Sets; import mage.view.TableView; import org.apache.log4j.Logger; @@ -62,6 +61,7 @@ import java.util.*; import java.util.List; import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; +import mage.cards.decks.importer.DeckImporterUtil; import mage.client.util.gui.GuiDisplayUtil; import mage.view.MatchView; @@ -283,17 +283,17 @@ public class TablesPanel extends javax.swing.JPanel { protected void reloadMessages() { // reload server messages - List<String> messages = session.getServerMessages(); + List<String> serverMessages = session.getServerMessages(); synchronized (this) { - this.messages = messages; + this.messages = serverMessages; this.currentMessage = 0; } - if (messages == null || messages.isEmpty()) { + if (serverMessages == null || serverMessages.isEmpty()) { this.jPanel2.setVisible(false); } else { this.jPanel2.setVisible(true); - this.jLabel2.setText(messages.get(0)); - this.jButton1.setVisible(messages.size() > 1); + this.jLabel2.setText(serverMessages.get(0)); + this.jButton1.setVisible(serverMessages.size() > 1); } } @@ -513,8 +513,8 @@ public class TablesPanel extends javax.swing.JPanel { options.setRange(RangeOfInfluence.ALL); options.setWinsNeeded(1); table = session.createTable(roomId, options); - session.joinTable(roomId, table.getTableId(), "Human", "Human", 1, Sets.loadDeck("test.dck")); - session.joinTable(roomId, table.getTableId(), "Computer", "Computer - minimax", 5, Sets.loadDeck("test.dck")); + session.joinTable(roomId, table.getTableId(), "Human", "Human", 1, DeckImporterUtil.importDeck("test.dck")); + session.joinTable(roomId, table.getTableId(), "Computer", "Computer - minimax", 5, DeckImporterUtil.importDeck("test.dck")); session.startGame(roomId, table.getTableId()); } catch (Exception ex) { handleError(ex); diff --git a/Mage.Sets/src/mage/cards/decks/importer/DckDeckImporter.java b/Mage.Sets/src/mage/cards/decks/importer/DckDeckImporter.java new file mode 100644 index 0000000000..d1cfb2b674 --- /dev/null +++ b/Mage.Sets/src/mage/cards/decks/importer/DckDeckImporter.java @@ -0,0 +1,82 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.cards.decks.importer; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import mage.cards.ExpansionSet; +import mage.cards.decks.DeckCardLists; +import mage.sets.Sets; + +/** + * + * @author North + */ +public class DckDeckImporter extends DeckImporterImpl { + + private static final Pattern pattern = Pattern.compile("(SB:)?\\s*(\\d*)\\s*\\[([a-zA-Z0-9]{3}):(\\d*)\\].*"); + + @Override + protected void readLine(String line, DeckCardLists deckList) { + + if (line.length() == 0 || line.startsWith("#")) { + return; + } + + Matcher m = pattern.matcher(line); + if (m.matches()) { + boolean sideboard = false; + if ("SB:".equals(m.group(1))) { + sideboard = true; + } + int count = Integer.parseInt(m.group(2)); + String setCode = m.group(3); + int cardNum = Integer.parseInt(m.group(4)); + ExpansionSet set = Sets.findSet(setCode); + String card = null; + if (set != null) { + card = set.findCardName(cardNum); + } + if (card != null) { + for (int i = 0; i < count; i++) { + if (!sideboard) { + deckList.getCards().add(card); + } else { + deckList.getSideboard().add(card); + } + } + } else { + sbMessage.append("Could not find card '").append("' at line ").append(lineCount).append(": ").append(line).append("\n"); + } + } else if (line.startsWith("NAME:")) { + deckList.setName(line.substring(5, line.length())); + } else if (line.startsWith("AUTHOR:")) { + deckList.setAuthor(line.substring(7, line.length())); + } + } +} diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DecDeckImporter.java b/Mage.Sets/src/mage/cards/decks/importer/DecDeckImporter.java similarity index 98% rename from Mage.Client/src/main/java/mage/client/deckeditor/DecDeckImporter.java rename to Mage.Sets/src/mage/cards/decks/importer/DecDeckImporter.java index ccaaccf600..5f25624e79 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/DecDeckImporter.java +++ b/Mage.Sets/src/mage/cards/decks/importer/DecDeckImporter.java @@ -26,7 +26,7 @@ * or implied, of BetaSteward_at_googlemail.com. */ -package mage.client.deckeditor; +package mage.cards.decks.importer; import mage.cards.Card; import mage.cards.decks.DeckCardLists; diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckImporter.java b/Mage.Sets/src/mage/cards/decks/importer/DeckImporter.java similarity index 96% rename from Mage.Client/src/main/java/mage/client/deckeditor/DeckImporter.java rename to Mage.Sets/src/mage/cards/decks/importer/DeckImporter.java index c2e512b987..121b98c856 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckImporter.java +++ b/Mage.Sets/src/mage/cards/decks/importer/DeckImporter.java @@ -26,7 +26,7 @@ * or implied, of BetaSteward_at_googlemail.com. */ -package mage.client.deckeditor; +package mage.cards.decks.importer; import mage.cards.decks.DeckCardLists; @@ -37,5 +37,6 @@ import mage.cards.decks.DeckCardLists; public interface DeckImporter { public DeckCardLists importDeck(String file); - + public String getErrors(); + } diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckImporterImpl.java b/Mage.Sets/src/mage/cards/decks/importer/DeckImporterImpl.java similarity index 88% rename from Mage.Client/src/main/java/mage/client/deckeditor/DeckImporterImpl.java rename to Mage.Sets/src/mage/cards/decks/importer/DeckImporterImpl.java index 8f350a0666..463b763cda 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckImporterImpl.java +++ b/Mage.Sets/src/mage/cards/decks/importer/DeckImporterImpl.java @@ -26,13 +26,11 @@ * or implied, of BetaSteward_at_googlemail.com. */ -package mage.client.deckeditor; +package mage.cards.decks.importer; import java.io.File; import java.util.Scanner; -import javax.swing.JOptionPane; import mage.cards.decks.DeckCardLists; -import mage.client.MageFrame; import org.apache.log4j.Logger; /** @@ -61,11 +59,9 @@ public abstract class DeckImporterImpl implements DeckImporter { } if (sbMessage.length() > 0) { logger.fatal(sbMessage); - JOptionPane.showMessageDialog(MageFrame.getDesktop(), sbMessage.toString(), "Error importing deck", JOptionPane.ERROR_MESSAGE); } } catch (Exception ex) { - JOptionPane.showMessageDialog(MageFrame.getDesktop(), ex.getMessage(), "Error importing deck", JOptionPane.ERROR_MESSAGE); logger.fatal(null, ex); } finally { @@ -77,5 +73,10 @@ public abstract class DeckImporterImpl implements DeckImporter { return deckList; } + @Override + public String getErrors(){ + return sbMessage.toString(); + } + protected abstract void readLine(String line, DeckCardLists deckList); } diff --git a/Mage.Sets/src/mage/cards/decks/importer/DeckImporterUtil.java b/Mage.Sets/src/mage/cards/decks/importer/DeckImporterUtil.java new file mode 100644 index 0000000000..0d479ce650 --- /dev/null +++ b/Mage.Sets/src/mage/cards/decks/importer/DeckImporterUtil.java @@ -0,0 +1,60 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.cards.decks.importer; + +import mage.cards.decks.DeckCardLists; + +/** + * + * @author North + */ +public class DeckImporterUtil { + + public static DeckImporter getDeckImporter(String file) { + if (file.toLowerCase().endsWith("dec")) { + return new DecDeckImporter(); + } else if (file.toLowerCase().endsWith("mwdeck")) { + return new MWSDeckImporter(); + } else if (file.toLowerCase().endsWith("txt")) { + return new TxtDeckImporter(); + } else if (file.toLowerCase().endsWith("dck")) { + return new DckDeckImporter(); + } else { + return null; + } + } + + public static DeckCardLists importDeck(String file) { + DeckImporter deckImporter = getDeckImporter(file); + if (deckImporter != null) { + return deckImporter.importDeck(file); + } else { + return new DeckCardLists(); + } + } +} diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/MWSDeckImporter.java b/Mage.Sets/src/mage/cards/decks/importer/MWSDeckImporter.java similarity index 97% rename from Mage.Client/src/main/java/mage/client/deckeditor/MWSDeckImporter.java rename to Mage.Sets/src/mage/cards/decks/importer/MWSDeckImporter.java index 629d89b25f..1ca9eb99b9 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/MWSDeckImporter.java +++ b/Mage.Sets/src/mage/cards/decks/importer/MWSDeckImporter.java @@ -26,13 +26,11 @@ * or implied, of BetaSteward_at_googlemail.com. */ -package mage.client.deckeditor; +package mage.cards.decks.importer; -import javax.swing.JOptionPane; import mage.cards.Card; import mage.cards.ExpansionSet; import mage.cards.decks.DeckCardLists; -import mage.client.MageFrame; import mage.sets.Sets; /** diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/TxtDeckImporter.java b/Mage.Sets/src/mage/cards/decks/importer/TxtDeckImporter.java similarity index 98% rename from Mage.Client/src/main/java/mage/client/deckeditor/TxtDeckImporter.java rename to Mage.Sets/src/mage/cards/decks/importer/TxtDeckImporter.java index dc07c2b8b2..7076d5b940 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/TxtDeckImporter.java +++ b/Mage.Sets/src/mage/cards/decks/importer/TxtDeckImporter.java @@ -26,7 +26,7 @@ * or implied, of BetaSteward_at_googlemail.com. */ -package mage.client.deckeditor; +package mage.cards.decks.importer; import mage.cards.Card; import mage.cards.decks.DeckCardLists; diff --git a/Mage.Sets/src/mage/sets/Sets.java b/Mage.Sets/src/mage/sets/Sets.java index 56f9a50586..5481cb9148 100644 --- a/Mage.Sets/src/mage/sets/Sets.java +++ b/Mage.Sets/src/mage/sets/Sets.java @@ -28,13 +28,10 @@ package mage.sets; -import java.io.File; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.lang.reflect.Constructor; import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import mage.Constants.CardType; import mage.Constants.ColoredManaSymbol; import mage.Mana; @@ -297,50 +294,6 @@ public class Sets extends HashMap<String, ExpansionSet> { return null; } - public static DeckCardLists loadDeck(String file) throws FileNotFoundException { - DeckCardLists deckList = new DeckCardLists(); - - File f = new File(file); - Scanner scanner = new Scanner(f); - Pattern pattern = Pattern.compile("(SB:)?\\s*(\\d*)\\s*\\[([a-zA-Z0-9]{3}):(\\d*)\\].*"); - try { - while (scanner.hasNextLine()) { - String line = scanner.nextLine().trim(); - if (line.startsWith("#")) continue; - Matcher m = pattern.matcher(line); - if (m.matches()) { - boolean sideboard = false; - if (m.group(1) != null && m.group(1).equals("SB:")) - sideboard = true; - int count = Integer.parseInt(m.group(2)); - String setCode = m.group(3); - int cardNum = Integer.parseInt(m.group(4)); - ExpansionSet set = Sets.findSet(setCode); - String card = set.findCardName(cardNum); - for (int i = 0; i < count; i++) { - if (!sideboard) { - deckList.getCards().add(card); - } - else { - deckList.getSideboard().add(card); - } - } - } - else if (line.startsWith("NAME:")) { - deckList.setName(line.substring(5, line.length())); - } - else if (line.startsWith("AUTHOR:")) { - deckList.setAuthor(line.substring(7, line.length())); - } - } - } - finally { - scanner.close(); - } - - return deckList; - } - public static void saveDeck(String file, DeckCardLists deck) throws FileNotFoundException { PrintWriter out = new PrintWriter(file); Map<String, Integer> deckCards = new HashMap<String, Integer>(); diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestBase.java b/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestBase.java index 511249f216..5b8f2f01a4 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestBase.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestBase.java @@ -1,8 +1,12 @@ package org.mage.test.serverside.base; +import java.io.File; +import java.io.FileNotFoundException; import mage.Constants; +import mage.Constants.PhaseStep; import mage.cards.Card; import mage.cards.decks.Deck; +import mage.cards.decks.importer.DeckImporterUtil; import mage.filter.Filter; import mage.game.Game; import mage.game.GameException; @@ -10,15 +14,10 @@ import mage.game.GameOptions; import mage.game.TwoPlayerDuel; import mage.game.permanent.Permanent; import mage.players.Player; -import mage.sets.Sets; import org.junit.Assert; import org.junit.Before; import org.mage.test.serverside.base.impl.CardTestAPIImpl; -import java.io.File; -import java.io.FileNotFoundException; -import mage.Constants.PhaseStep; - /** * Base class for testing single cards and effects. * @@ -86,7 +85,7 @@ public abstract class CardTestBase extends CardTestAPIImpl { playerA = createNewPlayer("PlayerA", aiTypeA); playerA.setTestMode(true); logger.info("Loading deck..."); - Deck deck = Deck.load(Sets.loadDeck("RB Aggro.dck")); + Deck deck = Deck.load(DeckImporterUtil.importDeck("RB Aggro.dck")); logger.info("Done!"); if (deck.getCards().size() < 40) { throw new IllegalArgumentException("Couldn't load deck, deck size=" + deck.getCards().size()); @@ -96,7 +95,7 @@ public abstract class CardTestBase extends CardTestAPIImpl { playerB = createNewPlayer("PlayerB", aiTypeB); playerB.setTestMode(true); - Deck deck2 = Deck.load(Sets.loadDeck("RB Aggro.dck")); + Deck deck2 = Deck.load(DeckImporterUtil.importDeck("RB Aggro.dck")); if (deck2.getCards().size() < 40) { throw new IllegalArgumentException("Couldn't load deck, deck size=" + deck2.getCards().size()); } @@ -144,7 +143,7 @@ public abstract class CardTestBase extends CardTestAPIImpl { playerA = createNewPlayer("ComputerA", aiTypeA); playerA.setTestMode(true); - Deck deck = Deck.load(Sets.loadDeck("RB Aggro.dck")); + Deck deck = Deck.load(DeckImporterUtil.importDeck("RB Aggro.dck")); if (deck.getCards().size() < 40) { throw new IllegalArgumentException("Couldn't load deck, deck size=" + deck.getCards().size()); @@ -154,7 +153,7 @@ public abstract class CardTestBase extends CardTestAPIImpl { playerB = createNewPlayer("ComputerB", aiTypeB); playerB.setTestMode(true); - Deck deck2 = Deck.load(Sets.loadDeck("RB Aggro.dck")); + Deck deck2 = Deck.load(DeckImporterUtil.importDeck("RB Aggro.dck")); if (deck2.getCards().size() < 40) { throw new IllegalArgumentException("Couldn't load deck, deck size=" + deck2.getCards().size()); } @@ -308,7 +307,6 @@ public abstract class CardTestBase extends CardTestAPIImpl { } } Assert.assertEquals("(Graveyard) Card counts are not equal (" + cardName + ")", expectedCount, actualCount); - return; } } diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestPlayerBase.java b/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestPlayerBase.java index b8369f0881..f80c659704 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestPlayerBase.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestPlayerBase.java @@ -6,6 +6,7 @@ import mage.Constants; import mage.Constants.PhaseStep; import mage.cards.Card; import mage.cards.decks.Deck; +import mage.cards.decks.importer.DeckImporterUtil; import mage.filter.Filter; import mage.game.Game; import mage.game.GameException; @@ -13,7 +14,6 @@ import mage.game.GameOptions; import mage.game.TwoPlayerDuel; import mage.game.permanent.Permanent; import mage.players.Player; -import mage.sets.Sets; import org.junit.Assert; import org.junit.Before; import org.mage.test.player.TestPlayer; @@ -57,7 +57,7 @@ public abstract class CardTestPlayerBase extends CardTestPlayerAPIImpl { playerA = createNewPlayer("PlayerA"); playerA.setTestMode(true); logger.info("Loading deck..."); - Deck deck = Deck.load(Sets.loadDeck("RB Aggro.dck")); + Deck deck = Deck.load(DeckImporterUtil.importDeck("RB Aggro.dck")); logger.info("Done!"); if (deck.getCards().size() < 40) { throw new IllegalArgumentException("Couldn't load deck, deck size=" + deck.getCards().size()); @@ -67,7 +67,7 @@ public abstract class CardTestPlayerBase extends CardTestPlayerAPIImpl { playerB = createNewPlayer("PlayerB"); playerB.setTestMode(true); - Deck deck2 = Deck.load(Sets.loadDeck("RB Aggro.dck")); + Deck deck2 = Deck.load(DeckImporterUtil.importDeck("RB Aggro.dck")); if (deck2.getCards().size() < 40) { throw new IllegalArgumentException("Couldn't load deck, deck size=" + deck2.getCards().size()); } @@ -113,7 +113,7 @@ public abstract class CardTestPlayerBase extends CardTestPlayerAPIImpl { playerA = createNewPlayer("ComputerA"); playerA.setTestMode(true); - Deck deck = Deck.load(Sets.loadDeck("RB Aggro.dck")); + Deck deck = Deck.load(DeckImporterUtil.importDeck("RB Aggro.dck")); if (deck.getCards().size() < 40) { throw new IllegalArgumentException("Couldn't load deck, deck size=" + deck.getCards().size()); @@ -123,7 +123,7 @@ public abstract class CardTestPlayerBase extends CardTestPlayerAPIImpl { playerB = createNewPlayer("ComputerB"); playerB.setTestMode(true); - Deck deck2 = Deck.load(Sets.loadDeck("RB Aggro.dck")); + Deck deck2 = Deck.load(DeckImporterUtil.importDeck("RB Aggro.dck")); if (deck2.getCards().size() < 40) { throw new IllegalArgumentException("Couldn't load deck, deck size=" + deck2.getCards().size()); } @@ -277,7 +277,6 @@ public abstract class CardTestPlayerBase extends CardTestPlayerAPIImpl { } } Assert.assertEquals("(Graveyard) Card counts are not equal (" + cardName + ")", expectedCount, actualCount); - return; } } @@ -304,8 +303,7 @@ public abstract class CardTestPlayerBase extends CardTestPlayerAPIImpl { if (scope.equals(Filter.ComparisonScope.All)) { throw new UnsupportedOperationException("ComparisonScope.All is not implemented."); } - int count = 0; - int fit = 0; + for (Permanent permanent : currentGame.getBattlefield().getAllActivePermanents(player.getId())) { if (permanent.getName().equals(cardName)) { Assert.assertEquals("Power is not the same", power, permanent.getPower().getValue());