From ddb66257ce458061cda579f5cb1f5543905c5bd7 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Sun, 18 Aug 2013 20:16:09 +0000 Subject: [PATCH] * Following the ideas implemented in java.util.collections, IStorageView interface removed, the base class is read-only by default. * isUnique removed for being synonym for !contains * QuestDeckMap inherited correctly from StorageBase to avoid duplicate code. --- .gitattributes | 3 +- .../java/forge/card/EditionCollection.java | 4 +- .../java/forge/card/FormatCollection.java | 12 +-- src/main/java/forge/deck/DeckgenUtil.java | 3 +- .../java/forge/game/limited/BoosterDraft.java | 4 +- .../forge/game/limited/CustomLimited.java | 4 +- .../controllers/DeckController.java | 2 +- .../gui/home/quest/VSubmenuQuestData.java | 4 +- .../gui/home/sanctioned/CSubmenuSealed.java | 2 +- .../gui/toolbox/special/FDeckChooser.java | 3 +- src/main/java/forge/model/FModel.java | 52 +++++------ .../java/forge/quest/QuestController.java | 15 ++-- src/main/java/forge/quest/QuestDeckMap.java | 88 +------------------ .../forge/quest/QuestEventDuelManager.java | 8 +- .../java/forge/quest/QuestUtilUnlockSets.java | 6 +- .../java/forge/util/storage/IStorage.java | 43 ++++----- .../java/forge/util/storage/IStorageView.java | 65 -------------- .../{StorageView.java => StorageBase.java} | 52 +++++------ .../storage/StorageImmediatelySerialized.java | 17 +--- 19 files changed, 101 insertions(+), 286 deletions(-) delete mode 100644 src/main/java/forge/util/storage/IStorageView.java rename src/main/java/forge/util/storage/{StorageView.java => StorageBase.java} (70%) diff --git a/.gitattributes b/.gitattributes index 3d04c4fe012..c6f7e8ad82f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -15178,12 +15178,11 @@ src/main/java/forge/util/maps/TreeMapToAmount.java -text src/main/java/forge/util/maps/package-info.java -text src/main/java/forge/util/package-info.java -text src/main/java/forge/util/storage/IStorage.java -text -src/main/java/forge/util/storage/IStorageView.java -text +src/main/java/forge/util/storage/StorageBase.java -text src/main/java/forge/util/storage/StorageImmediatelySerialized.java svneol=native#text/plain src/main/java/forge/util/storage/StorageReaderFile.java -text src/main/java/forge/util/storage/StorageReaderFileSections.java -text src/main/java/forge/util/storage/StorageReaderFolder.java -text -src/main/java/forge/util/storage/StorageView.java -text src/main/java/forge/util/storage/package-info.java -text src/main/java/forge/view/ButtonUtil.java svneol=native#text/plain src/main/java/forge/view/FView.java -text diff --git a/src/main/java/forge/card/EditionCollection.java b/src/main/java/forge/card/EditionCollection.java index 4d19384f21c..62330f70615 100644 --- a/src/main/java/forge/card/EditionCollection.java +++ b/src/main/java/forge/card/EditionCollection.java @@ -27,9 +27,9 @@ import com.google.common.base.Function; import com.google.common.collect.Lists; import forge.util.IItemReader; -import forge.util.storage.StorageView; +import forge.util.storage.StorageBase; -public final class EditionCollection extends StorageView { +public final class EditionCollection extends StorageBase { private final Map aliasToEdition = new TreeMap(); diff --git a/src/main/java/forge/card/FormatCollection.java b/src/main/java/forge/card/FormatCollection.java index 569ae92aaa1..45c95a6a22f 100644 --- a/src/main/java/forge/card/FormatCollection.java +++ b/src/main/java/forge/card/FormatCollection.java @@ -23,12 +23,12 @@ import java.util.List; import forge.game.GameFormat; import forge.util.FileSection; import forge.util.storage.StorageReaderFileSections; -import forge.util.storage.StorageView; +import forge.util.storage.StorageBase; /** * The Class FormatUtils. */ -public final class FormatCollection extends StorageView { +public final class FormatCollection extends StorageBase { @@ -46,7 +46,7 @@ public final class FormatCollection extends StorageView { * @return the standard */ public GameFormat getStandard() { - return getMap().get("Standard"); + return this.map.get("Standard"); } /** @@ -55,7 +55,7 @@ public final class FormatCollection extends StorageView { * @return the extended */ public GameFormat getExtended() { - return getMap().get("Extended"); + return this.map.get("Extended"); } /** @@ -64,7 +64,7 @@ public final class FormatCollection extends StorageView { * @return the modern */ public GameFormat getModern() { - return getMap().get("Modern"); + return this.map.get("Modern"); } /** @@ -72,7 +72,7 @@ public final class FormatCollection extends StorageView { * @return the requested format */ public GameFormat getFormat(String format) { - return getMap().get(format); + return this.map.get(format); } /** diff --git a/src/main/java/forge/deck/DeckgenUtil.java b/src/main/java/forge/deck/DeckgenUtil.java index 9b2e86d19a0..5c505afc302 100644 --- a/src/main/java/forge/deck/DeckgenUtil.java +++ b/src/main/java/forge/deck/DeckgenUtil.java @@ -33,7 +33,6 @@ import forge.util.Aggregates; import forge.util.Lang; import forge.util.MyRandom; import forge.util.storage.IStorage; -import forge.util.storage.IStorageView; /** * Utility collection for various types of decks. @@ -155,7 +154,7 @@ public class DeckgenUtil { } public static Deck getRandomPreconDeck() { - final IStorageView allDecks = QuestController.getPrecons(); + final IStorage allDecks = QuestController.getPrecons(); final int rand = (int) (Math.floor(Math.random() * allDecks.size())); final String name = allDecks.getNames().toArray(new String[0])[rand]; return allDecks.get(name).getDeck(); diff --git a/src/main/java/forge/game/limited/BoosterDraft.java b/src/main/java/forge/game/limited/BoosterDraft.java index d6b1180bb35..1ee3183d704 100644 --- a/src/main/java/forge/game/limited/BoosterDraft.java +++ b/src/main/java/forge/game/limited/BoosterDraft.java @@ -49,7 +49,7 @@ import forge.item.ItemPoolView; import forge.properties.NewConstants; import forge.util.FileUtil; import forge.util.HttpUtil; -import forge.util.storage.IStorageView; +import forge.util.storage.IStorage; /** * @@ -94,7 +94,7 @@ public final class BoosterDraft implements IBoosterDraft { case Block: case FantasyBlock: // Draft from cards by block or set List blocks = new ArrayList(); - IStorageView storage = draftType == LimitedPoolType.Block + IStorage storage = draftType == LimitedPoolType.Block ? Singletons.getModel().getBlocks() : Singletons.getModel().getFantasyBlocks(); for (CardBlock b : storage) { diff --git a/src/main/java/forge/game/limited/CustomLimited.java b/src/main/java/forge/game/limited/CustomLimited.java index fecbc8b6cb0..10b6bf52e6d 100644 --- a/src/main/java/forge/game/limited/CustomLimited.java +++ b/src/main/java/forge/game/limited/CustomLimited.java @@ -35,7 +35,7 @@ import forge.item.ItemPool; import forge.item.ItemPoolView; import forge.util.FileSection; import forge.util.TextUtil; -import forge.util.storage.IStorageView; +import forge.util.storage.IStorage; /** *

