DeckManager class.
- * + *+ * DeckManager class. + *
+ * * @author Forge * @version $Id$ */ public class DeckManager { - /** ConstantBDKFileFilter */
- private static FilenameFilter BDKFileFilter = new FilenameFilter() {
- public boolean accept(File dir, String name) {
+ /** Constant BDKFileFilter. */
+ private static FilenameFilter bdkFileFilter = new FilenameFilter() {
+ public boolean accept(final File dir, final String name) {
return name.endsWith(".bdk");
}
};
- /** Constant DCKFileFilter */
- public static final FilenameFilter DCKFileFilter = new FilenameFilter() {
- public boolean accept(File dir, String name) {
+ /** Constant DCKFileFilter. */
+ public static final FilenameFilter DCK_FILE_FILTER = new FilenameFilter() {
+ public boolean accept(final File dir, final String name) {
return name.endsWith(".dck");
}
};
-
- public static final FileFilter dckFilter = new FileFilter() {
+
+ /**
+ *
+ */
+ public static final FileFilter DCK_FILTER = new FileFilter() {
@Override
- public boolean accept(File f) {
+ public boolean accept(final File f) {
return f.getName().endsWith(".dck") || f.isDirectory();
}
@@ -60,6 +81,21 @@ public class DeckManager {
}
};
+ /**
+ *
+ */
+ public static final FileFilter HTML_FILTER = new FileFilter() {
+ @Override
+ public boolean accept(final File f) {
+ return f.getName().endsWith(".html") || f.isDirectory();
+ }
+
+ @Override
+ public String getDescription() {
+ return "Simple Deck File .html";
+ }
+ };
+
private static final String NAME = "Name";
private static final String DECK_TYPE = "Deck Type";
private static final String COMMENT = "Comment";
@@ -67,15 +103,18 @@ public class DeckManager {
private static final String CSTM_POOL = "Custom Pool";
private File deckDir;
- MapConstructor for DeckManager.
- * - * @param deckDir a {@link java.io.File} object. + *+ * Constructor for DeckManager. + *
+ * + * @param deckDir + * a {@link java.io.File} object. */ - public DeckManager(File deckDir) { + public DeckManager(final File deckDir) { if (deckDir == null) { throw new IllegalArgumentException("No deck directory specified"); } @@ -99,96 +138,115 @@ public class DeckManager { } } - /** - *isUnique.
- * - * @param deckName a {@link java.lang.String} object. + *+ * isUnique. + *
+ * + * @param deckName + * a {@link java.lang.String} object. * @return a boolean. */ - public boolean isUnique(String deckName) { + public final boolean isUnique(final String deckName) { return !deckMap.containsKey(deckName); } /** - *isUniqueDraft.
- * - * @param deckName a {@link java.lang.String} object. + *+ * isUniqueDraft. + *
+ * + * @param deckName + * a {@link java.lang.String} object. * @return a boolean. */ - public boolean isUniqueDraft(String deckName) { + public final boolean isUniqueDraft(final String deckName) { return !draftMap.keySet().contains(deckName); } /** - *getDeck.
- * - * @param deckName a {@link java.lang.String} object. + *+ * getDeck. + *
+ * + * @param deckName + * a {@link java.lang.String} object. * @return a {@link forge.deck.Deck} object. */ - public Deck getDeck(String deckName) { + public final Deck getDeck(final String deckName) { return deckMap.get(deckName); } - /** - *addDeck.
- * - * @param deck a {@link forge.deck.Deck} object. + *+ * addDeck. + *
+ * + * @param deck + * a {@link forge.deck.Deck} object. */ - public void addDeck(Deck deck) { + public final void addDeck(final Deck deck) { if (deck.getDeckType().equals(GameType.Draft)) { - throw new RuntimeException( - "DeckManager : addDeck() error, deck type is Draft"); + throw new RuntimeException("DeckManager : addDeck() error, deck type is Draft"); } deckMap.put(deck.getName(), deck); } /** - *deleteDeck.
- * - * @param deckName a {@link java.lang.String} object. + *+ * deleteDeck. + *
+ * + * @param deckName + * a {@link java.lang.String} object. */ - public void deleteDeck(String deckName) { + public final void deleteDeck(final String deckName) { deckMap.remove(deckName); } /** - *getDraftDeck.
- * - * @param deckName a {@link java.lang.String} object. + *+ * getDraftDeck. + *
+ * + * @param deckName + * a {@link java.lang.String} object. * @return an array of {@link forge.deck.Deck} objects. */ - public Deck[] getDraftDeck(String deckName) { + public final Deck[] getDraftDeck(final String deckName) { if (!draftMap.containsKey(deckName)) { - throw new RuntimeException( - "DeckManager : getDraftDeck() error, deck name not found - " + deckName); + throw new RuntimeException("DeckManager : getDraftDeck() error, deck name not found - " + deckName); } return draftMap.get(deckName); } /** - *addDraftDeck.
- * - * @param deck an array of {@link forge.deck.Deck} objects. + *+ * addDraftDeck. + *
+ * + * @param deck + * an array of {@link forge.deck.Deck} objects. */ - public void addDraftDeck(Deck[] deck) { + public final void addDraftDeck(final Deck[] deck) { checkDraftDeck(deck); draftMap.put(deck[0].toString(), deck); } /** - *deleteDraftDeck.
- * - * @param deckName a {@link java.lang.String} object. + *+ * deleteDraftDeck. + *
+ * + * @param deckName + * a {@link java.lang.String} object. */ - public void deleteDraftDeck(String deckName) { + public final void deleteDraftDeck(final String deckName) { if (!draftMap.containsKey(deckName)) { - throw new RuntimeException( - "DeckManager : deleteDraftDeck() error, deck name not found - " + deckName); + throw new RuntimeException("DeckManager : deleteDraftDeck() error, deck name not found - " + deckName); } draftMap.remove(deckName); @@ -198,32 +256,53 @@ public class DeckManager { } /** - *checkDraftDeck.
- * - * @param deck an array of {@link forge.deck.Deck} objects. + *+ * checkDraftDeck. + *
+ * + * @param deck + * an array of {@link forge.deck.Deck} objects. */ - private void checkDraftDeck(Deck[] deck) { + private void checkDraftDeck(final Deck[] deck) { if (deck == null || deck.length != 8 || deck[0].getName().equals("") - || (!deck[0].getDeckType().equals(GameType.Draft))) { + || (!deck[0].getDeckType().equals(GameType.Draft))) + { throw new RuntimeException("DeckManager : checkDraftDeck() error, invalid deck"); } } - - public CollectionreadAllDecks.
+ *+ * readAllDecks. + *
*/ - public void readAllDecks() { + public final void readAllDecks() { deckMap.clear(); draftMap.clear(); File[] files; ListreadDeck.
- * - * @param deckFile a {@link java.io.File} object. + *+ * readDeck. + *
+ * + * @param deckFile + * a {@link java.io.File} object. * @return a {@link forge.deck.Deck} object. */ - public static Deck readDeck(File deckFile) { - - ListreadDeckOld.
- * - * @param iterator a {@link java.util.ListIterator} object. + *+ * readDeckOld. + *
+ * + * @param iterator + * a {@link java.util.ListIterator} object. * @return a {@link forge.deck.Deck} object. */ - private static void readDeckOldMetadata(final IteratorwriteAllDecks.
+ * + * Write draft Decks. + * + * @param drafts + * a Deck[] */ - public static void writeDraftDecks(Deck[] drafts) { + public static void writeDraftDecks(final Deck[] drafts) { try { File f = makeFileName(drafts[0]); f.mkdir(); @@ -458,7 +581,6 @@ public class DeckManager { out.close(); } - } catch (IOException ex) { ErrorViewer.showError(ex); throw new RuntimeException("DeckManager : writeDeck() error, " + ex.getMessage()); @@ -466,11 +588,16 @@ public class DeckManager { } /** - *writeDeck.
- * - * @param d a {@link forge.deck.Deck} object. - * @param out a {@link java.io.BufferedWriter} object. - * @throws java.io.IOException if any. + *+ * writeDeck. + *
+ * + * @param d + * a {@link forge.deck.Deck} object. + * @param out + * a {@link java.io.BufferedWriter} object. + * @throws java.io.IOException + * if any. */ private static void writeDeck(final Deck d, final BufferedWriter out) throws IOException { out.write(format("[metadata]%n")); @@ -478,10 +605,16 @@ public class DeckManager { out.write(format("%s=%s%n", NAME, d.getName().replaceAll("\n", ""))); out.write(format("%s=%s%n", DECK_TYPE, d.getDeckType())); // these are optional - if (d.getComment() != null) { out.write(format("%s=%s%n", COMMENT, d.getComment().replaceAll("\n", ""))); } - if (d.getPlayerType() != null) { out.write(format("%s=%s%n", PLAYER, d.getPlayerType())); } - - if (d.isCustomPool()) { out.write(format("%s=%s%n", CSTM_POOL, "true")); } + if (d.getComment() != null) { + out.write(format("%s=%s%n", COMMENT, d.getComment().replaceAll("\n", ""))); + } + if (d.getPlayerType() != null) { + out.write(format("%s=%s%n", PLAYER, d.getPlayerType())); + } + + if (d.isCustomPool()) { + out.write(format("%s=%s%n", CSTM_POOL, "true")); + } out.write(format("%s%n", "[main]")); writeCardPool(d.getMain(), out); @@ -490,8 +623,57 @@ public class DeckManager { writeCardPool(d.getSideboard(), out); } - private static void writeCardPool(final ItemPoolView+ * writeDeck. + *
+ * + * @param d + * a {@link forge.deck.Deck} object. + * @param out + * a {@link java.io.BufferedWriter} object. + * @throws java.io.IOException + * if any. + */ + private static void writeDeckHtml(final Deck d, final BufferedWriter out) throws IOException { + Template temp = null; + +/* Create and adjust the configuration */ + Configuration cfg = new Configuration(); + try { + cfg.setClassForTemplateLoading(d.getClass(), "/"); + cfg.setObjectWrapper(new DefaultObjectWrapper()); + + /* ------------------------------------------------------------------- */ + /* You usually do these for many times in the application life-cycle: */ + + /* Get or create a template */ + temp = cfg.getTemplate("proxy-template.ftl"); + + + /* Create a data-model */ + Map root = new HashMap(); + root.put("title", d.getName()); + List list = new ArrayList(); + for (Card card : d.getMain().toForgeCardList().toArray()) { + //System.out.println(card.getSets().get(0).URL); + list.add(card.getSets().get(0).URL); + } + root.put("urls", list); + + /* Merge data-model with template */ + StringWriter sw = new StringWriter(); + temp.process(root, out); + out.flush(); + } catch (IOException e) { + System.out.println(e.toString()); + } catch (TemplateException e) { + System.out.println(e.toString()); + } + } + + private static void writeCardPool(final ItemPoolViewwriteDeck.
- * - * @param d a {@link forge.deck.Deck} object. - * @param f a {@link java.io.File} object. + *+ * writeDeck. + *
+ * + * @param d + * a {@link forge.deck.Deck} object. + * @param f + * a {@link java.io.File} object. */ - public static void writeDeck(Deck d, File f) { + public static void writeDeck(final Deck d, final File f) { try { BufferedWriter writer = new BufferedWriter(new FileWriter(f)); writeDeck(d, writer); @@ -523,4 +708,23 @@ public class DeckManager { } + /** + *+ * Write deck to HTML. + *
+ * + * @param d + * a {@link forge.deck.Deck} object. + * @param f + * a {@link java.io.File} object. + */ + public static void writeDeckHtml(final Deck d, final File f) { + try { + BufferedWriter writer = new BufferedWriter(new FileWriter(f)); + writeDeckHtml(d, writer); + writer.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } } diff --git a/src/main/java/forge/gui/deckeditor/DeckEditorCommonMenu.java b/src/main/java/forge/gui/deckeditor/DeckEditorCommonMenu.java index ed78d3d34b2..30261ab8702 100644 --- a/src/main/java/forge/gui/deckeditor/DeckEditorCommonMenu.java +++ b/src/main/java/forge/gui/deckeditor/DeckEditorCommonMenu.java @@ -1,5 +1,23 @@ package forge.gui.deckeditor; +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.nio.channels.FileChannel; +import java.util.ArrayList; + +import javax.swing.JFileChooser; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.JOptionPane; +import javax.swing.SwingUtilities; + +import org.apache.commons.lang3.StringUtils; + import forge.Card; import forge.CardList; import forge.Command; @@ -14,34 +32,21 @@ import forge.item.CardPrinted; import forge.item.ItemPool; import forge.properties.ForgeProps; import forge.properties.NewConstants; -import org.apache.commons.lang3.StringUtils; - -import java.awt.Component; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.io.*; -import java.nio.channels.FileChannel; -import java.util.ArrayList; - -import javax.swing.JFileChooser; -import javax.swing.JMenu; -import javax.swing.JMenuBar; -import javax.swing.JMenuItem; -import javax.swing.JOptionPane; -import javax.swing.SwingUtilities; /** - *Gui_DeckEditor_Menu class.
- * + *+ * Gui_DeckEditor_Menu class. + *
+ * * @author Forge * @version $Id$ */ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants { - /** ConstantserialVersionUID=-4037993759604768755L */
+ /** Constant serialVersionUID=-4037993759604768755L. */
private static final long serialVersionUID = -4037993759604768755L;
- /** Constant previousDirectory */
+ /** Constant previousDirectory. */
private static File previousDirectory = null;
private DeckManager deckManager;
@@ -53,24 +58,34 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants
private Command exitCommand;
-
-
- public DeckEditorCommonMenu(final DeckDisplay in_display, final DeckManager dckManager, final Command exit) {
- deckDisplay = in_display;
+ /**
+ *
+ * Menu for Deck Editor.
+ *
+ * @param inDisplay
+ * a DeckDisplay
+ * @param dckManager
+ * a DeckManager
+ * @param exit
+ * a Command
+ */
+ public DeckEditorCommonMenu(final DeckDisplay inDisplay, final DeckManager dckManager, final Command exit) {
+ deckDisplay = inDisplay;
exitCommand = exit;
deckManager = dckManager;
-
- //this is added just to make save() and saveAs() work ok
- //when first started up, just a silly patch
+
+ // this is added just to make save() and saveAs() work ok
+ // when first started up, just a silly patch
setDeckData("", true);
setupMenu();
setupSortMenu();
}
-
/**
- * setupSortMenu.
+ *+ * setupSortMenu. + *
*/ private void setupSortMenu() { JMenuItem name = new JMenuItem("Card Name"); @@ -96,11 +111,12 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants } }); - // 0 1 2 3 4 5 6 - //private String column[] = {"Qty", "Name", "Cost", "Color", "Type", "Stats", "Rarity"}; + // 0 1 2 3 4 5 6 + // private String column[] = {"Qty", "Name", "Cost", "Color", "Type", + // "Stats", "Rarity"}; cost.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent ev) { - ((DeckEditorCommon) deckDisplay).getTopTableModel().sort(4).sort(3).sort(2); + ((DeckEditorCommon) deckDisplay).getTopTableModel().sort(4).sort(3).sort(2); } }); @@ -124,15 +140,22 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants rarity.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent ev) { - //sort by cost, type, color, rarity + // sort by cost, type, color, rarity ((DeckEditorCommon) deckDisplay).getTopTableModel().sort(2).sort(4).sort(3).sort(6); } }); - } //setupSortMenu() - + } // setupSortMenu() + /** + * + * + * @param careAboutOldDeck + * a boolean + */ public void newConstructed(final boolean careAboutOldDeck) { - if (careAboutOldDeck && !canLeaveCurrentDeck()) { return; } + if (careAboutOldDeck && !canLeaveCurrentDeck()) { + return; + } setDeckData("", true); @@ -140,7 +163,9 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants } private void newRandomConstructed() { - if (!canLeaveCurrentDeck()) { return; } + if (!canLeaveCurrentDeck()) { + return; + } setDeckData("", false); @@ -148,7 +173,9 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants CardList random = new CardList(forge.AllZone.getCardFactory().getRandomCombinationWithoutRepetition(15 * 5)); ItemPoolexportDeck.
+ *+ * exportDeck. + *
*/ private void exportDeck() { File filename = getExportFilename(); - if (filename == null) { return; } + if (filename == null) { + return; + } Deck deck = getDeck(); try { @@ -233,12 +266,11 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants } } - private File getExportFilename() { JFileChooser save = new JFileChooser(previousDirectory); save.setDialogTitle("Export Deck Filename"); save.setDialogType(JFileChooser.SAVE_DIALOG); - save.setFileFilter(DeckManager.dckFilter); + save.setFileFilter(DeckManager.DCK_FILTER); if (save.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) { File file = save.getSelectedFile(); @@ -251,18 +283,68 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants return null; } - private void openDeck(GameType gameType) { - if (!canLeaveCurrentDeck()) { return; } - - String name = getUserInput_OpenDeck(gameType); + /** + *+ * Generate Proxy for a Deck. + *
+ */ + private void generateProxies() { + File filename = getProxiesFilename(); + if (filename == null) { + return; + } - if (StringUtils.isBlank(name)) { return; } + Deck deck = getDeck(); + try { + DeckManager.writeDeckHtml(deck, filename); + } catch (Exception ex) { + ErrorViewer.showError(ex); + throw new RuntimeException("Gui_DeckEditor_Menu : printProxies() error, " + ex); + } + } + + private File getProxiesFilename() { + JFileChooser save = new JFileChooser(previousDirectory); + save.setDialogTitle("Proxy HTML Filename"); + save.setDialogType(JFileChooser.SAVE_DIALOG); + save.setFileFilter(DeckManager.HTML_FILTER); + + if (save.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) { + File file = save.getSelectedFile(); + String check = file.getAbsolutePath(); + + previousDirectory = file.getParentFile(); + + return check.endsWith(".html") ? file : new File(check + ".html"); + } + return null; + } + + private void openDeck(final GameType gameType) { + if (!canLeaveCurrentDeck()) { + return; + } + + String name = getUserInputOpenDeck(gameType); + + if (StringUtils.isBlank(name)) { + return; + } Deck deck = gameType == GameType.Draft ? deckManager.getDraftDeck(name)[0] : deckManager.getDeck(name); showDeck(deck, gameType); } - - public final void showDeck(final Deck deck, final GameType gameType) { + + /** + * + * showDeck. + * + * @param deck + * a Deck + * @param gameType + * a GameType + */ + public void showDeck(final Deck deck, final GameType gameType) { setDeckData(deck.getName(), true); if (gameType.isLimited()) { deckDisplay.setDeck(deck.getSideboard(), deck.getMain(), gameType); @@ -270,8 +352,6 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants deckDisplay.setDeck(null, deck.getMain(), gameType); } } - - private void save() { @@ -279,16 +359,16 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants saveAs(); return; } - + Deck deck = getDeck(); if (deckDisplay.getGameType().equals(GameType.Draft)) { setDeckData(currentDeckName, true); - //write booster deck + // write booster deck Deck[] all = deckManager.getDraftDeck(currentDeckName); all[0] = deck; deckManager.addDraftDeck(all); DeckManager.writeDraftDecks(all); - } else { //constructed or sealed + } else { // constructed or sealed setDeckData(currentDeckName, true); deckManager.addDeck(deck); DeckManager.writeDeck(deck, DeckManager.makeFileName(deck)); @@ -299,12 +379,14 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants private void saveAs() { String name = getDeckNameFromDialog(); - if (name.equals("")) { return; } + if (name.equals("")) { + return; + } setDeckData(name, true); - + Deck deck = getDeck(); if (deckDisplay.getGameType().equals(GameType.Draft)) { - //MUST copy array + // MUST copy array Deck[] read = deckManager.getDraftDeck(currentDeckName); Deck[] all = new Deck[read.length]; @@ -313,21 +395,24 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants all[0] = deck; deckManager.addDraftDeck(all); DeckManager.writeDraftDecks(all); - } else {//constructed and sealed + } else { // constructed and sealed deckManager.addDeck(deck); DeckManager.writeDeck(deck, DeckManager.makeFileName(deck)); } isDeckSaved = true; } - private void delete() { - if (StringUtils.isBlank(currentDeckName)) { return; } + if (StringUtils.isBlank(currentDeckName)) { + return; + } int n = JOptionPane.showConfirmDialog(null, "Do you want to delete this deck " + currentDeckName + " ?", "Delete", JOptionPane.YES_NO_OPTION); - - if (n == JOptionPane.NO_OPTION) { return; } + + if (n == JOptionPane.NO_OPTION) { + return; + } if (deckDisplay.getGameType().equals(GameType.Draft)) { deckManager.deleteDraftDeck(currentDeckName); @@ -339,18 +424,32 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants deckDisplay.setDeck(null, null, deckDisplay.getGameType()); } - public final void close() { - if (!canLeaveCurrentDeck()) { return; } + /** + * + * close window. + */ + public void close() { + if (!canLeaveCurrentDeck()) { + return; + } exitCommand.execute(); } private boolean canLeaveCurrentDeck() { - if (isSaved()) { return true; } - String message = String.format("Do you wish to save changes you made to your current deck '%s'?", currentDeckName); - int choice = JOptionPane.showConfirmDialog((Component) deckDisplay, message, - "You have unsaved changes in your deck", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); - if (JOptionPane.CANCEL_OPTION == choice) { return false; } - if (JOptionPane.NO_OPTION == choice) { return true; } + if (isSaved()) { + return true; + } + String message = String.format("Do you wish to save changes you made to your current deck '%s'?", + currentDeckName); + int choice = JOptionPane + .showConfirmDialog((Component) deckDisplay, message, "You have unsaved changes in your deck", + JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); + if (JOptionPane.CANCEL_OPTION == choice) { + return false; + } + if (JOptionPane.NO_OPTION == choice) { + return true; + } Deck deck = getDeck(); deck.setName(currentDeckName); @@ -371,31 +470,54 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants deckDisplay.setTitle("Deck Editor : " + currentDeckName); } - public String getDeckName() { return currentDeckName; } - public boolean isSaved() { return isDeckSaved; } + /** + * + * Get Deck Name. + * + * @return a String + */ + public String getDeckName() { + return currentDeckName; + } /** - *getUserInput_GetDeckName.
- * + * + * Is Saved. + * + * @return a boolean + */ + public boolean isSaved() { + return isDeckSaved; + } + + /** + *+ * getUserInput_GetDeckName. + *
+ * * @return a {@link java.lang.String} object. */ private String getDeckNameFromDialog() { Object o = JOptionPane.showInputDialog(null, "Save As", "Deck Name", JOptionPane.OK_CANCEL_OPTION); - if (o == null) { return ""; } + if (o == null) { + return ""; + } String deckName = DeckManager.cleanDeckName(o.toString()); boolean isDraft = deckDisplay.getGameType() == GameType.Draft; boolean isUniqueName = isDraft ? deckManager.isUniqueDraft(deckName) : deckManager.isUnique(deckName); boolean isGoodName = isUniqueName && StringUtils.isNotBlank(deckName); - if (isGoodName) { return deckName; } + if (isGoodName) { + return deckName; + } JOptionPane.showMessageDialog(null, "Please pick another deck name, another deck currently has that name."); return getDeckNameFromDialog(); } - private String getUserInput_OpenDeck(final GameType deckType) { + private String getUserInputOpenDeck(final GameType deckType) { ArrayListCardPool class.
* Represents a list of cards with amount of each + * */ public final class ItemPool