mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 10:18:01 +00:00
DeckIOCore.java removed, moved non-game related classes to util
This commit is contained in:
15
.gitattributes
vendored
15
.gitattributes
vendored
@@ -11206,10 +11206,6 @@ src/main/java/forge/deck/DeckBase.java -text
|
||||
src/main/java/forge/deck/DeckRecognizer.java -text
|
||||
src/main/java/forge/deck/DeckSection.java -text
|
||||
src/main/java/forge/deck/DeckSet.java -text
|
||||
src/main/java/forge/deck/FolderMap.java svneol=native#text/plain
|
||||
src/main/java/forge/deck/FolderMapView.java -text
|
||||
src/main/java/forge/deck/IFolderMap.java -text
|
||||
src/main/java/forge/deck/IFolderMapView.java -text
|
||||
src/main/java/forge/deck/OldDeckParser.java -text
|
||||
src/main/java/forge/deck/generate/DeckGenerator.java -text
|
||||
src/main/java/forge/deck/generate/Generate2ColorDeck.java svneol=native#text/plain
|
||||
@@ -11222,12 +11218,9 @@ src/main/java/forge/deck/generate/GenerateThemeDeck.java svneol=native#text/plai
|
||||
src/main/java/forge/deck/generate/package-info.java svneol=native#text/plain
|
||||
src/main/java/forge/deck/io/CubeSerializer.java -text
|
||||
src/main/java/forge/deck/io/DeckFileHeader.java -text
|
||||
src/main/java/forge/deck/io/DeckIOCore.java -text
|
||||
src/main/java/forge/deck/io/DeckSerializer.java -text
|
||||
src/main/java/forge/deck/io/DeckSerializerBase.java -text
|
||||
src/main/java/forge/deck/io/DeckSetSerializer.java -text
|
||||
src/main/java/forge/deck/io/IDeckReader.java -text
|
||||
src/main/java/forge/deck/io/IDeckSerializer.java -text
|
||||
src/main/java/forge/deck/package-info.java svneol=native#text/plain
|
||||
src/main/java/forge/error/BugzReporter.java svneol=native#text/plain
|
||||
src/main/java/forge/error/ErrorViewer.java svneol=native#text/plain
|
||||
@@ -11295,7 +11288,6 @@ src/main/java/forge/item/BoosterPack.java -text
|
||||
src/main/java/forge/item/CardDb.java -text
|
||||
src/main/java/forge/item/CardPrinted.java -text
|
||||
src/main/java/forge/item/CardPrintedCharacteristics.java -text
|
||||
src/main/java/forge/item/IHasName.java -text
|
||||
src/main/java/forge/item/InventoryItem.java -text
|
||||
src/main/java/forge/item/InventoryItemFromSet.java -text
|
||||
src/main/java/forge/item/ItemPool.java -text
|
||||
@@ -11355,7 +11347,14 @@ src/main/java/forge/util/Base64Coder.java svneol=native#text/plain
|
||||
src/main/java/forge/util/CopyFiles.java svneol=native#text/plain
|
||||
src/main/java/forge/util/FileFinder.java svneol=native#text/plain
|
||||
src/main/java/forge/util/FileUtil.java svneol=native#text/plain
|
||||
src/main/java/forge/util/FolderMap.java svneol=native#text/plain
|
||||
src/main/java/forge/util/FolderMapView.java -text
|
||||
src/main/java/forge/util/HttpUtil.java svneol=native#text/plain
|
||||
src/main/java/forge/util/IFolderMap.java -text
|
||||
src/main/java/forge/util/IFolderMapView.java -text
|
||||
src/main/java/forge/util/IHasName.java -text
|
||||
src/main/java/forge/util/IItemReader.java -text
|
||||
src/main/java/forge/util/IItemSerializer.java -text
|
||||
src/main/java/forge/util/MyRandom.java svneol=native#text/plain
|
||||
src/main/java/forge/util/SectionUtil.java -text
|
||||
src/main/java/forge/util/package-info.java -text
|
||||
|
||||
@@ -5,6 +5,8 @@ import java.io.File;
|
||||
import forge.deck.io.CubeSerializer;
|
||||
import forge.deck.io.DeckSerializer;
|
||||
import forge.deck.io.DeckSetSerializer;
|
||||
import forge.util.FolderMap;
|
||||
import forge.util.IFolderMap;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -17,11 +17,27 @@
|
||||
*/
|
||||
package forge.deck;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import forge.deck.io.DeckFileHeader;
|
||||
import forge.deck.io.DeckSerializer;
|
||||
import forge.gui.deckeditor.elements.TableSorter;
|
||||
import forge.item.CardPrinted;
|
||||
import forge.item.IHasName;
|
||||
import forge.item.ItemPoolView;
|
||||
import forge.util.FileUtil;
|
||||
import forge.util.IHasName;
|
||||
import forge.util.SectionUtil;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -121,4 +137,110 @@ public class Deck extends DeckBase implements Serializable, IHasName {
|
||||
protected DeckBase newInstance(String name0) {
|
||||
return new Deck(name0);
|
||||
}
|
||||
|
||||
|
||||
public static Deck fromFile(final File deckFile) {
|
||||
return fromLines(FileUtil.readFile(deckFile));
|
||||
}
|
||||
|
||||
public static Deck fromLines(final List<String> deckFileLines) {
|
||||
return Deck.fromSections(SectionUtil.parseSections(deckFileLines));
|
||||
}
|
||||
|
||||
public static Deck fromSections(Map<String, List<String>> sections) {
|
||||
if (sections.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
DeckFileHeader dh = DeckSerializer.readDeckMetadata(sections);
|
||||
|
||||
final Deck d = new Deck(dh.getName());
|
||||
d.setComment(dh.getComment());
|
||||
|
||||
d.getMain().set(readCardList(sections.get("main")));
|
||||
d.getSideboard().set(readCardList(sections.get("sideboard")));
|
||||
|
||||
return d;
|
||||
}
|
||||
|
||||
private static List<String> readCardList(final List<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 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 out
|
||||
* a {@link java.io.BufferedWriter} object.
|
||||
* @throws java.io.IOException
|
||||
* if any.
|
||||
*/
|
||||
public List<String> save() {
|
||||
|
||||
|
||||
final List<String> out = new ArrayList<String>();
|
||||
out.add(String.format("[metadata]"));
|
||||
|
||||
out.add(String.format("%s=%s", DeckFileHeader.NAME, getName().replaceAll("\n", "")));
|
||||
// these are optional
|
||||
if (getComment() != null) {
|
||||
out.add(String.format("%s=%s", DeckFileHeader.COMMENT, getComment().replaceAll("\n", "")));
|
||||
}
|
||||
|
||||
out.add(String.format("%s", "[main]"));
|
||||
out.addAll(writeCardPool(getMain()));
|
||||
|
||||
out.add(String.format("%s", "[sideboard]"));
|
||||
out.addAll(writeCardPool(getSideboard()));
|
||||
return out;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,8 +2,8 @@ package forge.deck;
|
||||
|
||||
import java.io.Serializable;
|
||||
import forge.item.CardPrinted;
|
||||
import forge.item.IHasName;
|
||||
import forge.item.ItemPoolView;
|
||||
import forge.util.IHasName;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
|
||||
@@ -4,8 +4,8 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import forge.item.CardPrinted;
|
||||
import forge.item.IHasName;
|
||||
import forge.item.ItemPoolView;
|
||||
import forge.util.IHasName;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -15,9 +15,10 @@ import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import forge.PlayerType;
|
||||
import forge.deck.io.DeckFileHeader;
|
||||
import forge.deck.io.DeckIOCore;
|
||||
import forge.deck.io.DeckSerializer;
|
||||
import forge.deck.io.DeckSetSerializer;
|
||||
import forge.util.FileUtil;
|
||||
import forge.util.IFolderMap;
|
||||
import forge.util.SectionUtil;
|
||||
|
||||
/**
|
||||
@@ -85,13 +86,13 @@ public class OldDeckParser {
|
||||
for( File f : deckDir.listFiles(bdkFileFilter))
|
||||
{
|
||||
boolean gotError = false;
|
||||
Deck human = DeckIOCore.readDeck(new File(f, "0.dck"));
|
||||
Deck human = Deck.fromFile(new File(f, "0.dck"));
|
||||
final DeckSet d = new DeckSet(human.getName());
|
||||
d.setHumanDeck(human);
|
||||
|
||||
|
||||
for (int i = 1; i < DeckSetSerializer.MAX_DRAFT_PLAYERS; i++) {
|
||||
Deck nextAi = DeckIOCore.readDeck(new File(f, i + ".dck"));
|
||||
Deck nextAi = Deck.fromFile(new File(f, i + ".dck"));
|
||||
if (nextAi == null) {
|
||||
gotError = true;
|
||||
break;
|
||||
@@ -121,20 +122,20 @@ public class OldDeckParser {
|
||||
boolean allowDeleteUnsupportedConstructed = false;
|
||||
Map<String, Pair<DeckSet, MutablePair<File,File>>> sealedDecks = new TreeMap<String, Pair<DeckSet, MutablePair<File,File>>>(String.CASE_INSENSITIVE_ORDER);
|
||||
|
||||
for( File f : deckDir.listFiles(DeckIOCore.DCK_FILE_FILTER))
|
||||
for( File f : deckDir.listFiles(DeckSerializer.DCK_FILE_FILTER))
|
||||
{
|
||||
boolean importedOk = false;
|
||||
|
||||
List<String> fileLines = FileUtil.readFile(f);
|
||||
Map<String, List<String>> sections = SectionUtil.parseSections(fileLines);
|
||||
DeckFileHeader dh = DeckIOCore.readDeckMetadata(sections);
|
||||
DeckFileHeader dh = DeckSerializer.readDeckMetadata(sections);
|
||||
String name = dh.getName();
|
||||
if ( dh.isCustomPool() ) { continue; }
|
||||
|
||||
switch(dh.getDeckType()) {
|
||||
case Constructed:
|
||||
try {
|
||||
constructed.add(DeckIOCore.readDeck(fileLines));
|
||||
constructed.add(Deck.fromLines(fileLines));
|
||||
importedOk = true;
|
||||
} catch( NoSuchElementException ex) {
|
||||
if( !allowDeleteUnsupportedConstructed ) {
|
||||
@@ -154,7 +155,7 @@ public class OldDeckParser {
|
||||
if( null == stored )
|
||||
stored = ImmutablePair.of(new DeckSet(name), MutablePair.of((File)null, (File)null));
|
||||
|
||||
Deck deck = DeckIOCore.readDeck(fileLines);
|
||||
Deck deck = Deck.fromLines(fileLines);
|
||||
if( isAi ) {
|
||||
stored.getLeft().addAiDeck(deck);
|
||||
stored.getRight().setRight(f);
|
||||
|
||||
@@ -61,7 +61,7 @@ public class CubeSerializer extends DeckSerializerBase<CustomLimited> {
|
||||
* @return a File
|
||||
*/
|
||||
public File makeFileFor(final CustomLimited deck) {
|
||||
return new File(getDirectory(), DeckIOCore.deriveFileName(cleanDeckName(deck.getName())) + ".cub");
|
||||
return new File(getDirectory(), deriveFileName(cleanDeckName(deck.getName())) + ".cub");
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
||||
@@ -11,9 +11,9 @@ import forge.game.GameType;
|
||||
*/
|
||||
public class DeckFileHeader {
|
||||
|
||||
private static final String NAME = "Name";
|
||||
public static final String NAME = "Name";
|
||||
private static final String DECK_TYPE = "Deck Type";
|
||||
private static final String COMMENT = "Comment";
|
||||
public static final String COMMENT = "Comment";
|
||||
private static final String PLAYER = "Player";
|
||||
private static final String CSTM_POOL = "Custom Pool";
|
||||
private static final String PLAYER_TYPE = "PlayerType";
|
||||
|
||||
@@ -1,241 +0,0 @@
|
||||
/*
|
||||
* Forge: Play Magic: the Gathering.
|
||||
* Copyright (C) 2011 Nate
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package forge.deck.io;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import javax.swing.filechooser.FileFilter;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import forge.deck.Deck;
|
||||
import forge.game.GameType;
|
||||
import forge.gui.deckeditor.elements.TableSorter;
|
||||
import forge.item.CardPrinted;
|
||||
import forge.item.ItemPoolView;
|
||||
import forge.util.FileUtil;
|
||||
import forge.util.SectionUtil;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public class DeckIOCore {
|
||||
|
||||
private static final String NAME = "Name";
|
||||
private static final String DECK_TYPE = "Deck Type";
|
||||
private static final String COMMENT = "Comment";
|
||||
/** 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";
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
public static DeckFileHeader readDeckMetadata(final Map<String,List<String>> map) {
|
||||
List<String> lines = map.get("metadata");
|
||||
if (lines == null) {
|
||||
return null;
|
||||
}
|
||||
DeckFileHeader d = new DeckFileHeader(SectionUtil.parseKvPairs(lines, "="));
|
||||
|
||||
|
||||
return d;
|
||||
}
|
||||
|
||||
|
||||
// Precondition: iterator should point at the first line of cards list
|
||||
public 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;
|
||||
}
|
||||
|
||||
public 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();
|
||||
}
|
||||
|
||||
public 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>
|
||||
* readDeck.
|
||||
* </p>
|
||||
*
|
||||
* @param deckFile
|
||||
* a {@link java.io.File} object.
|
||||
* @return a {@link forge.deck.Deck} object.
|
||||
*/
|
||||
|
||||
public static Deck readDeck(final File deckFile) {
|
||||
return readDeck(FileUtil.readFile(deckFile));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Read deck.
|
||||
*
|
||||
* @param deckFileLines the deck file lines
|
||||
* @return the deck
|
||||
*/
|
||||
public static Deck readDeck(final List<String> deckFileLines) {
|
||||
final Map<String, List<String>> sections = SectionUtil.parseSections(deckFileLines);
|
||||
if (sections.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
DeckFileHeader dh = readDeckMetadata(sections);
|
||||
|
||||
final Deck d = new Deck(dh.getName());
|
||||
d.setComment(dh.getComment());
|
||||
d.getMain().set(readCardList(sections.get("main")));
|
||||
d.getSideboard().set(readCardList(sections.get("sideboard")));
|
||||
|
||||
return d;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <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.
|
||||
*/
|
||||
public static List<String> saveDeck(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", "")));
|
||||
// these are optional
|
||||
if (d.getComment() != null) {
|
||||
out.add(String.format("%s=%s", COMMENT, d.getComment().replaceAll("\n", "")));
|
||||
}
|
||||
|
||||
out.add(String.format("%s", "[main]"));
|
||||
out.addAll(writeCardPool(d.getMain()));
|
||||
|
||||
out.add(String.format("%s", "[sideboard]"));
|
||||
out.addAll(writeCardPool(d.getSideboard()));
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -35,6 +35,7 @@ import forge.Card;
|
||||
import forge.deck.Deck;
|
||||
import forge.item.CardPrinted;
|
||||
import forge.util.FileUtil;
|
||||
import forge.util.SectionUtil;
|
||||
import freemarker.template.Configuration;
|
||||
import freemarker.template.DefaultObjectWrapper;
|
||||
import freemarker.template.Template;
|
||||
@@ -174,7 +175,7 @@ public class DeckSerializer extends DeckSerializerBase<Deck> {
|
||||
* a {@link java.io.File} object.
|
||||
*/
|
||||
public static void writeDeck(final Deck d, final File f) {
|
||||
FileUtil.writeFile(f, DeckIOCore.saveDeck(d));
|
||||
FileUtil.writeFile(f, d.save());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -203,7 +204,7 @@ public class DeckSerializer extends DeckSerializerBase<Deck> {
|
||||
*/
|
||||
@Override
|
||||
public void save(Deck unit) {
|
||||
FileUtil.writeFile(makeFileFor(unit), DeckIOCore.saveDeck(unit));
|
||||
FileUtil.writeFile(makeFileFor(unit), unit.save());
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
@@ -211,10 +212,9 @@ public class DeckSerializer extends DeckSerializerBase<Deck> {
|
||||
*/
|
||||
@Override
|
||||
public void erase(Deck unit) {
|
||||
makeFileFor(unit).delete();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Make file name.
|
||||
@@ -226,7 +226,7 @@ public class DeckSerializer extends DeckSerializerBase<Deck> {
|
||||
* @return a File
|
||||
*/
|
||||
public File makeFileFor(final Deck deck) {
|
||||
return new File(getDirectory(), DeckIOCore.deriveFileName(cleanDeckName(deck.getName())) + ".dck");
|
||||
return new File(getDirectory(), deriveFileName(cleanDeckName(deck.getName())) + ".dck");
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
@@ -234,7 +234,7 @@ public class DeckSerializer extends DeckSerializerBase<Deck> {
|
||||
*/
|
||||
@Override
|
||||
protected Deck read(File file) {
|
||||
return DeckIOCore.readDeck(file);
|
||||
return Deck.fromFile(file);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
@@ -245,4 +245,15 @@ public class DeckSerializer extends DeckSerializerBase<Deck> {
|
||||
return DCK_FILE_FILTER;
|
||||
}
|
||||
|
||||
public static DeckFileHeader readDeckMetadata(final Map<String,List<String>> map) {
|
||||
List<String> lines = map.get("metadata");
|
||||
if (lines == null) {
|
||||
return null;
|
||||
}
|
||||
DeckFileHeader d = new DeckFileHeader(SectionUtil.parseKvPairs(lines, "="));
|
||||
|
||||
|
||||
return d;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -31,13 +31,14 @@ import javax.swing.JOptionPane;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import forge.error.ErrorViewer;
|
||||
import forge.item.IHasName;
|
||||
import forge.util.IHasName;
|
||||
import forge.util.IItemSerializer;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public abstract class DeckSerializerBase<T extends IHasName> implements IDeckSerializer<T> {
|
||||
public abstract class DeckSerializerBase<T extends IHasName> implements IItemSerializer<T> {
|
||||
|
||||
private final File directory;
|
||||
|
||||
@@ -68,6 +69,10 @@ public abstract class DeckSerializerBase<T extends IHasName> implements IDeckSer
|
||||
}
|
||||
}
|
||||
|
||||
public 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
|
||||
/**
|
||||
|
||||
@@ -50,16 +50,16 @@ public class DeckSetSerializer extends DeckSerializerBase<DeckSet> {
|
||||
public void save(DeckSet unit) {
|
||||
final File f = makeFileFor(unit);
|
||||
f.mkdir();
|
||||
FileUtil.writeFile(new File(f, "human.dck"), DeckIOCore.saveDeck(unit.getHumanDeck()));
|
||||
FileUtil.writeFile(new File(f, "human.dck"), unit.getHumanDeck().save());
|
||||
List<Deck> aiDecks = unit.getAiDecks();
|
||||
for (int i = 1; i <= aiDecks.size(); i++) {
|
||||
FileUtil.writeFile(new File(f, "ai-" + i + ".dck"), DeckIOCore.saveDeck(aiDecks.get(i-1)));
|
||||
FileUtil.writeFile(new File(f, "ai-" + i + ".dck"), aiDecks.get(i-1).save());
|
||||
}
|
||||
}
|
||||
|
||||
protected final DeckSet read(File file)
|
||||
{
|
||||
Deck human = DeckIOCore.readDeck(new File(file, "human.dck"));
|
||||
Deck human = Deck.fromFile(new File(file, "human.dck"));
|
||||
final DeckSet d = new DeckSet(human.getName());
|
||||
d.setHumanDeck(human);
|
||||
for (int i = 1; i < MAX_DRAFT_PLAYERS; i++) {
|
||||
@@ -67,7 +67,7 @@ public class DeckSetSerializer extends DeckSerializerBase<DeckSet> {
|
||||
if( !theFile.exists() )
|
||||
break;
|
||||
|
||||
d.addAiDeck(DeckIOCore.readDeck(theFile));
|
||||
d.addAiDeck(Deck.fromFile(theFile));
|
||||
}
|
||||
return d;
|
||||
}
|
||||
@@ -87,7 +87,7 @@ public class DeckSetSerializer extends DeckSerializerBase<DeckSet> {
|
||||
}
|
||||
|
||||
public File makeFileFor(final DeckSet decks) {
|
||||
return new File(getDirectory(), DeckIOCore.deriveFileName(decks.getName()));
|
||||
return new File(getDirectory(), deriveFileName(cleanDeckName(decks.getName())));
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
package forge.deck.io;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import forge.item.IHasName;
|
||||
|
||||
|
||||
public interface IDeckReader<T extends IHasName> {
|
||||
Map<String, T> readAll();
|
||||
//T read(File file);
|
||||
}
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
package forge.deck.io;
|
||||
|
||||
import forge.item.IHasName;
|
||||
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public interface IDeckSerializer<T extends IHasName> extends IDeckReader<T> {
|
||||
void save(T unit);
|
||||
void erase(T unit);
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,6 @@ import net.slightlymagic.maxmtg.Predicate;
|
||||
import forge.Command;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckSet;
|
||||
import forge.deck.IFolderMap;
|
||||
import forge.error.ErrorViewer;
|
||||
import forge.gui.deckeditor.elements.CardPanelHeavy;
|
||||
import forge.gui.deckeditor.elements.FilterCheckBoxes;
|
||||
@@ -50,6 +49,7 @@ import forge.gui.deckeditor.elements.TableColumnInfo;
|
||||
import forge.gui.deckeditor.elements.TableView;
|
||||
import forge.item.CardPrinted;
|
||||
import forge.item.InventoryItem;
|
||||
import forge.util.IFolderMap;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
||||
@@ -27,8 +27,6 @@ import java.awt.event.WindowAdapter;
|
||||
import java.awt.event.WindowEvent;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JCheckBox;
|
||||
|
||||
|
||||
@@ -7,8 +7,7 @@ import net.slightlymagic.braids.util.lambda.Lambda0;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import forge.deck.DeckBase;
|
||||
import forge.deck.FolderMap;
|
||||
import forge.deck.IFolderMap;
|
||||
import forge.util.IFolderMap;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
|
||||
@@ -8,7 +8,6 @@ import java.util.Map;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import forge.deck.Deck;
|
||||
import forge.item.CardPrinted;
|
||||
import forge.quest.data.QuestData;
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package forge.gui.deckeditor;
|
||||
|
||||
import java.awt.Component;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
||||
@@ -31,7 +31,6 @@ import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import forge.Command;
|
||||
import forge.deck.DeckBase;
|
||||
import forge.deck.io.DeckIOCore;
|
||||
import forge.error.ErrorViewer;
|
||||
import forge.gui.GuiUtils;
|
||||
|
||||
@@ -201,7 +200,7 @@ public class MenuBase<T extends DeckBase> extends JMenuBar {
|
||||
return "";
|
||||
}
|
||||
|
||||
final String deckName = DeckIOCore.cleanDeckName(o.toString());
|
||||
final String deckName = o.toString();
|
||||
final boolean isGoodName = controller.isGoodName(deckName);
|
||||
|
||||
if (isGoodName) {
|
||||
|
||||
@@ -30,7 +30,6 @@ import forge.CardList;
|
||||
import forge.Command;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.generate.GenerateConstructedDeck;
|
||||
import forge.deck.io.DeckIOCore;
|
||||
import forge.deck.io.DeckSerializer;
|
||||
import forge.error.ErrorViewer;
|
||||
|
||||
@@ -120,7 +119,7 @@ public final class MenuCommon extends MenuBase<Deck> {
|
||||
if (file == null) {
|
||||
} else if (file.getName().endsWith(".dck")) {
|
||||
try {
|
||||
getController().setModel(DeckIOCore.readDeck(file));
|
||||
getController().setModel(Deck.fromFile(file));
|
||||
|
||||
} catch (final Exception ex) {
|
||||
ErrorViewer.showError(ex);
|
||||
|
||||
@@ -31,7 +31,6 @@ import javax.swing.JMenuItem;
|
||||
import forge.Command;
|
||||
import forge.Constant;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.io.DeckIOCore;
|
||||
import forge.deck.io.DeckSerializer;
|
||||
import forge.error.ErrorViewer;
|
||||
import forge.gui.ListChooser;
|
||||
@@ -85,7 +84,7 @@ public class MenuQuest extends MenuBase<Deck> {
|
||||
|
||||
if (file != null && file.getName().endsWith(".dck")) {
|
||||
try {
|
||||
final Deck newDeck = DeckIOCore.readDeck(file);
|
||||
final Deck newDeck = Deck.fromFile(file);
|
||||
getController().importDeck(newDeck);
|
||||
|
||||
} catch (final Exception ex) {
|
||||
@@ -106,7 +105,7 @@ public class MenuQuest extends MenuBase<Deck> {
|
||||
private final File getImportFilename() {
|
||||
final JFileChooser chooser = new JFileChooser(MenuQuest.previousDirectory);
|
||||
|
||||
chooser.addChoosableFileFilter(DeckIOCore.DCK_FILTER);
|
||||
chooser.addChoosableFileFilter(DeckSerializer.DCK_FILTER);
|
||||
final int returnVal = chooser.showOpenDialog(null);
|
||||
|
||||
if (returnVal == JFileChooser.APPROVE_OPTION) {
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
*/
|
||||
package forge.item;
|
||||
|
||||
import forge.util.IHasName;
|
||||
|
||||
/**
|
||||
* Interface to define a player's inventory may hold. Should include
|
||||
* CardPrinted, Booster, Pets, Plants... etc
|
||||
|
||||
@@ -23,7 +23,6 @@ import java.util.Map;
|
||||
|
||||
import forge.SetUtils;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.io.DeckIOCore;
|
||||
import forge.quest.SellRules;
|
||||
import forge.util.FileUtil;
|
||||
import forge.util.SectionUtil;
|
||||
@@ -80,7 +79,7 @@ public class PreconDeck implements InventoryItemFromSet {
|
||||
public PreconDeck(final File f) {
|
||||
final List<String> deckLines = FileUtil.readFile(f);
|
||||
final Map<String, List<String>> sections = SectionUtil.parseSections(deckLines);
|
||||
this.deck = DeckIOCore.readDeck(deckLines);
|
||||
this.deck = Deck.fromLines(deckLines);
|
||||
|
||||
String filenameProxy = null;
|
||||
String setProxy = "n/a";
|
||||
|
||||
@@ -25,7 +25,7 @@ import java.util.Random;
|
||||
|
||||
import forge.AllZone;
|
||||
import forge.Singletons;
|
||||
import forge.deck.io.DeckIOCore;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.io.DeckSerializer;
|
||||
import forge.properties.ForgeProps;
|
||||
import forge.properties.NewConstants;
|
||||
@@ -99,7 +99,7 @@ public class QuestEventManager {
|
||||
|
||||
// Assemble metadata (may not be necessary later) and deck object.
|
||||
this.assembleEventMetadata(contents, tempEvent);
|
||||
tempEvent.setEventDeck(DeckIOCore.readDeck(contents));
|
||||
tempEvent.setEventDeck(Deck.fromLines(contents));
|
||||
} // End for(allFiles)
|
||||
|
||||
this.assembleDuelDifficultyLists();
|
||||
|
||||
@@ -15,10 +15,8 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package forge.deck;
|
||||
package forge.util;
|
||||
|
||||
import forge.deck.io.IDeckSerializer;
|
||||
import forge.item.IHasName;
|
||||
|
||||
//reads and writeDeck Deck objects
|
||||
/**
|
||||
@@ -31,7 +29,7 @@ import forge.item.IHasName;
|
||||
*/
|
||||
public class FolderMap<T extends IHasName> extends FolderMapView<T> implements IFolderMap<T> {
|
||||
|
||||
private IDeckSerializer<T> serializer;
|
||||
private IItemSerializer<T> serializer;
|
||||
/**
|
||||
* <p>
|
||||
* Constructor for DeckManager.
|
||||
@@ -40,7 +38,7 @@ public class FolderMap<T extends IHasName> extends FolderMapView<T> implements I
|
||||
* @param deckDir
|
||||
* a {@link java.io.File} object.
|
||||
*/
|
||||
public FolderMap(IDeckSerializer<T> io ) {
|
||||
public FolderMap(IItemSerializer<T> io ) {
|
||||
super(io);
|
||||
serializer = io;
|
||||
}
|
||||
@@ -15,15 +15,13 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package forge.deck;
|
||||
package forge.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import forge.deck.io.IDeckReader;
|
||||
import forge.item.IHasName;
|
||||
|
||||
//reads and writeDeck Deck objects
|
||||
/**
|
||||
@@ -45,7 +43,7 @@ public class FolderMapView<T extends IHasName> implements Iterable<T>, IFolderMa
|
||||
* @param deckDir
|
||||
* a {@link java.io.File} object.
|
||||
*/
|
||||
public FolderMapView(IDeckReader<T> io ) {
|
||||
public FolderMapView(IItemReader<T> io ) {
|
||||
this.map = io.readAll();
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package forge.deck;
|
||||
package forge.util;
|
||||
|
||||
import forge.item.IHasName;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
@@ -1,9 +1,7 @@
|
||||
package forge.deck;
|
||||
package forge.util;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
|
||||
import forge.item.IHasName;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
@@ -1,4 +1,4 @@
|
||||
package forge.item;
|
||||
package forge.util;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
11
src/main/java/forge/util/IItemReader.java
Normal file
11
src/main/java/forge/util/IItemReader.java
Normal file
@@ -0,0 +1,11 @@
|
||||
package forge.util;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
|
||||
public interface IItemReader<T extends IHasName> {
|
||||
Map<String, T> readAll();
|
||||
//T read(File file);
|
||||
}
|
||||
|
||||
14
src/main/java/forge/util/IItemSerializer.java
Normal file
14
src/main/java/forge/util/IItemSerializer.java
Normal file
@@ -0,0 +1,14 @@
|
||||
package forge.util;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
*/
|
||||
public interface IItemSerializer<T extends IHasName> extends IItemReader<T> {
|
||||
void save(T unit);
|
||||
void erase(T unit);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user