@@ -89,7 +89,7 @@ public class CustomLimited extends DeckBase { * @param cubes the cubes * @return the custom limited */ - public static CustomLimited parse(final List dfData, final IStorageView cubes) { + public static CustomLimited parse(final List dfData, final IStorage cubes) { final FileSection data = FileSection.parse(dfData, ":"); diff --git a/src/main/java/forge/gui/deckeditor/controllers/DeckController.java b/src/main/java/forge/gui/deckeditor/controllers/DeckController.java index cb2428e8689..1fee1182a30 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/DeckController.java +++ b/src/main/java/forge/gui/deckeditor/controllers/DeckController.java @@ -259,7 +259,7 @@ public class DeckController { * @return true, if successful */ public boolean fileExists(final String deckName) { - return !this.folder.isUnique(deckName); + return this.folder.contains(deckName); } /* diff --git a/src/main/java/forge/gui/home/quest/VSubmenuQuestData.java b/src/main/java/forge/gui/home/quest/VSubmenuQuestData.java index ec5f307ed8a..c5afdc50199 100644 --- a/src/main/java/forge/gui/home/quest/VSubmenuQuestData.java +++ b/src/main/java/forge/gui/home/quest/VSubmenuQuestData.java @@ -40,7 +40,7 @@ import forge.item.PreconDeck; import forge.quest.QuestController; import forge.quest.QuestWorld; import forge.quest.StartingPoolType; -import forge.util.storage.IStorageView; +import forge.util.storage.IStorage; /** * Assembles Swing components of quest data submenu singleton. @@ -248,7 +248,7 @@ public enum VSubmenuQuestData implements IVSubmenu { cboAllowUnlocks.setSelected(true); final Map preconDescriptions = new HashMap(); - IStorageView preconDecks = QuestController.getPrecons(); + IStorage preconDecks = QuestController.getPrecons(); for (PreconDeck preconDeck : preconDecks) { if (preconDeck.getRecommendedDeals().getMinWins() > 0) { diff --git a/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java b/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java index ad1ef5b92f1..8198731012d 100644 --- a/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java +++ b/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java @@ -181,7 +181,7 @@ public enum CSubmenuSealed implements ICDoc { final IStorage sealedDecks = Singletons.getModel().getDecks().getSealed(); - if (!(sealedDecks.isUnique(sDeckName))) { + if (sealedDecks.contains(sDeckName)) { final int deleteDeck = JOptionPane.showConfirmDialog(null, "\"" + sDeckName + "\" already exists! Do you want to replace it?", "Sealed Deck Game Exists", JOptionPane.YES_NO_OPTION); diff --git a/src/main/java/forge/gui/toolbox/special/FDeckChooser.java b/src/main/java/forge/gui/toolbox/special/FDeckChooser.java index a239ca8e562..2d149c74f2e 100644 --- a/src/main/java/forge/gui/toolbox/special/FDeckChooser.java +++ b/src/main/java/forge/gui/toolbox/special/FDeckChooser.java @@ -35,7 +35,6 @@ import forge.quest.QuestEvent; import forge.quest.QuestEventChallenge; import forge.quest.QuestUtil; import forge.util.storage.IStorage; -import forge.util.storage.IStorageView; @SuppressWarnings("serial") public class FDeckChooser extends JPanel { @@ -217,7 +216,7 @@ public class FDeckChooser extends JPanel { lst.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); final List customNames = new ArrayList(); - final IStorageView allDecks = QuestController.getPrecons(); + final IStorage allDecks = QuestController.getPrecons(); for (final PreconDeck d : allDecks) { customNames.add(d.getName()); } lst.setListData(customNames.toArray(ArrayUtils.EMPTY_STRING_ARRAY)); diff --git a/src/main/java/forge/model/FModel.java b/src/main/java/forge/model/FModel.java index a61652254ad..3ec8dc89bdb 100644 --- a/src/main/java/forge/model/FModel.java +++ b/src/main/java/forge/model/FModel.java @@ -50,8 +50,8 @@ import forge.quest.QuestWorld; import forge.quest.data.QuestPreferences; import forge.util.FileUtil; import forge.util.MultiplexOutputStream; -import forge.util.storage.IStorageView; -import forge.util.storage.StorageView; +import forge.util.storage.IStorage; +import forge.util.storage.StorageBase; import forge.view.FView; /** @@ -81,14 +81,14 @@ public class FModel { private final EditionCollection editions; private final FormatCollection formats; - private final IStorageView boosters; - private final IStorageView specialBoosters; - private final IStorageView tournaments; - private final IStorageView fatPacks; - private final IStorageView blocks; - private final IStorageView fantasyBlocks; - private final IStorageView worlds; - private final IStorageView printSheets; + private final IStorage boosters; + private final IStorage specialBoosters; + private final IStorage tournaments; + private final IStorage fatPacks; + private final IStorage blocks; + private final IStorage fantasyBlocks; + private final IStorage worlds; + private final IStorage printSheets; private static FModel instance = null; @@ -160,13 +160,13 @@ public class FModel { this.formats = new FormatCollection("res/blockdata/formats.txt"); - this.boosters = new StorageView(editions.getBoosterGenerator()); - this.specialBoosters = new StorageView(new SealedProductTemplate.Reader("res/blockdata/boosters-special.txt")); - this.tournaments = new StorageView(new SealedProductTemplate.Reader("res/blockdata/starters.txt")); - this.fatPacks = new StorageView(new FatPackTemplate.Reader("res/blockdata/fatpacks.txt")); - this.blocks = new StorageView(new CardBlock.Reader("res/blockdata/blocks.txt", editions)); - this.fantasyBlocks = new StorageView(new CardBlock.Reader("res/blockdata/fantasyblocks.txt", editions)); - this.worlds = new StorageView(new QuestWorld.Reader("res/quest/world/worlds.txt")); + this.boosters = new StorageBase(editions.getBoosterGenerator()); + this.specialBoosters = new StorageBase(new SealedProductTemplate.Reader("res/blockdata/boosters-special.txt")); + this.tournaments = new StorageBase(new SealedProductTemplate.Reader("res/blockdata/starters.txt")); + this.fatPacks = new StorageBase(new FatPackTemplate.Reader("res/blockdata/fatpacks.txt")); + this.blocks = new StorageBase(new CardBlock.Reader("res/blockdata/blocks.txt", editions)); + this.fantasyBlocks = new StorageBase(new CardBlock.Reader("res/blockdata/fantasyblocks.txt", editions)); + this.worlds = new StorageBase(new QuestWorld.Reader("res/quest/world/worlds.txt")); // TODO - there's got to be a better place for this...oblivion? Preferences.DEV_MODE = this.preferences.getPrefBoolean(FPref.DEV_MODE_ENABLED); @@ -178,7 +178,7 @@ public class FModel { this.decks = new CardCollections(); this.quest = new QuestController(); - this.printSheets = new StorageView(new PrintSheet.Reader("res/blockdata/printsheets.txt")); + this.printSheets = new StorageBase(new PrintSheet.Reader("res/blockdata/printsheets.txt")); // Preload AI profiles AiProfileUtil.loadAllProfiles(); @@ -346,7 +346,7 @@ public class FModel { * * @return the worlds */ - public final IStorageView getWorlds() { + public final IStorage getWorlds() { return this.worlds; } @@ -361,35 +361,35 @@ public class FModel { } /** @return {@link forge.util.storage.IStorageView}<{@link forge.card.CardBlock}> */ - public IStorageView getBlocks() { + public IStorage getBlocks() { return blocks; } /** @return {@link forge.util.storage.IStorageView}<{@link forge.card.CardBlock}> */ - public IStorageView getFantasyBlocks() { + public IStorage getFantasyBlocks() { return fantasyBlocks; } /** @return {@link forge.util.storage.IStorageView}<{@link forge.card.FatPackTemplate}> */ - public IStorageView getFatPacks() { + public IStorage getFatPacks() { return fatPacks; } /** @return {@link forge.util.storage.IStorageView}<{@link forge.card.BoosterTemplate}> */ - public final IStorageView getTournamentPacks() { + public final IStorage getTournamentPacks() { return tournaments; } /** @return {@link forge.util.storage.IStorageView}<{@link forge.card.BoosterTemplate}> */ - public final IStorageView getBoosters() { + public final IStorage getBoosters() { return boosters; } - public final IStorageView getSpecialBoosters() { + public final IStorage getSpecialBoosters() { return specialBoosters; } - public IStorageView getPrintSheets() { + public IStorage getPrintSheets() { return printSheets; } diff --git a/src/main/java/forge/quest/QuestController.java b/src/main/java/forge/quest/QuestController.java index ebb12c31c57..cf332295874 100644 --- a/src/main/java/forge/quest/QuestController.java +++ b/src/main/java/forge/quest/QuestController.java @@ -46,8 +46,7 @@ import forge.quest.data.QuestPreferences.DifficultyPrefs; import forge.quest.io.PreconReader; import forge.quest.io.QuestChallengeReader; import forge.util.storage.IStorage; -import forge.util.storage.IStorageView; -import forge.util.storage.StorageView; +import forge.util.storage.StorageBase; /** * TODO: Write javadoc for this type. @@ -71,14 +70,14 @@ public class QuestController { private transient IStorage decks; private QuestEventDuelManager duelManager = null; - private IStorageView allChallenges = null; + private IStorage allChallenges = null; private QuestBazaarManager bazaar = null; private QuestPetStorage pets = null; // This is used by shop. Had no idea where else to place this - private static transient IStorageView preconManager = null; + private static transient IStorage preconManager = null; /** The Constant RANK_TITLES. */ public static final String[] RANK_TITLES = new String[] { "Level 0 - Confused Wizard", "Level 1 - Mana Mage", @@ -175,9 +174,9 @@ public class QuestController { * * @return QuestPreconManager */ - public static IStorageView getPrecons() { + public static IStorage getPrecons() { if (null == preconManager) { - preconManager = new StorageView(new PreconReader(new File(NewConstants.QUEST_PRECON_DIR))); + preconManager = new StorageBase(new PreconReader(new File(NewConstants.QUEST_PRECON_DIR))); } return QuestController.preconManager; @@ -368,7 +367,7 @@ public class QuestController { * TODO: Write javadoc for this method. * @return QuestEventManager */ - public IStorageView getChallenges() { + public IStorage getChallenges() { if (this.allChallenges == null) { resetChallengesManager(); } @@ -392,7 +391,7 @@ public class QuestController { public void resetChallengesManager() { QuestWorld world = getWorld(); String path = world == null || world.getChallengesDir() == null ? NewConstants.DEFAULT_CHALLENGES_DIR : "res/quest/world/" + world.getChallengesDir(); - this.allChallenges = new StorageView(new QuestChallengeReader(new File(path))); + this.allChallenges = new StorageBase(new QuestChallengeReader(new File(path))); } /** diff --git a/src/main/java/forge/quest/QuestDeckMap.java b/src/main/java/forge/quest/QuestDeckMap.java index 0f08f5a5254..6c24d6b4f47 100644 --- a/src/main/java/forge/quest/QuestDeckMap.java +++ b/src/main/java/forge/quest/QuestDeckMap.java @@ -17,70 +17,24 @@ */ package forge.quest; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; import java.util.Map; -import com.google.common.base.Predicate; -import com.google.common.collect.Iterables; - import forge.deck.Deck; -import forge.util.storage.IStorage; +import forge.util.storage.StorageBase; /** * TODO: Write javadoc for this type. * */ -public class QuestDeckMap implements IStorage { +public class QuestDeckMap extends StorageBase { /** * Instantiates a new quest deck map. */ - public QuestDeckMap() { - this.map = new HashMap(); + public QuestDeckMap(Map in) { + super(in); } - /** - * Instantiates a new quest deck map. - * - * @param inMap the in map - */ - public QuestDeckMap(final Map inMap) { - this.map = inMap; - } - - private final Map map; - - /* - * (non-Javadoc) - * - * @see forge.util.IFolderMapView#get(java.lang.String) - */ - @Override - public Deck get(final String name) { - return this.map.get(name); - } - - /* - * (non-Javadoc) - * - * @see forge.util.IFolderMapView#getNames() - */ - @Override - public Collection getNames() { - return this.map.keySet(); - } - - /* - * (non-Javadoc) - * - * @see java.lang.Iterable#iterator() - */ - @Override - public Iterator iterator() { - return this.map.values().iterator(); - } /* * (non-Javadoc) @@ -102,38 +56,4 @@ public class QuestDeckMap implements IStorage { this.map.remove(deckName); } - /* - * (non-Javadoc) - * - * @see forge.util.IFolderMap#isUnique(java.lang.String) - */ - @Override - public boolean isUnique(final String name) { - return !this.map.containsKey(name); - } - - /* (non-Javadoc) - * @see forge.util.IFolderMapView#any(java.lang.String) - */ - @Override - public boolean contains(String name) { - return map.containsKey(name); - } - - /* (non-Javadoc) - * @see forge.util.IStorageView#getCount() - */ - @Override - public int size() { - return map.size(); - } - - /* (non-Javadoc) - * @see forge.util.storage.IStorageView#find(com.google.common.base.Predicate) - */ - @Override - public Deck find(Predicate condition) { - return Iterables.tryFind(map.values(), condition).orNull(); - } - } diff --git a/src/main/java/forge/quest/QuestEventDuelManager.java b/src/main/java/forge/quest/QuestEventDuelManager.java index 8647e0f565b..e54e508ca96 100644 --- a/src/main/java/forge/quest/QuestEventDuelManager.java +++ b/src/main/java/forge/quest/QuestEventDuelManager.java @@ -31,8 +31,8 @@ import forge.quest.io.QuestDuelReader; import forge.util.maps.CollectionSuppliers; import forge.util.maps.EnumMapOfLists; import forge.util.maps.MapOfLists; -import forge.util.storage.IStorageView; -import forge.util.storage.StorageView; +import forge.util.storage.IStorage; +import forge.util.storage.StorageBase; /** * QuestEventManager. @@ -43,13 +43,13 @@ import forge.util.storage.StorageView; public class QuestEventDuelManager { private final MapOfLists sortedDuels = new EnumMapOfLists(QuestEventDifficulty.class, CollectionSuppliers.arrayLists()); - private final IStorageView allDuels; + private final IStorage allDuels; /** Instantiate all events and difficulty lists. * @param dir   File object */ public QuestEventDuelManager(final File dir) { - allDuels = new StorageView(new QuestDuelReader(dir)); + allDuels = new StorageBase(new QuestDuelReader(dir)); assembleDuelDifficultyLists(); } // End assembleAllEvents() diff --git a/src/main/java/forge/quest/QuestUtilUnlockSets.java b/src/main/java/forge/quest/QuestUtilUnlockSets.java index 01893392dd5..e698beb3450 100644 --- a/src/main/java/forge/quest/QuestUtilUnlockSets.java +++ b/src/main/java/forge/quest/QuestUtilUnlockSets.java @@ -40,7 +40,7 @@ import forge.gui.CardListViewer; import forge.gui.GuiChoose; import forge.item.PaperCard; import forge.quest.io.ReadPriceList; -import forge.util.storage.IStorageView; +import forge.util.storage.IStorage; /** * This is a helper class for unlocking new sets during a format-limited @@ -182,8 +182,8 @@ public class QuestUtilUnlockSets { */ public static void doUnlock(QuestController qData, final CardEdition unlockedSet) { - IStorageView starters = Singletons.getModel().getTournamentPacks(); - IStorageView boosters = Singletons.getModel().getBoosters(); + IStorage starters = Singletons.getModel().getTournamentPacks(); + IStorage boosters = Singletons.getModel().getBoosters(); qData.getFormat().unlockSet(unlockedSet.getCode()); List cardsWon = new ArrayList(); diff --git a/src/main/java/forge/util/storage/IStorage.java b/src/main/java/forge/util/storage/IStorage.java index 6be390e3eb2..a4506e963f0 100644 --- a/src/main/java/forge/util/storage/IStorage.java +++ b/src/main/java/forge/util/storage/IStorage.java @@ -17,41 +17,28 @@ */ package forge.util.storage; +import java.util.Collection; + +import com.google.common.base.Predicate; + /** * TODO: Write javadoc for this type. * * @param the generic type */ -public interface IStorage extends IStorageView { +public interface IStorage extends Iterable { - /** - *

- * addDeck. - *

- * - * @param deck - * a {@link forge.deck.Deck} object. - */ + T get(final String name); + + T find(final Predicate condition); + + Collection getNames(); + + boolean contains(final String name); + + int size(); + void add(final T deck); - /** - *

- * deleteDeck. - *

- * - * @param deckName - * a {@link java.lang.String} object. - */ void delete(final String deckName); - - /** - *

- * isUnique. - *

- * - * @param name the name - * @return a boolean. - */ - boolean isUnique(final String name); - } diff --git a/src/main/java/forge/util/storage/IStorageView.java b/src/main/java/forge/util/storage/IStorageView.java deleted file mode 100644 index 7182d78f3e7..00000000000 --- a/src/main/java/forge/util/storage/IStorageView.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Forge: Play Magic: the Gathering. - * Copyright (C) 2011 Forge Team - * - * 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.util.storage; - -import java.util.Collection; - -import com.google.common.base.Predicate; - -/** - * TODO: Write javadoc for this type. - * - * @param the generic type - */ -public interface IStorageView extends Iterable { - - /** - *

- * getDeck. - *

- * - * @param name the name - * @return a {@link forge.deck.Deck} object. - */ - T get(final String name); - - T find(final Predicate condition); - - /** - * Get names of decks. - * - * @return a ArrayList - */ - Collection getNames(); - - /** - * Contains. - * - * @param name the name - * @return true, if successful - */ - boolean contains(final String name); - - /** - * Gets the count. - * - * @return the count - */ - int size(); - -} diff --git a/src/main/java/forge/util/storage/StorageView.java b/src/main/java/forge/util/storage/StorageBase.java similarity index 70% rename from src/main/java/forge/util/storage/StorageView.java rename to src/main/java/forge/util/storage/StorageBase.java index ee3ae652f55..11c8da2ec31 100644 --- a/src/main/java/forge/util/storage/StorageView.java +++ b/src/main/java/forge/util/storage/StorageBase.java @@ -37,58 +37,34 @@ import forge.util.IItemReader; * @author Forge * @version $Id: DeckManager.java 13590 2012-01-27 20:46:27Z Max mtg $ */ -public class StorageView implements IStorageView { - private final Map map; +public class StorageBase implements IStorage { + protected final Map map; - /** - *

- * Constructor for DeckManager. - *

- * - * @param io the io - */ - public StorageView(final IItemReader io) { + + public StorageBase(final IItemReader io) { this.map = io.readAll(); } - /* - * (non-Javadoc) - * - * @see forge.deck.IFolderMapView#get(java.lang.String) - */ + public StorageBase(final Map inMap) { + this.map = inMap; + } + @Override public T get(final String name) { return this.map.get(name); } - /* - * (non-Javadoc) - * - * @see forge.deck.IFolderMapView#getNames() - */ @Override public final Collection getNames() { return new ArrayList(this.map.keySet()); } - /** - * Gets the map. - * - * @return the map - */ - protected final Map getMap() { - return this.map; - } - @Override public Iterator iterator() { return this.map.values().iterator(); } - /* (non-Javadoc) - * @see forge.util.IFolderMapView#any(java.lang.String) - */ @Override public boolean contains(String name) { return name == null ? false : this.map.containsKey(name); @@ -103,4 +79,16 @@ public class StorageView implements IStorageView { public T find(Predicate condition) { return Iterables.tryFind(map.values(), condition).orNull(); } + + @Override + public void add(T deck) { + throw new UnsupportedOperationException("This is a read-only storage"); + + } + + @Override + public void delete(String deckName) { + throw new UnsupportedOperationException("This is a read-only storage"); + + } } diff --git a/src/main/java/forge/util/storage/StorageImmediatelySerialized.java b/src/main/java/forge/util/storage/StorageImmediatelySerialized.java index c68bb9f46ad..bcc500f5381 100644 --- a/src/main/java/forge/util/storage/StorageImmediatelySerialized.java +++ b/src/main/java/forge/util/storage/StorageImmediatelySerialized.java @@ -29,7 +29,7 @@ import forge.util.IItemSerializer; * @author Forge * @version $Id$ */ -public class StorageImmediatelySerialized extends StorageView implements IStorage { +public class StorageImmediatelySerialized extends StorageBase { private final IItemSerializer serializer; /** @@ -52,7 +52,7 @@ public class StorageImmediatelySerialized extends StorageView implements I @Override public final void add(final T deck) { String name = serializer.getItemKey(deck); - this.getMap().put(name, deck); + this.map.put(name, deck); this.serializer.save(deck); } @@ -63,17 +63,6 @@ public class StorageImmediatelySerialized extends StorageView implements I */ @Override public final void delete(final String deckName) { - this.serializer.erase(this.getMap().remove(deckName)); + this.serializer.erase(this.map.remove(deckName)); } - - /* - * (non-Javadoc) - * - * @see forge.deck.IFolderMapView#isUnique(java.lang.String) - */ - @Override - public final boolean isUnique(final String name) { - return !this.getMap().containsKey(name); - } - }