diff --git a/forge-game/src/main/java/forge/game/GameFormat.java b/forge-game/src/main/java/forge/game/GameFormat.java index e87715c1938..89f703d5592 100644 --- a/forge-game/src/main/java/forge/game/GameFormat.java +++ b/forge-game/src/main/java/forge/game/GameFormat.java @@ -170,14 +170,7 @@ public class GameFormat implements Comparable { return this.allowedSetCodes_ro.isEmpty() || this.allowedSetCodes_ro.contains(setCode); } - public boolean isDeckLegal(final Deck deck) { - CardPool allCards = new CardPool(); // will count cards in this pool to enforce restricted - allCards.addAll(deck.getMain()); - if (deck.has(DeckSection.Sideboard)) - allCards.addAll(deck.get(DeckSection.Sideboard)); - if (deck.has(DeckSection.Commander)) - allCards.addAll(deck.get(DeckSection.Commander)); - + private boolean isPoolLegal(final CardPool allCards) { for (Entry poolEntry : allCards) { if (!filterRules.apply(poolEntry.getKey())) { return false; //all cards in deck must pass card predicate to pass deck predicate @@ -192,6 +185,20 @@ public class GameFormat implements Comparable { } return true; } + + private static CardPool getAllDecksCards(final Deck deck) { + CardPool allCards = new CardPool(); // will count cards in this pool to enforce restricted + allCards.addAll(deck.getMain()); + if (deck.has(DeckSection.Sideboard)) + allCards.addAll(deck.get(DeckSection.Sideboard)); + if (deck.has(DeckSection.Commander)) + allCards.addAll(deck.get(DeckSection.Commander)); + return allCards; + } + + public boolean isDeckLegal(final Deck deck) { + return isPoolLegal(getAllDecksCards(deck)); + } /* * (non-Javadoc) @@ -297,8 +304,9 @@ public class GameFormat implements Comparable { public Iterable getAllFormatsOfDeck(Deck deck) { List result = new ArrayList(); + CardPool allCards = GameFormat.getAllDecksCards(deck); for(GameFormat gf : naturallyOrdered) { - if (gf.isDeckLegal(deck)) + if (gf.isPoolLegal(allCards)) result.add(gf); } if( result.isEmpty()) diff --git a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/DeckController.java b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/DeckController.java index 1f11d84657e..b2bd7307387 100644 --- a/forge-gui/src/main/java/forge/gui/deckeditor/controllers/DeckController.java +++ b/forge-gui/src/main/java/forge/gui/deckeditor/controllers/DeckController.java @@ -17,8 +17,6 @@ */ package forge.gui.deckeditor.controllers; -import java.util.ArrayList; - import org.apache.commons.lang3.StringUtils; import com.google.common.base.Supplier; @@ -38,7 +36,7 @@ public class DeckController { private boolean saved; private boolean modelInStorage; private final IStorage rootFolder; - private IStorage folder; + private IStorage currentFolder; private final ACEditorBase view; private final Supplier newModelCreator; @@ -52,7 +50,7 @@ public class DeckController { public DeckController(final IStorage folder0, final ACEditorBase view0, final Supplier newModelCreator0) { this.rootFolder = folder0; - this.folder = rootFolder; + this.currentFolder = rootFolder; this.view = view0; this.model = null; this.saved = true; @@ -97,7 +95,7 @@ public class DeckController { return true; } - final T modelStored = this.folder.get(this.model.getName()); + final T modelStored = this.currentFolder.get(this.model.getName()); // checks presence in dictionary only. if (modelStored == this.model) { return true; @@ -130,15 +128,6 @@ public class DeckController { updateCaptions(); } - /** - * Gets the saved names. - * - * @return the saved names - */ - public ArrayList getSavedNames() { - return new ArrayList(this.folder.getItemNames()); - } - /** * Reload current model */ @@ -154,9 +143,9 @@ public class DeckController { public void load(final String path, final String name) { if ( StringUtils.isBlank(path)) - folder = rootFolder; + currentFolder = rootFolder; else - folder = rootFolder.tryGetFolder(path); + currentFolder = rootFolder.tryGetFolder(path); load(name); } @@ -166,7 +155,7 @@ public class DeckController { * @param name the name */ @SuppressWarnings("unchecked") private void load(final String name) { - T newModel = this.folder.get(name); + T newModel = this.currentFolder.get(name); if (newModel != null) { this.setModel((T) newModel.copyTo(name), true); } @@ -184,7 +173,7 @@ public class DeckController { return; } - this.folder.add(this.model); + this.currentFolder.add(this.model); // copy to new instance which will be edited and left if unsaved this.model = (T)this.model.copyTo(this.model.getName()); this.modelInStorage = true; @@ -217,7 +206,7 @@ public class DeckController { */ public void delete() { if (StringUtils.isNotBlank(this.model.getName())) { - this.folder.delete(this.model.getName()); + this.currentFolder.delete(this.model.getName()); } this.modelInStorage = false; this.newModel(); @@ -230,7 +219,7 @@ public class DeckController { * @return true, if successful */ public boolean fileExists(final String deckName) { - return this.folder.contains(deckName); + return this.currentFolder.contains(deckName); } /** diff --git a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/DeckManager.java b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/DeckManager.java index f209b83ee78..ee91834517a 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/DeckManager.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/itemmanager/DeckManager.java @@ -213,7 +213,7 @@ public final class DeckManager extends ItemManager { }, getFilter(DeckColorFilter.class) == null); } - private void editDeck(final DeckProxy deck) { + private void editDeck(final DeckProxy deck) { if (deck == null || this.preventEdit) { return; } ACEditorBase editorCtrl = null; @@ -261,8 +261,9 @@ public final class DeckManager extends ItemManager { return false; } + + // consider using deck proxy's method to delete deck final CardCollections deckManager = Singletons.getModel().getDecks(); - switch(this.gametype) { case Constructed: deckManager.getConstructed().delete(deck.getName()); break;