diff --git a/pom.xml b/pom.xml index ee8fbaaaee4..5da95d7022e 100644 --- a/pom.xml +++ b/pom.xml @@ -198,7 +198,7 @@ com.google.code.maven-replacer-plugin maven-replacer-plugin - 1.3.8 + 1.3.9 package @@ -275,7 +275,7 @@ org.apache.maven.wagon wagon-ftp - 1.0 + 2.0 @@ -291,7 +291,7 @@ org.apache.maven.wagon wagon-ftp - 1.0 + 2.0 @@ -535,17 +535,17 @@ com.google.guava guava - r09 + 10.0 com.thoughtworks.xstream xstream - 1.3.1 + 1.4.1 org.testng testng - 6.1.1 + 6.2.1 test @@ -621,7 +621,12 @@ javax.mail mail - 1.4.1 + 1.4.4 + + + org.freemarker + freemarker + 2.3.18 diff --git a/src/main/java/forge/deck/DeckManager.java b/src/main/java/forge/deck/DeckManager.java index 2df9b2c3e1e..06ca2bff94d 100644 --- a/src/main/java/forge/deck/DeckManager.java +++ b/src/main/java/forge/deck/DeckManager.java @@ -1,6 +1,37 @@ package forge.deck; +import static java.lang.Integer.parseInt; +import static java.lang.String.format; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.NoSuchElementException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.swing.JOptionPane; +import javax.swing.filechooser.FileFilter; + +import org.apache.commons.lang3.StringUtils; + +import freemarker.template.TemplateException; +import freemarker.template.Template; +import freemarker.template.Configuration; +import freemarker.template.DefaultObjectWrapper; + +import forge.Card; import forge.FileUtil; import forge.PlayerType; import forge.error.ErrorViewer; @@ -11,46 +42,36 @@ import forge.item.ItemPoolView; import forge.properties.ForgeProps; import forge.properties.NewConstants; -import java.io.*; -import java.util.*; -import java.util.Map.Entry; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.swing.JOptionPane; -import javax.swing.filechooser.FileFilter; - -import org.apache.commons.lang3.StringUtils; - -import static java.lang.Integer.parseInt; -import static java.lang.String.format; - - //reads and writeDeck Deck objects /** - *

DeckManager class.

- * + *

+ * DeckManager class. + *

