mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 18:28:00 +00:00
Decks save/load operations moved to DeckIO class, references updated
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -11145,6 +11145,7 @@ src/main/java/forge/control/match/package-info.java -text
|
||||
src/main/java/forge/control/package-info.java -text
|
||||
src/main/java/forge/deck/Deck.java svneol=native#text/plain
|
||||
src/main/java/forge/deck/DeckGeneration.java -text
|
||||
src/main/java/forge/deck/DeckIO.java -text
|
||||
src/main/java/forge/deck/DeckManager.java svneol=native#text/plain
|
||||
src/main/java/forge/deck/DeckRecognizer.java -text
|
||||
src/main/java/forge/deck/generate/Generate2ColorDeck.java svneol=native#text/plain
|
||||
|
||||
@@ -18,6 +18,7 @@ import forge.Constant;
|
||||
import forge.PlayerType;
|
||||
import forge.control.FControl;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckIO;
|
||||
import forge.deck.DeckManager;
|
||||
import forge.game.GameType;
|
||||
import forge.game.limited.SealedDeck;
|
||||
@@ -209,7 +210,7 @@ public class ControlSealed {
|
||||
aiDeck.setName("AI_" + sDeckName);
|
||||
aiDeck.setPlayerType(PlayerType.COMPUTER);
|
||||
deckManager.addDeck(aiDeck);
|
||||
DeckManager.writeDeck(aiDeck, DeckManager.makeFileName(aiDeck));
|
||||
DeckIO.writeDeck(aiDeck, DeckIO.makeFileName(aiDeck));
|
||||
|
||||
view.getParentView().getUtilitiesController().showDeckEditor(GameType.Sealed, deck);
|
||||
}
|
||||
|
||||
518
src/main/java/forge/deck/DeckIO.java
Normal file
518
src/main/java/forge/deck/DeckIO.java
Normal file
@@ -0,0 +1,518 @@
|
||||
package forge.deck;
|
||||
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
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.TreeMap;
|
||||
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 forge.Card;
|
||||
import forge.PlayerType;
|
||||
import forge.game.GameType;
|
||||
import forge.gui.deckeditor.TableSorter;
|
||||
import forge.item.CardPrinted;
|
||||
import forge.item.ItemPoolView;
|
||||
import forge.properties.ForgeProps;
|
||||
import forge.properties.NewConstants;
|
||||
import forge.util.FileUtil;
|
||||
import forge.util.SectionUtil;
|
||||
import freemarker.template.Configuration;
|
||||
import freemarker.template.DefaultObjectWrapper;
|
||||
import freemarker.template.Template;
|
||||
import freemarker.template.TemplateException;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class DeckIO {
|
||||
|
||||
private static final String NAME = "Name";
|
||||
private static final String DECK_TYPE = "Deck Type";
|
||||
private static final String COMMENT = "Comment";
|
||||
private static final String PLAYER = "Player";
|
||||
private static final String CSTM_POOL = "Custom Pool";
|
||||
/** Constant <code>BDKFileFilter</code>. */
|
||||
static FilenameFilter bdkFileFilter = new FilenameFilter() {
|
||||
@Override
|
||||
public boolean accept(final File dir, final String name) {
|
||||
return name.endsWith(".bdk");
|
||||
}
|
||||
};
|
||||
/** Constant <code>DCKFileFilter</code>. */
|
||||
public static final FilenameFilter DCK_FILE_FILTER = new FilenameFilter() {
|
||||
@Override
|
||||
public boolean accept(final File dir, final String name) {
|
||||
return name.endsWith(".dck");
|
||||
}
|
||||
};
|
||||
/** The Constant DCK_FILTER. */
|
||||
public static final FileFilter DCK_FILTER = new FileFilter() {
|
||||
@Override
|
||||
public boolean accept(final File f) {
|
||||
return f.getName().endsWith(".dck") || f.isDirectory();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Simple Deck File .dck";
|
||||
}
|
||||
};
|
||||
/** The Constant HTML_FILTER. */
|
||||
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";
|
||||
}
|
||||
};
|
||||
/**
|
||||
* <p>
|
||||
* readDeck.
|
||||
* </p>
|
||||
*
|
||||
* @param deckFile
|
||||
* a {@link java.io.File} object.
|
||||
* @return a {@link forge.deck.Deck} object.
|
||||
*/
|
||||
public static Deck readDeck(final File deckFile) {
|
||||
|
||||
final List<String> lines = FileUtil.readFile(deckFile);
|
||||
final Map<String, List<String>> sections = SectionUtil.parseSections(lines);
|
||||
if (sections.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final Deck d = new Deck();
|
||||
|
||||
final String firstLine = lines.get(0);
|
||||
if (!firstLine.startsWith("[") || firstLine.equalsIgnoreCase("[general]")) {
|
||||
readDeckOldMetadata(lines.iterator(), d);
|
||||
} else {
|
||||
readDeckMetadata(sections.get("metadata"), d);
|
||||
}
|
||||
d.setMain(readCardList(sections.get("main")));
|
||||
d.setSideboard(readCardList(sections.get("sideboard")));
|
||||
|
||||
return d;
|
||||
}
|
||||
|
||||
private static void readDeckMetadata(final Iterable<String> lines, final Deck d) {
|
||||
if (lines == null) {
|
||||
return;
|
||||
}
|
||||
final Iterator<String> lineIterator = lines.iterator();
|
||||
while (lineIterator.hasNext()) {
|
||||
final String line = lineIterator.next();
|
||||
|
||||
final String[] linedata = line.split("=", 2);
|
||||
final String field = linedata[0].toLowerCase();
|
||||
String value = "";
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* readDeckOld.
|
||||
* </p>
|
||||
*
|
||||
* @param iterator
|
||||
* a {@link java.util.ListIterator} object.
|
||||
* @return a {@link forge.deck.Deck} object.
|
||||
*/
|
||||
private static void readDeckOldMetadata(final Iterator<String> iterator, final Deck d) {
|
||||
|
||||
String line;
|
||||
// readDeck name
|
||||
final String name = iterator.next();
|
||||
|
||||
// readDeck comments
|
||||
String comment = null;
|
||||
while (iterator.hasNext()) {
|
||||
line = iterator.next();
|
||||
if ((line != null) && !line.equals("[general")) {
|
||||
if (comment == null) {
|
||||
comment = line;
|
||||
} else {
|
||||
comment += "\n" + line;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// readDeck deck type
|
||||
|
||||
final GameType deckType = iterator.hasNext() ? GameType.smartValueOf(iterator.next()) : GameType.Constructed;
|
||||
|
||||
d.setName(name);
|
||||
d.setComment(comment);
|
||||
d.setDeckType(deckType);
|
||||
}
|
||||
|
||||
// Precondition: iterator should point at the first line of cards list
|
||||
private static List<String> readCardList(final Iterable<String> lines) {
|
||||
final List<String> result = new ArrayList<String>();
|
||||
final Pattern p = Pattern.compile("((\\d+)\\s+)?(.*?)");
|
||||
|
||||
if (lines == null) {
|
||||
return result;
|
||||
}
|
||||
|
||||
final Iterator<String> lineIterator = lines.iterator();
|
||||
while (lineIterator.hasNext()) {
|
||||
final String line = lineIterator.next();
|
||||
if (line.startsWith("[")) {
|
||||
break;
|
||||
} // there comes another section
|
||||
|
||||
final Matcher m = p.matcher(line.trim());
|
||||
m.matches();
|
||||
final String sCnt = m.group(2);
|
||||
final String cardName = m.group(3);
|
||||
if (StringUtils.isBlank(cardName)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
final int count = sCnt == null ? 1 : Integer.parseInt(sCnt);
|
||||
for (int i = 0; i < count; i++) {
|
||||
result.add(cardName);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
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
|
||||
/**
|
||||
*
|
||||
* Clean deck name.
|
||||
*
|
||||
* @param in
|
||||
* a String
|
||||
* @return a String
|
||||
*/
|
||||
public static String cleanDeckName(final String in) {
|
||||
final char[] c = in.toCharArray();
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; (i < c.length) && (i < 20); i++) {
|
||||
if (Character.isLetterOrDigit(c[i]) || (c[i] == '-')) {
|
||||
sb.append(c[i]);
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Make file name.
|
||||
*
|
||||
* @param deckName
|
||||
* a String
|
||||
* @param deckType
|
||||
* a GameType
|
||||
* @return a File
|
||||
*/
|
||||
public static File makeFileName(final String deckName, final GameType deckType) {
|
||||
final File path = ForgeProps.getFile(NewConstants.NEW_DECKS);
|
||||
if (deckType == GameType.Draft) {
|
||||
return new File(path, deriveFileName(deckName) + ".bdk");
|
||||
} else {
|
||||
return new File(path, deriveFileName(deckName) + ".dck");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Make file name.
|
||||
*
|
||||
* @param deck
|
||||
* a Deck
|
||||
* @return a File
|
||||
*/
|
||||
public static File makeFileName(final Deck deck) {
|
||||
return makeFileName(deck.getName(), deck.getDeckType());
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Write draft Decks.
|
||||
*
|
||||
* @param drafts
|
||||
* a Deck[]
|
||||
*/
|
||||
public static void writeDraftDecks(final Deck[] drafts) {
|
||||
final File f = makeFileName(drafts[0]);
|
||||
f.mkdir();
|
||||
for (int i = 0; i < drafts.length; i++) {
|
||||
FileUtil.writeFile(new File(f, i + ".dck"), serializeDeck(drafts[i]));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* writeDeck.
|
||||
* </p>
|
||||
*
|
||||
* @param d
|
||||
* a {@link forge.deck.Deck} object.
|
||||
* @param out
|
||||
* a {@link java.io.BufferedWriter} object.
|
||||
* @throws java.io.IOException
|
||||
* if any.
|
||||
*/
|
||||
private static List<String> serializeDeck(final Deck d) {
|
||||
final List<String> out = new ArrayList<String>();
|
||||
out.add(String.format("[metadata]"));
|
||||
|
||||
out.add(String.format("%s=%s", NAME, d.getName().replaceAll("\n", "")));
|
||||
out.add(String.format("%s=%s", DECK_TYPE, d.getDeckType()));
|
||||
// these are optional
|
||||
if (d.getComment() != null) {
|
||||
out.add(String.format("%s=%s", COMMENT, d.getComment().replaceAll("\n", "")));
|
||||
}
|
||||
if (d.getPlayerType() != null) {
|
||||
out.add(String.format("%s=%s", PLAYER, d.getPlayerType()));
|
||||
}
|
||||
|
||||
if (d.isCustomPool()) {
|
||||
out.add(String.format("%s=%s", CSTM_POOL, "true"));
|
||||
}
|
||||
|
||||
out.add(String.format("%s", "[main]"));
|
||||
out.addAll(writeCardPool(d.getMain()));
|
||||
|
||||
out.add(String.format("%s", "[sideboard]"));
|
||||
out.addAll(writeCardPool(d.getSideboard()));
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* writeDeck.
|
||||
* </p>
|
||||
*
|
||||
* @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;
|
||||
final int cardBorder = 0;
|
||||
final int height = 319;
|
||||
final int width = 222;
|
||||
|
||||
/* Create and adjust the configuration */
|
||||
final 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 */
|
||||
final Map<String, Object> root = new HashMap<String, Object>();
|
||||
root.put("title", d.getName());
|
||||
final List<String> list = new ArrayList<String>();
|
||||
for (final Card card : d.getMain().toForgeCardList().toArray()) {
|
||||
// System.out.println(card.getSets().get(card.getSets().size() -
|
||||
// 1).URL);
|
||||
list.add(card.getSets().get(card.getSets().size() - 1).getUrl());
|
||||
}
|
||||
/*
|
||||
* List<String> nameList = new ArrayList<String>(); for (Card card :
|
||||
* d.getMain().toForgeCardList().toArray()) {
|
||||
* //System.out.println(card.getSets().get(card.getSets().size() -
|
||||
* 1).URL); nameList.add(card.getName()); }
|
||||
*/
|
||||
|
||||
final TreeMap<String, Integer> map = new TreeMap<String, Integer>();
|
||||
for (final Entry<CardPrinted, Integer> entry : d.getMain().getOrderedList()) {
|
||||
map.put(entry.getKey().getName(), entry.getValue());
|
||||
// System.out.println(entry.getValue() + " " +
|
||||
// entry.getKey().getName());
|
||||
}
|
||||
|
||||
root.put("urls", list);
|
||||
root.put("cardBorder", cardBorder);
|
||||
root.put("height", height);
|
||||
root.put("width", width);
|
||||
root.put("cardlistWidth", width - 11);
|
||||
// root.put("nameList", nameList);
|
||||
root.put("cardList", map);
|
||||
|
||||
/* Merge data-model with template */
|
||||
// StringWriter sw = new StringWriter();
|
||||
temp.process(root, out);
|
||||
out.flush();
|
||||
} catch (final IOException e) {
|
||||
System.out.println(e.toString());
|
||||
} catch (final TemplateException e) {
|
||||
System.out.println(e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
private static List<String> writeCardPool(final ItemPoolView<CardPrinted> pool) {
|
||||
final List<Entry<CardPrinted, Integer>> main2sort = pool.getOrderedList();
|
||||
Collections.sort(main2sort, TableSorter.BY_NAME_THEN_SET);
|
||||
final List<String> out = new ArrayList<String>();
|
||||
for (final Entry<CardPrinted, Integer> e : main2sort) {
|
||||
final CardPrinted card = e.getKey();
|
||||
final boolean hasBadSetInfo = "???".equals(card.getSet()) || StringUtils.isBlank(card.getSet());
|
||||
if (hasBadSetInfo) {
|
||||
out.add(String.format("%d %s", e.getValue(), card.getName()));
|
||||
} else {
|
||||
out.add(String.format("%d %s|%s", e.getValue(), card.getName(), card.getSet()));
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* writeDeck.
|
||||
* </p>
|
||||
*
|
||||
* @param d
|
||||
* a {@link forge.deck.Deck} object.
|
||||
* @param f
|
||||
* a {@link java.io.File} object.
|
||||
*/
|
||||
public static void writeDeck(final Deck d, final File f) {
|
||||
FileUtil.writeFile(f, serializeDeck(d));
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Write deck to HTML.
|
||||
* </p>
|
||||
*
|
||||
* @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 {
|
||||
final BufferedWriter writer = new BufferedWriter(new FileWriter(f));
|
||||
writeDeckHtml(d, writer);
|
||||
writer.close();
|
||||
} catch (final IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* readAllDecks.
|
||||
* </p>
|
||||
* @return
|
||||
*/
|
||||
public final static Map<String, Deck> readAllDecks(File deckDir) {
|
||||
Map<String, Deck> result = new HashMap<String, Deck>();
|
||||
final List<String> decksThatFailedToLoad = new ArrayList<String>();
|
||||
File[] files = deckDir.listFiles(DeckIO.DCK_FILE_FILTER);
|
||||
for (final File file : files) {
|
||||
try {
|
||||
final Deck newDeck = DeckIO.readDeck(file);
|
||||
result.put(newDeck.getName(), newDeck);
|
||||
} catch (final NoSuchElementException ex) {
|
||||
final String message = String.format("%s failed to load because ---- %s", file.getName(),
|
||||
ex.getMessage());
|
||||
decksThatFailedToLoad.add(message);
|
||||
}
|
||||
}
|
||||
|
||||
if (!decksThatFailedToLoad.isEmpty()) {
|
||||
JOptionPane.showMessageDialog(null,
|
||||
StringUtils.join(decksThatFailedToLoad, System.getProperty("line.separator")),
|
||||
"Some of your decks were not loaded.", JOptionPane.WARNING_MESSAGE);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public final static Map<String, Deck[]> readAllDraftDecks(File deckDir)
|
||||
{
|
||||
Map<String, Deck[]> result = new HashMap<String, Deck[]>();
|
||||
File[] files = deckDir.listFiles(DeckIO.bdkFileFilter);
|
||||
for (final File file : files) {
|
||||
final Deck[] d = new Deck[8];
|
||||
|
||||
boolean gotError = false;
|
||||
for (int i = 0; i < d.length; i++) {
|
||||
d[i] = DeckIO.readDeck(new File(file, i + ".dck"));
|
||||
if (d[i] == null) {
|
||||
gotError = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!gotError) {
|
||||
result.put(d[0].getName(), d);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -17,44 +17,18 @@
|
||||
*/
|
||||
package forge.deck;
|
||||
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
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.TreeMap;
|
||||
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 forge.Card;
|
||||
import forge.PlayerType;
|
||||
import forge.error.ErrorViewer;
|
||||
import forge.game.GameType;
|
||||
import forge.gui.deckeditor.TableSorter;
|
||||
import forge.item.CardPrinted;
|
||||
import forge.item.ItemPoolView;
|
||||
import forge.properties.ForgeProps;
|
||||
import forge.properties.NewConstants;
|
||||
import forge.util.FileUtil;
|
||||
import forge.util.SectionUtil;
|
||||
import freemarker.template.Configuration;
|
||||
import freemarker.template.DefaultObjectWrapper;
|
||||
import freemarker.template.Template;
|
||||
import freemarker.template.TemplateException;
|
||||
|
||||
//reads and writeDeck Deck objects
|
||||
/**
|
||||
@@ -66,55 +40,6 @@ import freemarker.template.TemplateException;
|
||||
* @version $Id$
|
||||
*/
|
||||
public class DeckManager {
|
||||
/** Constant <code>BDKFileFilter</code>. */
|
||||
private static FilenameFilter bdkFileFilter = new FilenameFilter() {
|
||||
@Override
|
||||
public boolean accept(final File dir, final String name) {
|
||||
return name.endsWith(".bdk");
|
||||
}
|
||||
};
|
||||
|
||||
/** Constant <code>DCKFileFilter</code>. */
|
||||
public static final FilenameFilter DCK_FILE_FILTER = new FilenameFilter() {
|
||||
@Override
|
||||
public boolean accept(final File dir, final String name) {
|
||||
return name.endsWith(".dck");
|
||||
}
|
||||
};
|
||||
|
||||
/** The Constant DCK_FILTER. */
|
||||
public static final FileFilter DCK_FILTER = new FileFilter() {
|
||||
@Override
|
||||
public boolean accept(final File f) {
|
||||
return f.getName().endsWith(".dck") || f.isDirectory();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Simple Deck File .dck";
|
||||
}
|
||||
};
|
||||
|
||||
/** The Constant HTML_FILTER. */
|
||||
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";
|
||||
private static final String PLAYER = "Player";
|
||||
private static final String CSTM_POOL = "Custom Pool";
|
||||
|
||||
private File deckDir;
|
||||
private Map<String, Deck> deckMap;
|
||||
private Map<String, Deck[]> draftMap;
|
||||
|
||||
@@ -131,8 +56,6 @@ public class DeckManager {
|
||||
throw new IllegalArgumentException("No deck directory specified");
|
||||
}
|
||||
try {
|
||||
this.deckDir = deckDir;
|
||||
|
||||
if (deckDir.isFile()) {
|
||||
throw new IOException("Not a directory");
|
||||
} else {
|
||||
@@ -140,9 +63,8 @@ public class DeckManager {
|
||||
if (!deckDir.isDirectory()) {
|
||||
throw new IOException("Directory can't be created");
|
||||
}
|
||||
this.deckMap = new HashMap<String, Deck>();
|
||||
this.draftMap = new HashMap<String, Deck[]>();
|
||||
this.readAllDecks();
|
||||
this.deckMap = DeckIO.readAllDecks(deckDir);
|
||||
this.draftMap = DeckIO.readAllDraftDecks(deckDir);
|
||||
}
|
||||
} catch (final IOException ex) {
|
||||
ErrorViewer.showError(ex);
|
||||
@@ -343,429 +265,4 @@ public class DeckManager {
|
||||
Collections.sort(list);
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* readAllDecks.
|
||||
* </p>
|
||||
*/
|
||||
public final void readAllDecks() {
|
||||
this.deckMap.clear();
|
||||
this.draftMap.clear();
|
||||
|
||||
File[] files;
|
||||
|
||||
final List<String> decksThatFailedToLoad = new ArrayList<String>();
|
||||
files = this.deckDir.listFiles(DeckManager.DCK_FILE_FILTER);
|
||||
for (final File file : files) {
|
||||
try {
|
||||
final Deck newDeck = DeckManager.readDeck(file);
|
||||
this.deckMap.put(newDeck.getName(), newDeck);
|
||||
} catch (final NoSuchElementException ex) {
|
||||
final String message = String.format("%s failed to load because ---- %s", file.getName(),
|
||||
ex.getMessage());
|
||||
decksThatFailedToLoad.add(message);
|
||||
}
|
||||
}
|
||||
|
||||
if (!decksThatFailedToLoad.isEmpty()) {
|
||||
JOptionPane.showMessageDialog(null,
|
||||
StringUtils.join(decksThatFailedToLoad, System.getProperty("line.separator")),
|
||||
"Some of your decks were not loaded.", JOptionPane.WARNING_MESSAGE);
|
||||
}
|
||||
|
||||
files = this.deckDir.listFiles(DeckManager.bdkFileFilter);
|
||||
for (final File file : files) {
|
||||
final Deck[] d = new Deck[8];
|
||||
|
||||
boolean gotError = false;
|
||||
for (int i = 0; i < d.length; i++) {
|
||||
d[i] = DeckManager.readDeck(new File(file, i + ".dck"));
|
||||
if (d[i] == null) {
|
||||
gotError = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!gotError) {
|
||||
this.draftMap.put(d[0].getName(), d);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* readDeck.
|
||||
* </p>
|
||||
*
|
||||
* @param deckFile
|
||||
* a {@link java.io.File} object.
|
||||
* @return a {@link forge.deck.Deck} object.
|
||||
*/
|
||||
public static Deck readDeck(final File deckFile) {
|
||||
|
||||
final List<String> lines = FileUtil.readFile(deckFile);
|
||||
final Map<String, List<String>> sections = SectionUtil.parseSections(lines);
|
||||
if (sections.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final Deck d = new Deck();
|
||||
|
||||
final String firstLine = lines.get(0);
|
||||
if (!firstLine.startsWith("[") || firstLine.equalsIgnoreCase("[general]")) {
|
||||
DeckManager.readDeckOldMetadata(lines.iterator(), d);
|
||||
} else {
|
||||
DeckManager.readDeckMetadata(sections.get("metadata"), d);
|
||||
}
|
||||
d.setMain(DeckManager.readCardList(sections.get("main")));
|
||||
d.setSideboard(DeckManager.readCardList(sections.get("sideboard")));
|
||||
|
||||
return d;
|
||||
}
|
||||
|
||||
private static void readDeckMetadata(final Iterable<String> lines, final Deck d) {
|
||||
if (lines == null) {
|
||||
return;
|
||||
}
|
||||
final Iterator<String> lineIterator = lines.iterator();
|
||||
while (lineIterator.hasNext()) {
|
||||
final String line = lineIterator.next();
|
||||
|
||||
final String[] linedata = line.split("=", 2);
|
||||
final String field = linedata[0].toLowerCase();
|
||||
String value = "";
|
||||
|
||||
if (linedata.length > 1) {
|
||||
value = linedata[1];
|
||||
}
|
||||
|
||||
if (DeckManager.NAME.equalsIgnoreCase(field)) {
|
||||
d.setName(value);
|
||||
|
||||
} else if (DeckManager.COMMENT.equalsIgnoreCase(field)) {
|
||||
d.setComment(value);
|
||||
|
||||
} else if (DeckManager.DECK_TYPE.equalsIgnoreCase(field)) {
|
||||
d.setDeckType(GameType.smartValueOf(value));
|
||||
|
||||
} else if (DeckManager.CSTM_POOL.equalsIgnoreCase(field)) {
|
||||
d.setCustomPool(value.equalsIgnoreCase("true"));
|
||||
|
||||
} else if (DeckManager.PLAYER.equalsIgnoreCase(field)) {
|
||||
if ("human".equalsIgnoreCase(value)) {
|
||||
d.setPlayerType(PlayerType.HUMAN);
|
||||
|
||||
} else {
|
||||
d.setPlayerType(PlayerType.COMPUTER);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* readDeckOld.
|
||||
* </p>
|
||||
*
|
||||
* @param iterator
|
||||
* a {@link java.util.ListIterator} object.
|
||||
* @return a {@link forge.deck.Deck} object.
|
||||
*/
|
||||
private static void readDeckOldMetadata(final Iterator<String> iterator, final Deck d) {
|
||||
|
||||
String line;
|
||||
// readDeck name
|
||||
final String name = iterator.next();
|
||||
|
||||
// readDeck comments
|
||||
String comment = null;
|
||||
while (iterator.hasNext()) {
|
||||
line = iterator.next();
|
||||
if ((line != null) && !line.equals("[general")) {
|
||||
if (comment == null) {
|
||||
comment = line;
|
||||
} else {
|
||||
comment += "\n" + line;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// readDeck deck type
|
||||
|
||||
final GameType deckType = iterator.hasNext() ? GameType.smartValueOf(iterator.next()) : GameType.Constructed;
|
||||
|
||||
d.setName(name);
|
||||
d.setComment(comment);
|
||||
d.setDeckType(deckType);
|
||||
}
|
||||
|
||||
// Precondition: iterator should point at the first line of cards list
|
||||
private static List<String> readCardList(final Iterable<String> lines) {
|
||||
final List<String> result = new ArrayList<String>();
|
||||
final Pattern p = Pattern.compile("((\\d+)\\s+)?(.*?)");
|
||||
|
||||
if (lines == null) {
|
||||
return result;
|
||||
}
|
||||
|
||||
final Iterator<String> lineIterator = lines.iterator();
|
||||
while (lineIterator.hasNext()) {
|
||||
final String line = lineIterator.next();
|
||||
if (line.startsWith("[")) {
|
||||
break;
|
||||
} // there comes another section
|
||||
|
||||
final Matcher m = p.matcher(line.trim());
|
||||
m.matches();
|
||||
final String sCnt = m.group(2);
|
||||
final String cardName = m.group(3);
|
||||
if (StringUtils.isBlank(cardName)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
final int count = sCnt == null ? 1 : Integer.parseInt(sCnt);
|
||||
for (int i = 0; i < count; i++) {
|
||||
result.add(cardName);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
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
|
||||
/**
|
||||
*
|
||||
* Clean deck name.
|
||||
*
|
||||
* @param in
|
||||
* a String
|
||||
* @return a String
|
||||
*/
|
||||
public static String cleanDeckName(final String in) {
|
||||
final char[] c = in.toCharArray();
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; (i < c.length) && (i < 20); i++) {
|
||||
if (Character.isLetterOrDigit(c[i]) || (c[i] == '-')) {
|
||||
sb.append(c[i]);
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Make file name.
|
||||
*
|
||||
* @param deckName
|
||||
* a String
|
||||
* @param deckType
|
||||
* a GameType
|
||||
* @return a File
|
||||
*/
|
||||
public static File makeFileName(final String deckName, final GameType deckType) {
|
||||
final File path = ForgeProps.getFile(NewConstants.NEW_DECKS);
|
||||
if (deckType == GameType.Draft) {
|
||||
return new File(path, DeckManager.deriveFileName(deckName) + ".bdk");
|
||||
} else {
|
||||
return new File(path, DeckManager.deriveFileName(deckName) + ".dck");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Make file name.
|
||||
*
|
||||
* @param deck
|
||||
* a Deck
|
||||
* @return a File
|
||||
*/
|
||||
public static File makeFileName(final Deck deck) {
|
||||
return DeckManager.makeFileName(deck.getName(), deck.getDeckType());
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Write draft Decks.
|
||||
*
|
||||
* @param drafts
|
||||
* a Deck[]
|
||||
*/
|
||||
public static void writeDraftDecks(final Deck[] drafts) {
|
||||
final File f = DeckManager.makeFileName(drafts[0]);
|
||||
f.mkdir();
|
||||
for (int i = 0; i < drafts.length; i++) {
|
||||
FileUtil.writeFile(new File(f, i + ".dck"), DeckManager.serializeDeck(drafts[i]));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* writeDeck.
|
||||
* </p>
|
||||
*
|
||||
* @param d
|
||||
* a {@link forge.deck.Deck} object.
|
||||
* @param out
|
||||
* a {@link java.io.BufferedWriter} object.
|
||||
* @throws java.io.IOException
|
||||
* if any.
|
||||
*/
|
||||
private static List<String> serializeDeck(final Deck d) {
|
||||
final List<String> out = new ArrayList<String>();
|
||||
out.add(String.format("[metadata]"));
|
||||
|
||||
out.add(String.format("%s=%s", DeckManager.NAME, d.getName().replaceAll("\n", "")));
|
||||
out.add(String.format("%s=%s", DeckManager.DECK_TYPE, d.getDeckType()));
|
||||
// these are optional
|
||||
if (d.getComment() != null) {
|
||||
out.add(String.format("%s=%s", DeckManager.COMMENT, d.getComment().replaceAll("\n", "")));
|
||||
}
|
||||
if (d.getPlayerType() != null) {
|
||||
out.add(String.format("%s=%s", DeckManager.PLAYER, d.getPlayerType()));
|
||||
}
|
||||
|
||||
if (d.isCustomPool()) {
|
||||
out.add(String.format("%s=%s", DeckManager.CSTM_POOL, "true"));
|
||||
}
|
||||
|
||||
out.add(String.format("%s", "[main]"));
|
||||
out.addAll(DeckManager.writeCardPool(d.getMain()));
|
||||
|
||||
out.add(String.format("%s", "[sideboard]"));
|
||||
out.addAll(DeckManager.writeCardPool(d.getSideboard()));
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* writeDeck.
|
||||
* </p>
|
||||
*
|
||||
* @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;
|
||||
final int cardBorder = 0;
|
||||
final int height = 319;
|
||||
final int width = 222;
|
||||
|
||||
/* Create and adjust the configuration */
|
||||
final 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 */
|
||||
final Map<String, Object> root = new HashMap<String, Object>();
|
||||
root.put("title", d.getName());
|
||||
final List<String> list = new ArrayList<String>();
|
||||
for (final Card card : d.getMain().toForgeCardList().toArray()) {
|
||||
// System.out.println(card.getSets().get(card.getSets().size() -
|
||||
// 1).URL);
|
||||
list.add(card.getSets().get(card.getSets().size() - 1).getUrl());
|
||||
}
|
||||
/*
|
||||
* List<String> nameList = new ArrayList<String>(); for (Card card :
|
||||
* d.getMain().toForgeCardList().toArray()) {
|
||||
* //System.out.println(card.getSets().get(card.getSets().size() -
|
||||
* 1).URL); nameList.add(card.getName()); }
|
||||
*/
|
||||
|
||||
final TreeMap<String, Integer> map = new TreeMap<String, Integer>();
|
||||
for (final Entry<CardPrinted, Integer> entry : d.getMain().getOrderedList()) {
|
||||
map.put(entry.getKey().getName(), entry.getValue());
|
||||
// System.out.println(entry.getValue() + " " +
|
||||
// entry.getKey().getName());
|
||||
}
|
||||
|
||||
root.put("urls", list);
|
||||
root.put("cardBorder", cardBorder);
|
||||
root.put("height", height);
|
||||
root.put("width", width);
|
||||
root.put("cardlistWidth", width - 11);
|
||||
// root.put("nameList", nameList);
|
||||
root.put("cardList", map);
|
||||
|
||||
/* Merge data-model with template */
|
||||
// StringWriter sw = new StringWriter();
|
||||
temp.process(root, out);
|
||||
out.flush();
|
||||
} catch (final IOException e) {
|
||||
System.out.println(e.toString());
|
||||
} catch (final TemplateException e) {
|
||||
System.out.println(e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
private static List<String> writeCardPool(final ItemPoolView<CardPrinted> pool) {
|
||||
final List<Entry<CardPrinted, Integer>> main2sort = pool.getOrderedList();
|
||||
Collections.sort(main2sort, TableSorter.BY_NAME_THEN_SET);
|
||||
final List<String> out = new ArrayList<String>();
|
||||
for (final Entry<CardPrinted, Integer> e : main2sort) {
|
||||
final CardPrinted card = e.getKey();
|
||||
final boolean hasBadSetInfo = "???".equals(card.getSet()) || StringUtils.isBlank(card.getSet());
|
||||
if (hasBadSetInfo) {
|
||||
out.add(String.format("%d %s", e.getValue(), card.getName()));
|
||||
} else {
|
||||
out.add(String.format("%d %s|%s", e.getValue(), card.getName(), card.getSet()));
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* writeDeck.
|
||||
* </p>
|
||||
*
|
||||
* @param d
|
||||
* a {@link forge.deck.Deck} object.
|
||||
* @param f
|
||||
* a {@link java.io.File} object.
|
||||
*/
|
||||
public static void writeDeck(final Deck d, final File f) {
|
||||
FileUtil.writeFile(f, DeckManager.serializeDeck(d));
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Write deck to HTML.
|
||||
* </p>
|
||||
*
|
||||
* @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 {
|
||||
final BufferedWriter writer = new BufferedWriter(new FileWriter(f));
|
||||
DeckManager.writeDeckHtml(d, writer);
|
||||
writer.close();
|
||||
} catch (final IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,8 +19,10 @@ package forge.game.limited;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.TreeMap;
|
||||
|
||||
@@ -29,8 +31,6 @@ import javax.swing.JOptionPane;
|
||||
import net.slightlymagic.braids.util.lambda.Lambda1;
|
||||
import net.slightlymagic.maxmtg.Closure1;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
|
||||
import forge.AllZone;
|
||||
import forge.Card;
|
||||
import forge.CardList;
|
||||
@@ -361,12 +361,10 @@ public final class BoosterDraft implements IBoosterDraft {
|
||||
if (this.draftPicks.size() > 1) {
|
||||
final ArrayList<String> outDraftData = new ArrayList<String>();
|
||||
|
||||
final String[] keys = this.draftPicks.keySet().toArray(ArrayUtils.EMPTY_STRING_ARRAY);
|
||||
|
||||
for (final String key : keys) {
|
||||
outDraftData.add(key + "|" + this.draftPicks.get(key));
|
||||
for (final Entry<String, Float> key : this.draftPicks.entrySet()) {
|
||||
outDraftData.add(key.getValue() + "|" + key.getKey());
|
||||
}
|
||||
|
||||
Collections.sort(outDraftData);
|
||||
FileUtil.writeFile("res/draft/tmpDraftData.txt", outDraftData);
|
||||
|
||||
final HttpUtil poster = new HttpUtil();
|
||||
|
||||
@@ -39,6 +39,7 @@ import forge.Card;
|
||||
import forge.CardList;
|
||||
import forge.Command;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckIO;
|
||||
import forge.deck.DeckManager;
|
||||
import forge.deck.generate.GenerateConstructedDeck;
|
||||
import forge.error.ErrorViewer;
|
||||
@@ -231,7 +232,7 @@ public final class DeckEditorCommonMenu extends JMenuBar {
|
||||
private File getImportFilename() {
|
||||
final JFileChooser chooser = new JFileChooser(DeckEditorCommonMenu.previousDirectory);
|
||||
|
||||
chooser.addChoosableFileFilter(DeckManager.DCK_FILTER);
|
||||
chooser.addChoosableFileFilter(DeckIO.DCK_FILTER);
|
||||
final int returnVal = chooser.showOpenDialog(null);
|
||||
|
||||
if (returnVal == JFileChooser.APPROVE_OPTION) {
|
||||
@@ -260,7 +261,7 @@ public final class DeckEditorCommonMenu extends JMenuBar {
|
||||
srcChannel.close();
|
||||
dstChannel.close();
|
||||
|
||||
final Deck newDeck = DeckManager.readDeck(file);
|
||||
final Deck newDeck = DeckIO.readDeck(file);
|
||||
this.deckManager.addDeck(newDeck);
|
||||
this.showDeck(newDeck, newDeck.getDeckType());
|
||||
|
||||
@@ -285,7 +286,7 @@ public final class DeckEditorCommonMenu extends JMenuBar {
|
||||
|
||||
final Deck deck = this.getDeck();
|
||||
try {
|
||||
DeckManager.writeDeck(deck, filename);
|
||||
DeckIO.writeDeck(deck, filename);
|
||||
} catch (final Exception ex) {
|
||||
ErrorViewer.showError(ex);
|
||||
throw new RuntimeException("Gui_DeckEditor_Menu : exportDeck() error, " + ex);
|
||||
@@ -296,7 +297,7 @@ public final class DeckEditorCommonMenu extends JMenuBar {
|
||||
final JFileChooser save = new JFileChooser(DeckEditorCommonMenu.previousDirectory);
|
||||
save.setDialogTitle("Export Deck Filename");
|
||||
save.setDialogType(JFileChooser.SAVE_DIALOG);
|
||||
save.setFileFilter(DeckManager.DCK_FILTER);
|
||||
save.setFileFilter(DeckIO.DCK_FILTER);
|
||||
|
||||
if (save.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
|
||||
final File file = save.getSelectedFile();
|
||||
@@ -322,7 +323,7 @@ public final class DeckEditorCommonMenu extends JMenuBar {
|
||||
|
||||
final Deck deck = this.getDeck();
|
||||
try {
|
||||
DeckManager.writeDeckHtml(deck, filename);
|
||||
DeckIO.writeDeckHtml(deck, filename);
|
||||
} catch (final Exception ex) {
|
||||
ErrorViewer.showError(ex);
|
||||
throw new RuntimeException("Gui_DeckEditor_Menu : printProxies() error, " + ex);
|
||||
@@ -333,7 +334,7 @@ public final class DeckEditorCommonMenu extends JMenuBar {
|
||||
final JFileChooser save = new JFileChooser(DeckEditorCommonMenu.previousDirectory);
|
||||
save.setDialogTitle("Proxy HTML Filename");
|
||||
save.setDialogType(JFileChooser.SAVE_DIALOG);
|
||||
save.setFileFilter(DeckManager.HTML_FILTER);
|
||||
save.setFileFilter(DeckIO.HTML_FILTER);
|
||||
|
||||
if (save.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
|
||||
final File file = save.getSelectedFile();
|
||||
@@ -394,11 +395,11 @@ public final class DeckEditorCommonMenu extends JMenuBar {
|
||||
final Deck[] all = this.deckManager.getDraftDeck(this.currentDeckName);
|
||||
all[0] = deck;
|
||||
this.deckManager.addDraftDeck(all);
|
||||
DeckManager.writeDraftDecks(all);
|
||||
DeckIO.writeDraftDecks(all);
|
||||
} else { // constructed or sealed
|
||||
this.setDeckData(this.currentDeckName, true);
|
||||
this.deckManager.addDeck(deck);
|
||||
DeckManager.writeDeck(deck, DeckManager.makeFileName(deck));
|
||||
DeckIO.writeDeck(deck, DeckIO.makeFileName(deck));
|
||||
}
|
||||
this.isDeckSaved = true;
|
||||
}
|
||||
@@ -421,10 +422,10 @@ public final class DeckEditorCommonMenu extends JMenuBar {
|
||||
|
||||
all[0] = deck;
|
||||
this.deckManager.addDraftDeck(all);
|
||||
DeckManager.writeDraftDecks(all);
|
||||
DeckIO.writeDraftDecks(all);
|
||||
} else { // constructed and sealed
|
||||
this.deckManager.addDeck(deck);
|
||||
DeckManager.writeDeck(deck, DeckManager.makeFileName(deck));
|
||||
DeckIO.writeDeck(deck, DeckIO.makeFileName(deck));
|
||||
}
|
||||
this.isDeckSaved = true;
|
||||
}
|
||||
@@ -480,7 +481,7 @@ public final class DeckEditorCommonMenu extends JMenuBar {
|
||||
|
||||
final Deck deck = this.getDeck();
|
||||
deck.setName(this.currentDeckName);
|
||||
DeckManager.writeDeck(deck, DeckManager.makeFileName(deck));
|
||||
DeckIO.writeDeck(deck, DeckIO.makeFileName(deck));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -531,7 +532,7 @@ public final class DeckEditorCommonMenu extends JMenuBar {
|
||||
return "";
|
||||
}
|
||||
|
||||
final String deckName = DeckManager.cleanDeckName(o.toString());
|
||||
final String deckName = DeckIO.cleanDeckName(o.toString());
|
||||
final boolean isDraft = this.deckDisplay.getGameType() == GameType.Draft;
|
||||
final boolean isUniqueName = isDraft ? this.deckManager.isUniqueDraft(deckName) : this.deckManager
|
||||
.isUnique(deckName);
|
||||
|
||||
@@ -41,6 +41,7 @@ import forge.AllZone;
|
||||
import forge.Constant;
|
||||
import forge.control.FControl;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckIO;
|
||||
import forge.deck.DeckManager;
|
||||
import forge.error.ErrorViewer;
|
||||
import forge.game.GameType;
|
||||
@@ -348,7 +349,7 @@ public class DeckEditorDraft extends DeckEditorBase {
|
||||
deckManager.addDraftDeck(all);
|
||||
|
||||
// write file
|
||||
DeckManager.writeDraftDecks(all);
|
||||
DeckIO.writeDraftDecks(all);
|
||||
|
||||
// close and open next screen
|
||||
this.dispose();
|
||||
|
||||
@@ -42,7 +42,7 @@ import forge.Command;
|
||||
import forge.Constant;
|
||||
import forge.card.CardRules;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckManager;
|
||||
import forge.deck.DeckIO;
|
||||
import forge.error.ErrorViewer;
|
||||
import forge.game.GameType;
|
||||
import forge.gui.GuiUtils;
|
||||
@@ -317,7 +317,7 @@ public class DeckEditorQuestMenu extends JMenuBar {
|
||||
if (file == null) {
|
||||
} else if (file.getName().endsWith(".dck")) {
|
||||
try {
|
||||
final Deck newDeck = DeckManager.readDeck(file);
|
||||
final Deck newDeck = DeckIO.readDeck(file);
|
||||
this.questData.addDeck(newDeck);
|
||||
|
||||
final ItemPool<CardPrinted> cardpool = ItemPool.createFrom(this.questData.getCards().getCardpool(),
|
||||
|
||||
@@ -24,6 +24,7 @@ import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import forge.AllZone;
|
||||
import forge.deck.DeckIO;
|
||||
import forge.deck.DeckManager;
|
||||
import forge.properties.ForgeProps;
|
||||
import forge.properties.NewConstants;
|
||||
@@ -78,7 +79,7 @@ public class QuestEventManager {
|
||||
|
||||
final DeckManager manager = new DeckManager(file);
|
||||
|
||||
final File[] allFiles = ForgeProps.getFile(NewConstants.Quest.DECKS).listFiles(DeckManager.DCK_FILE_FILTER);
|
||||
final File[] allFiles = ForgeProps.getFile(NewConstants.Quest.DECKS).listFiles(DeckIO.DCK_FILE_FILTER);
|
||||
|
||||
for (final File f : allFiles) {
|
||||
contents = FileUtil.readFile(f);
|
||||
|
||||
@@ -20,6 +20,7 @@ import forge.AllZone;
|
||||
import forge.Command;
|
||||
import forge.Singletons;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckIO;
|
||||
import forge.deck.DeckManager;
|
||||
import forge.game.GameType;
|
||||
import forge.gui.deckeditor.DeckEditorCommon;
|
||||
@@ -298,7 +299,7 @@ public class DeckLister extends JPanel {
|
||||
deckmanager.deleteDraftDeck(d0.getName());
|
||||
|
||||
// Since draft deck files are really directories, must delete all children first.
|
||||
File dir = DeckManager.makeFileName(d0.getName(), GameType.Draft);
|
||||
File dir = DeckIO.makeFileName(d0.getName(), GameType.Draft);
|
||||
String[] children = dir.list();
|
||||
|
||||
for (int i = 0; i < children.length; i++) {
|
||||
@@ -310,8 +311,8 @@ public class DeckLister extends JPanel {
|
||||
else if (gametype.equals(GameType.Sealed)) {
|
||||
deckmanager.deleteDeck(d0.getName());
|
||||
|
||||
File address1 = DeckManager.makeFileName(d0.getName(), GameType.Sealed);
|
||||
File address2 = DeckManager.makeFileName("AI_" + d0.getName(), GameType.Sealed);
|
||||
File address1 = DeckIO.makeFileName(d0.getName(), GameType.Sealed);
|
||||
File address2 = DeckIO.makeFileName("AI_" + d0.getName(), GameType.Sealed);
|
||||
|
||||
// not working??!!
|
||||
address1.delete();
|
||||
@@ -320,7 +321,7 @@ public class DeckLister extends JPanel {
|
||||
else {
|
||||
deckmanager.deleteDeck(d0.getName());
|
||||
|
||||
File address1 = DeckManager.makeFileName(d0.getName(), GameType.Constructed);
|
||||
File address1 = DeckIO.makeFileName(d0.getName(), GameType.Constructed);
|
||||
address1.delete();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user