diff --git a/forge-core/src/main/java/forge/deck/DeckGroup.java b/forge-core/src/main/java/forge/deck/DeckGroup.java index f23111b4182..2c444f5ba52 100644 --- a/forge-core/src/main/java/forge/deck/DeckGroup.java +++ b/forge-core/src/main/java/forge/deck/DeckGroup.java @@ -139,4 +139,12 @@ public class DeckGroup extends DeckBase { return arg1.getName(); } }; + + + public static final Function FN_HUMAN_DECK = new Function() { + @Override + public Deck apply(DeckGroup arg1) { + return arg1.getHumanDeck(); + } + }; } diff --git a/forge-gui/src/main/java/forge/gui/deckeditor/DeckProxy.java b/forge-gui/src/main/java/forge/gui/deckeditor/DeckProxy.java index 52fc9de810a..3695f44e590 100644 --- a/forge-gui/src/main/java/forge/gui/deckeditor/DeckProxy.java +++ b/forge-gui/src/main/java/forge/gui/deckeditor/DeckProxy.java @@ -26,7 +26,9 @@ import forge.quest.QuestController; import forge.quest.QuestEvent; import forge.util.IHasName; import forge.util.storage.IStorage; +import forge.util.storage.StorageImmediatelySerialized; +// Adding a generic to this class creates compile problems in ItemManager (that I can not fix) public class DeckProxy implements InventoryItem { protected final IHasName deck; protected final IStorage storage; @@ -133,16 +135,7 @@ public class DeckProxy implements InventoryItem { return false; } - public void updateInStorage() { - // if storage is not readonly, save the deck there. - } - - public void deleteFromStorage() { - // if storage is not readonly, delete the deck from there. - } - // TODO: The methods below should not take the decks collections from singletons, instead they are supposed to use data passed in parameters - public static Iterable getAllConstructedDecks(IStorage storageRoot) { List result = new ArrayList(); addDecksRecursivelly(result, "", storageRoot); @@ -184,6 +177,17 @@ public class DeckProxy implements InventoryItem { } }; } + + @SuppressWarnings("unchecked") + public void updateInStorage() { + if ( storage instanceof StorageImmediatelySerialized ) + ((StorageImmediatelySerialized)storage).add(deck); + } + + public void deleteFromStorage() { + if ( storage instanceof StorageImmediatelySerialized ) + storage.delete(getName()); + } private static class ThemeDeckGenerator extends DeckProxy { private final String name; @@ -245,13 +249,14 @@ public class DeckProxy implements InventoryItem { return decks; } + @SuppressWarnings("unchecked") public static Iterable getAllSealedDecks(IStorage sealed) { final List humanDecks = new ArrayList(); // Since AI decks are tied directly to the human choice, // they're just mapped in a parallel map and grabbed when the game starts. for (final DeckGroup d : sealed) { - humanDecks.add(new DeckProxy(d.getHumanDeck(), GameType.Sealed, sealed)); + humanDecks.add(new DeckProxy(d, (Function)(Object)DeckGroup.FN_HUMAN_DECK, GameType.Sealed, sealed)); } return humanDecks; } @@ -266,10 +271,11 @@ public class DeckProxy implements InventoryItem { return decks; } + @SuppressWarnings("unchecked") public static Iterable getDraftDecks(IStorage draft) { ArrayList decks = new ArrayList(); for (DeckGroup d : draft) { - decks.add(new DeckProxy(d.getHumanDeck(), GameType.Draft, draft)); + decks.add(new DeckProxy(d, ((Function)(Object)DeckGroup.FN_HUMAN_DECK), GameType.Draft, draft)); } return decks; }