+ * * @author Forge * @version $Id$ */ public class DeckManager { - /** Constant BDKFileFilter */ - 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; - Map deckMap; - Map draftMap; + private Map deckMap; + private Map draftMap; /** - *

Constructor 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 Collection getDecks() { + /** + * + * Get Decks. + * + * @return a Collection + */ + public final Collection getDecks() { return deckMap.values(); } - - public Map getDraftDecks() { + /** + * + * Get draft decks. + * + * @return a Map + */ + public final Map getDraftDecks() { return new HashMap(draftMap); } - - public ArrayList getDeckNames(final GameType deckType) { + /** + * + * Get names of decks. + * + * @param deckType + * a GameType + * @return a ArrayList + */ + public final ArrayList getDeckNames(final GameType deckType) { ArrayList list = new ArrayList(); - //only get decks according to the OldGuiNewGame screen option + // only get decks according to the OldGuiNewGame screen option if (deckType.equals(GameType.Draft)) { for (String s : getDraftDecks().keySet()) { list.add(s); @@ -238,19 +317,21 @@ public class DeckManager { Collections.sort(list); return list; - } + } /** - *

readAllDecks.

+ *

+ * readAllDecks. + *

*/ - public void readAllDecks() { + public final void readAllDecks() { deckMap.clear(); draftMap.clear(); File[] files; List decksThatFailedToLoad = new ArrayList(); - files = deckDir.listFiles(DCKFileFilter); + files = deckDir.listFiles(DCK_FILE_FILTER); for (File file : files) { try { Deck newDeck = readDeck(file); @@ -262,45 +343,49 @@ public class DeckManager { } if (!decksThatFailedToLoad.isEmpty()) { - JOptionPane.showMessageDialog(null, StringUtils.join(decksThatFailedToLoad, System.getProperty("line.separator")), - "Some of your decks were not loaded.", JOptionPane.WARNING_MESSAGE); + JOptionPane.showMessageDialog(null, + StringUtils.join(decksThatFailedToLoad, System.getProperty("line.separator")), + "Some of your decks were not loaded.", JOptionPane.WARNING_MESSAGE); } - files = deckDir.listFiles(BDKFileFilter); + files = deckDir.listFiles(bdkFileFilter); for (File file : files) { Deck[] d = new Deck[8]; boolean gotError = false; for (int i = 0; i < d.length; i++) { d[i] = readDeck(new File(file, i + ".dck")); - if(d[i] == null) { + if (d[i] == null) { gotError = true; break; } } - if (!gotError) - { + if (!gotError) { draftMap.put(d[0].getName(), d); } } } /** - *

readDeck.

- * - * @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) { - - List lines = FileUtil.readFile(deckFile); - if (lines.isEmpty()) { return null; } + public static Deck readDeck(final File deckFile) { + List lines = FileUtil.readFile(deckFile); + if (lines.isEmpty()) { + return null; + } Deck d = new Deck(); - String firstLine = lines.get(0); + String firstLine = lines.get(0); if (!firstLine.startsWith("[") || firstLine.equalsIgnoreCase("[general]")) { readDeckOldMetadata(lines.iterator(), d); } else { @@ -311,47 +396,50 @@ public class DeckManager { return d; } - - private static Iterator findSection(final Iterable lines, final String sectionName) - { + + private static Iterator findSection(final Iterable lines, final String sectionName) { Iterator lineIterator = lines.iterator(); String toSearch = String.format("[%s]", sectionName); - while(lineIterator.hasNext()) { - if (toSearch.equalsIgnoreCase(lineIterator.next())) { break; } + while (lineIterator.hasNext()) { + if (toSearch.equalsIgnoreCase(lineIterator.next())) { + break; + } } - + return lineIterator; } - - private static void readDeckMetadata(final Iterator lineIterator, final Deck d) - { + + private static void readDeckMetadata(final Iterator lineIterator, final Deck d) { while (lineIterator.hasNext()) { String line = lineIterator.next(); - if( line.startsWith("[") ) { break; } - + if (line.startsWith("[")) { + break; + } + String[] linedata = line.split("=", 2); String field = linedata[0].toLowerCase(); String value = ""; - - if (linedata.length > 1) + + if (linedata.length > 1) { value = linedata[1]; - + } + if (NAME.equalsIgnoreCase(field)) { d.setName(value); - + } else if (COMMENT.equalsIgnoreCase(field)) { d.setComment(value); - + } else if (DECK_TYPE.equalsIgnoreCase(field)) { d.setDeckType(GameType.smartValueOf(value)); - + } else if (CSTM_POOL.equalsIgnoreCase(field)) { d.setCustomPool(value.equalsIgnoreCase("true")); - + } else if (PLAYER.equalsIgnoreCase(field)) { if ("human".equalsIgnoreCase(value)) { d.setPlayerType(PlayerType.HUMAN); - + } else { d.setPlayerType(PlayerType.COMPUTER); } @@ -360,18 +448,21 @@ public class DeckManager { } /** - *

readDeckOld.

- * - * @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 Iterator iterator, Deck d) { + private static void readDeckOldMetadata(final Iterator iterator, final Deck d) { String line; - //readDeck name + // readDeck name String name = iterator.next(); - //readDeck comments + // readDeck comments String comment = null; while (iterator.hasNext() && (line = iterator.next()) != null && !line.equals("[general]")) { if (comment == null) { @@ -381,9 +472,9 @@ public class DeckManager { } } - //readDeck deck type - - GameType deckType = iterator.hasNext() ? GameType.smartValueOf(iterator.next()) : GameType.Constructed; + // readDeck deck type + + GameType deckType = iterator.hasNext() ? GameType.smartValueOf(iterator.next()) : GameType.Constructed; d.setName(name); d.setComment(comment); @@ -397,13 +488,17 @@ public class DeckManager { while (lineIterator.hasNext()) { String line = lineIterator.next(); - if (line.startsWith("[")) { break; } // there comes another section + if (line.startsWith("[")) { + break; + } // there comes another section Matcher m = p.matcher(line.trim()); m.matches(); String sCnt = m.group(2); String cardName = m.group(3); - if (StringUtils.isBlank(cardName)) { continue; } + if (StringUtils.isBlank(cardName)) { + continue; + } int count = sCnt == null ? 1 : parseInt(sCnt); for (int i = 0; i < count; i++) { @@ -413,14 +508,21 @@ public class DeckManager { return result; } - private static String deriveFileName(String deckName) { - //skips all but the listed characters + private static String deriveFileName(final String deckName) { + // skips all but the listed characters return deckName.replaceAll("[^-_$#@.{[()]} a-zA-Z0-9]", ""); } - //only accepts numbers, letters or dashes up to 20 characters in length - public static String cleanDeckName(String in) - { + // only accepts numbers, letters or dashes up to 20 characters in length + /** + * + * Clean deck name. + * + * @param in + * a String + * @return a String + */ + public static String cleanDeckName(final String in) { char[] c = in.toCharArray(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < c.length && i < 20; i++) { @@ -431,24 +533,45 @@ public class DeckManager { return sb.toString(); } - public static File makeFileName(String deckName, GameType deckType) - { + /** + * + * Make file name. + * + * @param deckName + * a String + * @param deckType + * a GameType + * @return a File + */ + public static File makeFileName(final String deckName, final GameType deckType) { File path = ForgeProps.getFile(NewConstants.NEW_DECKS); - if (deckType == GameType.Draft) + if (deckType == GameType.Draft) { return new File(path, deriveFileName(deckName) + ".bdk"); - else + } else { return new File(path, deriveFileName(deckName) + ".dck"); + } } - - public static File makeFileName(Deck deck) - { + + /** + * + * Make file name. + * + * @param deck + * a Deck + * @return a File + */ + public static File makeFileName(final Deck deck) { return makeFileName(deck.getName(), deck.getDeckType()); } /** - *

writeAllDecks.

+ * + * 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 pool, final BufferedWriter out) throws IOException - { + /** + *

+ * 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 ItemPoolView pool, + final BufferedWriter out) throws IOException { List> main2sort = pool.getOrderedList(); Collections.sort(main2sort, TableSorter.byNameThenSet); for (Entry e : main2sort) { @@ -505,14 +687,17 @@ public class DeckManager { } } - /** - *

writeDeck.

- * - * @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 { - /** Constant serialVersionUID=-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)); ItemPool cpRandom = new ItemPool(CardPrinted.class); - for (Card c : random) { cpRandom.add(CardDb.instance().getCard(c)); } + for (Card c : random) { + cpRandom.add(CardDb.instance().getCard(c)); + } cpRandom.add(CardDb.instance().getCard("Forest")); cpRandom.add(CardDb.instance().getCard("Island")); cpRandom.add(CardDb.instance().getCard("Plains")); @@ -160,22 +187,25 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants } private void newGenerateConstructed() { - if (!canLeaveCurrentDeck()) { return; } + if (!canLeaveCurrentDeck()) { + return; + } setDeckData("", false); GenerateConstructedDeck gen = new GenerateConstructedDeck(); ItemPool generated = new ItemPool(CardPrinted.class); - for (Card c : gen.generateDeck()) { generated.add(CardDb.instance().getCard(c)); } + for (Card c : gen.generateDeck()) { + generated.add(CardDb.instance().getCard(c)); + } deckDisplay.setDeck(null, generated, GameType.Constructed); } - private File getImportFilename() { JFileChooser chooser = new JFileChooser(previousDirectory); - chooser.addChoosableFileFilter(DeckManager.dckFilter); + chooser.addChoosableFileFilter(DeckManager.DCK_FILTER); int returnVal = chooser.showOpenDialog(null); if (returnVal == JFileChooser.APPROVE_OPTION) { @@ -184,8 +214,7 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants return file; } return null; - } //openFileDialog() - + } // openFileDialog() private void importDeck() { File file = getImportFilename(); @@ -218,11 +247,15 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants } /** - *

exportDeck.

+ *

+ * 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) { ArrayList choices = deckManager.getDeckNames(deckType); if (choices.isEmpty()) { JOptionPane.showMessageDialog(null, "No decks found", "Open Deck", JOptionPane.PLAIN_MESSAGE); @@ -406,9 +528,12 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants return o == null ? null : o.toString(); } - // deck.setName(currentDeckName); - + + /** + * + * Notify of a Deck Change. + */ public void notifyDeckChange() { isDeckSaved = false; } @@ -416,24 +541,22 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants private void setupMenu() { JMenuItem newConstructed = new JMenuItem("New Deck - Constructed"); - //JMenuItem newSealed = new JMenuItem("New Deck - Sealed"); - //JMenuItem newDraft = new JMenuItem("New Deck - Draft"); + // JMenuItem newSealed = new JMenuItem("New Deck - Sealed"); + // JMenuItem newDraft = new JMenuItem("New Deck - Draft"); JMenuItem newRandomConstructed = new JMenuItem("New Deck - Generate Random Constructed Cardpool"); JMenuItem newGenerateConstructed = new JMenuItem("New Deck - Generate Constructed Deck"); - JMenuItem importDeck = new JMenuItem("Import Deck"); JMenuItem exportDeck = new JMenuItem("Export Deck"); // JMenuItem downloadDeck = new JMenuItem("Download Deck"); - JMenuItem openConstructed = new JMenuItem("Open Deck - Constructed"); JMenuItem openSealed = new JMenuItem("Open Deck - Sealed"); JMenuItem openDraft = new JMenuItem("Open Deck - Draft"); - //newDraftItem = newDraft; - //newDraftItem.setEnabled(false); + // newDraftItem = newDraft; + // newDraftItem.setEnabled(false); JMenuItem save = new JMenuItem("Save"); JMenuItem saveAs = new JMenuItem("Save As"); @@ -443,8 +566,8 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants JMenu fileMenu = new JMenu("Deck Actions"); fileMenu.add(newConstructed); - //fileMenu.add(newSealed); - //fileMenu.add(newDraft); + // fileMenu.add(newSealed); + // fileMenu.add(newDraft); fileMenu.addSeparator(); fileMenu.add(openConstructed); @@ -454,7 +577,25 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants fileMenu.add(importDeck); fileMenu.add(exportDeck); - //fileMenu.add(downloadDeck); + + JMenuItem generateProxies = new JMenuItem("Generate Proxies..."); + fileMenu.add(generateProxies); + + generateProxies.addActionListener(new ActionListener() { + public void actionPerformed(final ActionEvent ev) { + try { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + generateProxies(); + } + }); + } catch (Exception ex) { + ErrorViewer.showError(ex); + throw new RuntimeException("Gui_DeckEditor_Menu : generateProxies() error - " + ex); + } + } + }); + // fileMenu.add(downloadDeck); fileMenu.addSeparator(); fileMenu.add(newRandomConstructed); @@ -470,7 +611,7 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants this.add(fileMenu); - //add listeners + // add listeners exportDeck.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent ev) { try { @@ -486,7 +627,6 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants } }); - importDeck.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent ev) { try { @@ -502,21 +642,15 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants } }); -/* downloadDeck.addActionListener(new ActionListener() { - public void actionPerformed(final ActionEvent ev) { - try { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - downloadDeck(); - } - }); - } catch (Exception ex) { - ErrorViewer.showError(ex); - throw new RuntimeException("Gui_DeckEditor_Menu : downloadDeck() error - " + ex); - } - } - }); -*/ + /* + * downloadDeck.addActionListener(new ActionListener() { public void + * actionPerformed(final ActionEvent ev) { try { + * SwingUtilities.invokeLater(new Runnable() { public void run() { + * downloadDeck(); } }); } catch (Exception ex) { + * ErrorViewer.showError(ex); throw new + * RuntimeException("Gui_DeckEditor_Menu : downloadDeck() error - " + + * ex); } } }); + */ newConstructed.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent ev) { try { @@ -532,7 +666,6 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants } }); - newRandomConstructed.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent ev) { try { @@ -548,7 +681,6 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants } }); - newGenerateConstructed.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent ev) { try { @@ -668,5 +800,5 @@ public final class DeckEditorCommonMenu extends JMenuBar implements NewConstants } } }); - }//setupMenu() + } // setupMenu() } diff --git a/src/main/java/forge/item/ItemPool.java b/src/main/java/forge/item/ItemPool.java index 49b83abaa8d..79e7249ba36 100644 --- a/src/main/java/forge/item/ItemPool.java +++ b/src/main/java/forge/item/ItemPool.java @@ -7,18 +7,40 @@ import java.util.Map.Entry; /** *

CardPool class.

* Represents a list of cards with amount of each + * */ public final class ItemPool extends ItemPoolView { // Constructors here + /** + * + * ItemPool Constructor. + * @param cls a T + */ public ItemPool(final Class cls) { super(cls); } + /** + * + * ItemPool Constructor. + * @param names a String + * @param cls a T + */ @SuppressWarnings("unchecked") // conversion here must be safe - public ItemPool(final Iterable names, final Class cls) { super(cls); addAllCards((Iterable) CardDb.instance().getCards(names)); } + public ItemPool(final Iterable names, final Class cls) { + super(cls); + addAllCards((Iterable) CardDb.instance().getCards(names)); + } + /** + * + * createFrom method. + * @param from a Tin + * @param clsHint a Tout + * @return InventoryItem + */ @SuppressWarnings("unchecked") - public static ItemPool - createFrom(ItemPoolView from, Class clsHint) + public static ItemPool + createFrom(final ItemPoolView from, final Class clsHint) { ItemPool result = new ItemPool(clsHint); if (from != null) { @@ -31,10 +53,17 @@ public final class ItemPool extends ItemPoolView { } return result; } - + + /** + * + * createFrom method. + * @param from a Iterable + * @param clsHint a Class + * @return InventoryItem + */ @SuppressWarnings("unchecked") public static ItemPool - createFrom(Iterable from, Class clsHint) + createFrom(final Iterable from, final Class clsHint) { ItemPool result = new ItemPool(clsHint); if (from != null) { @@ -48,26 +77,55 @@ public final class ItemPool extends ItemPoolView { } // get + /** + * + * Get item view. + * @return a ItemPoolView + */ public ItemPoolView getView() { return new ItemPoolView(Collections.unmodifiableMap(cards), myClass); } // Cards manipulation - public void add(final T card) { add(card, 1); } + /** + * + * Add Card. + * @param card a T + */ + public void add(final T card) { + add(card, 1); + } + /** + * + * add method. + * @param card a T + * @param amount a int + */ public void add(final T card, final int amount) { if (amount <= 0) { return; } cards.put(card, count(card) + amount); isListInSync = false; } + private void put(final T card, final int amount) { cards.put(card, amount); isListInSync = false; - } - + } + + /** + * + * addAllCards. + * @param cards a + */ @SuppressWarnings("unchecked") public void addAllCards(final Iterable cards) { for (U cr : cards) { if (myClass.isInstance(cr)) { add((T) cr); } } isListInSync = false; } + /** + * + * addAll. + * @param map + */ @SuppressWarnings("unchecked") public void addAll(final Iterable> map) { for (Entry e : map) { @@ -77,8 +135,22 @@ public final class ItemPool extends ItemPoolView { } isListInSync = false; } - - public void remove(final T card) { remove(card, 1); } + + /** + * + * Remove. + * @param card a T + */ + public void remove(final T card) { + remove(card, 1); + } + + /** + * + * Remove. + * @param card a T + * @param amount a int + */ public void remove(final T card, final int amount) { int count = count(card); if (count == 0 || amount <= 0) { return; } @@ -86,10 +158,19 @@ public final class ItemPool extends ItemPoolView { else { cards.put(card, count - amount); } isListInSync = false; } + /** + * + * RemoveAll. + * @param map a T + */ public void removeAll(final Iterable> map) { for (Entry e : map) { remove(e.getKey(), e.getValue()); } isListInSync = false; } + /** + * + * Clear. + */ public void clear() { cards.clear(); isListInSync = false; } } diff --git a/src/main/java/forge/quest/gui/main/QuestEventManager.java b/src/main/java/forge/quest/gui/main/QuestEventManager.java index 5dfba9801b6..a61973d29a1 100644 --- a/src/main/java/forge/quest/gui/main/QuestEventManager.java +++ b/src/main/java/forge/quest/gui/main/QuestEventManager.java @@ -46,7 +46,7 @@ public class QuestEventManager { DeckManager manager = new DeckManager(file); - File[] allFiles = ForgeProps.getFile(NewConstants.QUEST.DECKS).listFiles(DeckManager.DCKFileFilter); + File[] allFiles = ForgeProps.getFile(NewConstants.QUEST.DECKS).listFiles(DeckManager.DCK_FILE_FILTER); for(File f : allFiles) { contents = FileUtil.readFile(f);