From ec2c5ec37ca45120511d34ddce91e80a7c5675b7 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Fri, 17 Feb 2012 23:33:53 +0000 Subject: [PATCH] DeckIOCore.java removed, moved non-game related classes to util --- .gitattributes | 15 +- src/main/java/forge/deck/CardCollections.java | 2 + src/main/java/forge/deck/Deck.java | 124 ++++++++- src/main/java/forge/deck/DeckBase.java | 2 +- src/main/java/forge/deck/DeckSet.java | 2 +- src/main/java/forge/deck/OldDeckParser.java | 15 +- .../java/forge/deck/io/CubeSerializer.java | 2 +- .../java/forge/deck/io/DeckFileHeader.java | 4 +- src/main/java/forge/deck/io/DeckIOCore.java | 241 ------------------ .../java/forge/deck/io/DeckSerializer.java | 25 +- .../forge/deck/io/DeckSerializerBase.java | 9 +- .../java/forge/deck/io/DeckSetSerializer.java | 10 +- src/main/java/forge/deck/io/IDeckReader.java | 12 - .../java/forge/deck/io/IDeckSerializer.java | 15 -- .../gui/deckeditor/DeckEditorLimited.java | 2 +- .../forge/gui/deckeditor/DeckEditorQuest.java | 2 - .../gui/deckeditor/DeckManagerOnDisk.java | 3 +- .../gui/deckeditor/DeckManagerQuest.java | 1 - .../forge/gui/deckeditor/IDeckManager.java | 1 - .../java/forge/gui/deckeditor/MenuBase.java | 3 +- .../java/forge/gui/deckeditor/MenuCommon.java | 3 +- .../java/forge/gui/deckeditor/MenuQuest.java | 5 +- src/main/java/forge/item/InventoryItem.java | 2 + src/main/java/forge/item/PreconDeck.java | 3 +- .../forge/quest/data/QuestEventManager.java | 4 +- .../java/forge/{deck => util}/FolderMap.java | 8 +- .../forge/{deck => util}/FolderMapView.java | 6 +- .../java/forge/{deck => util}/IFolderMap.java | 3 +- .../forge/{deck => util}/IFolderMapView.java | 4 +- .../java/forge/{item => util}/IHasName.java | 2 +- src/main/java/forge/util/IItemReader.java | 11 + src/main/java/forge/util/IItemSerializer.java | 14 + 32 files changed, 219 insertions(+), 336 deletions(-) delete mode 100644 src/main/java/forge/deck/io/DeckIOCore.java delete mode 100644 src/main/java/forge/deck/io/IDeckReader.java delete mode 100644 src/main/java/forge/deck/io/IDeckSerializer.java rename src/main/java/forge/{deck => util}/FolderMap.java (90%) rename src/main/java/forge/{deck => util}/FolderMapView.java (91%) rename src/main/java/forge/{deck => util}/IFolderMap.java (86%) rename src/main/java/forge/{deck => util}/IFolderMapView.java (87%) rename src/main/java/forge/{item => util}/IHasName.java (78%) create mode 100644 src/main/java/forge/util/IItemReader.java create mode 100644 src/main/java/forge/util/IItemSerializer.java 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); +} + +