diff --git a/.gitattributes b/.gitattributes
index f82d57017c8..d555767ef2d 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -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
diff --git a/src/main/java/forge/deck/CardCollections.java b/src/main/java/forge/deck/CardCollections.java
index 6699a89a521..b260bb64dde 100644
--- a/src/main/java/forge/deck/CardCollections.java
+++ b/src/main/java/forge/deck/CardCollections.java
@@ -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;
/**
diff --git a/src/main/java/forge/deck/Deck.java b/src/main/java/forge/deck/Deck.java
index 62751ddf189..7b5bbdaf85c 100644
--- a/src/main/java/forge/deck/Deck.java
+++ b/src/main/java/forge/deck/Deck.java
@@ -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;
/**
*
@@ -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 deckFileLines) {
+ return Deck.fromSections(SectionUtil.parseSections(deckFileLines));
+ }
+
+ public static Deck fromSections(Map> 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 readCardList(final List lines) {
+ final List result = new ArrayList();
+ final Pattern p = Pattern.compile("((\\d+)\\s+)?(.*?)");
+
+ if (lines == null) {
+ return result;
+ }
+
+ final Iterator 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 writeCardPool(final ItemPoolView pool) {
+ final List> main2sort = pool.getOrderedList();
+ Collections.sort(main2sort, TableSorter.BY_NAME_THEN_SET);
+ final List out = new ArrayList();
+ for (final Entry 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;
+ }
+
+
+
+ /**
+ *
+ * writeDeck.
+ *
+ *
+ * @param d
+ * a {@link forge.deck.Deck} object.
+ * @param out
+ * a {@link java.io.BufferedWriter} object.
+ * @throws java.io.IOException
+ * if any.
+ */
+ public List save() {
+
+
+ final List out = new ArrayList();
+ 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;
+ }
}
diff --git a/src/main/java/forge/deck/DeckBase.java b/src/main/java/forge/deck/DeckBase.java
index da85a7d0c4a..b706f3d4258 100644
--- a/src/main/java/forge/deck/DeckBase.java
+++ b/src/main/java/forge/deck/DeckBase.java
@@ -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.
diff --git a/src/main/java/forge/deck/DeckSet.java b/src/main/java/forge/deck/DeckSet.java
index 3bad774bb86..3f29163cbc4 100644
--- a/src/main/java/forge/deck/DeckSet.java
+++ b/src/main/java/forge/deck/DeckSet.java
@@ -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;
/**
diff --git a/src/main/java/forge/deck/OldDeckParser.java b/src/main/java/forge/deck/OldDeckParser.java
index d360f39eb1f..61ecfba86d6 100644
--- a/src/main/java/forge/deck/OldDeckParser.java
+++ b/src/main/java/forge/deck/OldDeckParser.java
@@ -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>> sealedDecks = new TreeMap>>(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 fileLines = FileUtil.readFile(f);
Map> 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);
diff --git a/src/main/java/forge/deck/io/CubeSerializer.java b/src/main/java/forge/deck/io/CubeSerializer.java
index ea6f442e30f..a74bfc69343 100644
--- a/src/main/java/forge/deck/io/CubeSerializer.java
+++ b/src/main/java/forge/deck/io/CubeSerializer.java
@@ -61,7 +61,7 @@ public class CubeSerializer extends DeckSerializerBase {
* @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)
diff --git a/src/main/java/forge/deck/io/DeckFileHeader.java b/src/main/java/forge/deck/io/DeckFileHeader.java
index 532892efc62..341e83532da 100644
--- a/src/main/java/forge/deck/io/DeckFileHeader.java
+++ b/src/main/java/forge/deck/io/DeckFileHeader.java
@@ -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";
diff --git a/src/main/java/forge/deck/io/DeckIOCore.java b/src/main/java/forge/deck/io/DeckIOCore.java
deleted file mode 100644
index f933d271cef..00000000000
--- a/src/main/java/forge/deck/io/DeckIOCore.java
+++ /dev/null
@@ -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 .
- */
-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 DCKFileFilter. */
- 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> map) {
- List 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 readCardList(final Iterable lines) {
- final List result = new ArrayList();
- final Pattern p = Pattern.compile("((\\d+)\\s+)?(.*?)");
-
- if (lines == null) {
- return result;
- }
-
- final Iterator 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 writeCardPool(final ItemPoolView pool) {
- final List> main2sort = pool.getOrderedList();
- Collections.sort(main2sort, TableSorter.BY_NAME_THEN_SET);
- final List out = new ArrayList();
- for (final Entry 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;
- }
-
-
- /**
- *
- * readDeck.
- *
- *
- * @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 deckFileLines) {
- final Map> 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;
- }
-
-
- /**
- *
- * writeDeck.
- *
- *
- * @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 saveDeck(final Deck d) {
- final List out = new ArrayList();
- 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;
- }
-
-
-
-}
diff --git a/src/main/java/forge/deck/io/DeckSerializer.java b/src/main/java/forge/deck/io/DeckSerializer.java
index 7f56d830de9..e3c1ed57e65 100644
--- a/src/main/java/forge/deck/io/DeckSerializer.java
+++ b/src/main/java/forge/deck/io/DeckSerializer.java
@@ -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 {
* 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 {
*/
@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 {
*/
@Override
public void erase(Deck unit) {
+ makeFileFor(unit).delete();
}
-
-
-
+
/**
*
* Make file name.
@@ -226,7 +226,7 @@ public class DeckSerializer extends DeckSerializerBase {
* @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 {
*/
@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 {
return DCK_FILE_FILTER;
}
+ public static DeckFileHeader readDeckMetadata(final Map> map) {
+ List lines = map.get("metadata");
+ if (lines == null) {
+ return null;
+ }
+ DeckFileHeader d = new DeckFileHeader(SectionUtil.parseKvPairs(lines, "="));
+
+
+ return d;
+ }
+
}
diff --git a/src/main/java/forge/deck/io/DeckSerializerBase.java b/src/main/java/forge/deck/io/DeckSerializerBase.java
index fabdeaf5e13..a173d7df0f3 100644
--- a/src/main/java/forge/deck/io/DeckSerializerBase.java
+++ b/src/main/java/forge/deck/io/DeckSerializerBase.java
@@ -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 implements IDeckSerializer {
+public abstract class DeckSerializerBase implements IItemSerializer {
private final File directory;
@@ -68,6 +69,10 @@ public abstract class DeckSerializerBase 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
/**
diff --git a/src/main/java/forge/deck/io/DeckSetSerializer.java b/src/main/java/forge/deck/io/DeckSetSerializer.java
index 22c2ad59fc8..8a17174a9e4 100644
--- a/src/main/java/forge/deck/io/DeckSetSerializer.java
+++ b/src/main/java/forge/deck/io/DeckSetSerializer.java
@@ -50,16 +50,16 @@ public class DeckSetSerializer extends DeckSerializerBase {
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 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 {
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 {
}
public File makeFileFor(final DeckSet decks) {
- return new File(getDirectory(), DeckIOCore.deriveFileName(decks.getName()));
+ return new File(getDirectory(), deriveFileName(cleanDeckName(decks.getName())));
}
/* (non-Javadoc)
diff --git a/src/main/java/forge/deck/io/IDeckReader.java b/src/main/java/forge/deck/io/IDeckReader.java
deleted file mode 100644
index 84917c21db0..00000000000
--- a/src/main/java/forge/deck/io/IDeckReader.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package forge.deck.io;
-
-import java.util.Map;
-
-import forge.item.IHasName;
-
-
-public interface IDeckReader {
- Map readAll();
- //T read(File file);
-}
-
diff --git a/src/main/java/forge/deck/io/IDeckSerializer.java b/src/main/java/forge/deck/io/IDeckSerializer.java
deleted file mode 100644
index 3b394483b01..00000000000
--- a/src/main/java/forge/deck/io/IDeckSerializer.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package forge.deck.io;
-
-import forge.item.IHasName;
-
-
-/**
- * TODO: Write javadoc for this type.
- *
- */
-public interface IDeckSerializer extends IDeckReader {
- void save(T unit);
- void erase(T unit);
-}
-
-
diff --git a/src/main/java/forge/gui/deckeditor/DeckEditorLimited.java b/src/main/java/forge/gui/deckeditor/DeckEditorLimited.java
index e75488418c5..7c3bab4573e 100644
--- a/src/main/java/forge/gui/deckeditor/DeckEditorLimited.java
+++ b/src/main/java/forge/gui/deckeditor/DeckEditorLimited.java
@@ -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;
/**
*
diff --git a/src/main/java/forge/gui/deckeditor/DeckEditorQuest.java b/src/main/java/forge/gui/deckeditor/DeckEditorQuest.java
index b33c6d68a0e..173ac1eccc8 100644
--- a/src/main/java/forge/gui/deckeditor/DeckEditorQuest.java
+++ b/src/main/java/forge/gui/deckeditor/DeckEditorQuest.java
@@ -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;
diff --git a/src/main/java/forge/gui/deckeditor/DeckManagerOnDisk.java b/src/main/java/forge/gui/deckeditor/DeckManagerOnDisk.java
index 234f5b16c8b..7d13c3ac369 100644
--- a/src/main/java/forge/gui/deckeditor/DeckManagerOnDisk.java
+++ b/src/main/java/forge/gui/deckeditor/DeckManagerOnDisk.java
@@ -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.
diff --git a/src/main/java/forge/gui/deckeditor/DeckManagerQuest.java b/src/main/java/forge/gui/deckeditor/DeckManagerQuest.java
index d52044f138c..cb15dc0c00e 100644
--- a/src/main/java/forge/gui/deckeditor/DeckManagerQuest.java
+++ b/src/main/java/forge/gui/deckeditor/DeckManagerQuest.java
@@ -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;
/**
diff --git a/src/main/java/forge/gui/deckeditor/IDeckManager.java b/src/main/java/forge/gui/deckeditor/IDeckManager.java
index 0fe485374f5..71b4561825c 100644
--- a/src/main/java/forge/gui/deckeditor/IDeckManager.java
+++ b/src/main/java/forge/gui/deckeditor/IDeckManager.java
@@ -1,7 +1,6 @@
package forge.gui.deckeditor;
import java.awt.Component;
-import java.util.ArrayList;
import java.util.List;
/**
diff --git a/src/main/java/forge/gui/deckeditor/MenuBase.java b/src/main/java/forge/gui/deckeditor/MenuBase.java
index 8c912564ab4..35f39a4e124 100644
--- a/src/main/java/forge/gui/deckeditor/MenuBase.java
+++ b/src/main/java/forge/gui/deckeditor/MenuBase.java
@@ -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 extends JMenuBar {
return "";
}
- final String deckName = DeckIOCore.cleanDeckName(o.toString());
+ final String deckName = o.toString();
final boolean isGoodName = controller.isGoodName(deckName);
if (isGoodName) {
diff --git a/src/main/java/forge/gui/deckeditor/MenuCommon.java b/src/main/java/forge/gui/deckeditor/MenuCommon.java
index f5448c634e9..2d92e6a59fa 100644
--- a/src/main/java/forge/gui/deckeditor/MenuCommon.java
+++ b/src/main/java/forge/gui/deckeditor/MenuCommon.java
@@ -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 {
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);
diff --git a/src/main/java/forge/gui/deckeditor/MenuQuest.java b/src/main/java/forge/gui/deckeditor/MenuQuest.java
index 4c82d91764c..bc8a82a155c 100644
--- a/src/main/java/forge/gui/deckeditor/MenuQuest.java
+++ b/src/main/java/forge/gui/deckeditor/MenuQuest.java
@@ -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 {
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 {
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) {
diff --git a/src/main/java/forge/item/InventoryItem.java b/src/main/java/forge/item/InventoryItem.java
index b347bb4c7d0..836a1d7d5e6 100644
--- a/src/main/java/forge/item/InventoryItem.java
+++ b/src/main/java/forge/item/InventoryItem.java
@@ -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
diff --git a/src/main/java/forge/item/PreconDeck.java b/src/main/java/forge/item/PreconDeck.java
index 9b73d65e593..17cf5e19095 100644
--- a/src/main/java/forge/item/PreconDeck.java
+++ b/src/main/java/forge/item/PreconDeck.java
@@ -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 deckLines = FileUtil.readFile(f);
final Map> sections = SectionUtil.parseSections(deckLines);
- this.deck = DeckIOCore.readDeck(deckLines);
+ this.deck = Deck.fromLines(deckLines);
String filenameProxy = null;
String setProxy = "n/a";
diff --git a/src/main/java/forge/quest/data/QuestEventManager.java b/src/main/java/forge/quest/data/QuestEventManager.java
index 64ccf710e84..e74ee2ee3ae 100644
--- a/src/main/java/forge/quest/data/QuestEventManager.java
+++ b/src/main/java/forge/quest/data/QuestEventManager.java
@@ -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();
diff --git a/src/main/java/forge/deck/FolderMap.java b/src/main/java/forge/util/FolderMap.java
similarity index 90%
rename from src/main/java/forge/deck/FolderMap.java
rename to src/main/java/forge/util/FolderMap.java
index c935a120abc..dc36903d697 100644
--- a/src/main/java/forge/deck/FolderMap.java
+++ b/src/main/java/forge/util/FolderMap.java
@@ -15,10 +15,8 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-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 extends FolderMapView implements IFolderMap {
- private IDeckSerializer serializer;
+ private IItemSerializer serializer;
/**
*
* Constructor for DeckManager.
@@ -40,7 +38,7 @@ public class FolderMap extends FolderMapView implements I
* @param deckDir
* a {@link java.io.File} object.
*/
- public FolderMap(IDeckSerializer io ) {
+ public FolderMap(IItemSerializer io ) {
super(io);
serializer = io;
}
diff --git a/src/main/java/forge/deck/FolderMapView.java b/src/main/java/forge/util/FolderMapView.java
similarity index 91%
rename from src/main/java/forge/deck/FolderMapView.java
rename to src/main/java/forge/util/FolderMapView.java
index de0d634adcd..ef7162e6b64 100644
--- a/src/main/java/forge/deck/FolderMapView.java
+++ b/src/main/java/forge/util/FolderMapView.java
@@ -15,15 +15,13 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-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 implements Iterable, IFolderMa
* @param deckDir
* a {@link java.io.File} object.
*/
- public FolderMapView(IDeckReader io ) {
+ public FolderMapView(IItemReader io ) {
this.map = io.readAll();
}
diff --git a/src/main/java/forge/deck/IFolderMap.java b/src/main/java/forge/util/IFolderMap.java
similarity index 86%
rename from src/main/java/forge/deck/IFolderMap.java
rename to src/main/java/forge/util/IFolderMap.java
index f5df2f90a38..c92462eb494 100644
--- a/src/main/java/forge/deck/IFolderMap.java
+++ b/src/main/java/forge/util/IFolderMap.java
@@ -1,6 +1,5 @@
-package forge.deck;
+package forge.util;
-import forge.item.IHasName;
/**
* TODO: Write javadoc for this type.
diff --git a/src/main/java/forge/deck/IFolderMapView.java b/src/main/java/forge/util/IFolderMapView.java
similarity index 87%
rename from src/main/java/forge/deck/IFolderMapView.java
rename to src/main/java/forge/util/IFolderMapView.java
index f5efded8b13..f74f26892fd 100644
--- a/src/main/java/forge/deck/IFolderMapView.java
+++ b/src/main/java/forge/util/IFolderMapView.java
@@ -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.
diff --git a/src/main/java/forge/item/IHasName.java b/src/main/java/forge/util/IHasName.java
similarity index 78%
rename from src/main/java/forge/item/IHasName.java
rename to src/main/java/forge/util/IHasName.java
index aa832818c26..6d18f6bafec 100644
--- a/src/main/java/forge/item/IHasName.java
+++ b/src/main/java/forge/util/IHasName.java
@@ -1,4 +1,4 @@
-package forge.item;
+package forge.util;
/**
* TODO: Write javadoc for this type.
diff --git a/src/main/java/forge/util/IItemReader.java b/src/main/java/forge/util/IItemReader.java
new file mode 100644
index 00000000000..aabfc167eed
--- /dev/null
+++ b/src/main/java/forge/util/IItemReader.java
@@ -0,0 +1,11 @@
+package forge.util;
+
+import java.util.Map;
+
+
+
+public interface IItemReader {
+ Map readAll();
+ //T read(File file);
+}
+
diff --git a/src/main/java/forge/util/IItemSerializer.java b/src/main/java/forge/util/IItemSerializer.java
new file mode 100644
index 00000000000..2461c67b8be
--- /dev/null
+++ b/src/main/java/forge/util/IItemSerializer.java
@@ -0,0 +1,14 @@
+package forge.util;
+
+
+
+/**
+ * TODO: Write javadoc for this type.
+ *
+ */
+public interface IItemSerializer extends IItemReader {
+ void save(T unit);
+ void erase(T unit);
+}
+
+