private Deck getFavoriteDeck() {
   Iterable<DeckProxy> decks;
   switch (lstDecks.getGameType()) {
     case Commander:
       decks = DeckProxy.getAllCommanderDecks();
       break;
     case TinyLeaders:
       decks = DeckProxy.getAllTinyLeadersDecks();
       break;
     case Archenemy:
       decks = DeckProxy.getAllSchemeDecks();
       break;
     case Planechase:
       decks = DeckProxy.getAllPlanarDecks();
       break;
     default:
       decks = DeckProxy.getAllConstructedDecks();
       break;
   }
   decks =
       Iterables.filter(
           decks,
           new Predicate<DeckProxy>() {
             @Override
             public boolean apply(final DeckProxy deck) {
               return deck.isFavoriteDeck();
             }
           });
   if (Iterables.isEmpty(decks)) {
     return getGeneratedDeck(); // fall back to generated deck if no favorite decks
   }
   return Aggregates.random(decks).getDeck();
 }
 private Deck getGeneratedDeck() {
   switch (lstDecks.getGameType()) {
     case Commander:
       return DeckgenUtil.generateCommanderDeck(isAi, GameType.Commander);
     case TinyLeaders:
       return DeckgenUtil.generateCommanderDeck(isAi, GameType.TinyLeaders);
     case Archenemy:
       return DeckgenUtil.generateSchemeDeck();
     case Planechase:
       return DeckgenUtil.generatePlanarDeck();
     default:
       while (true) {
         switch (Aggregates.random(DeckType.ConstructedOptions)) {
           case PRECONSTRUCTED_DECK:
             return Aggregates.random(
                     DeckProxy.getAllPreconstructedDecks(QuestController.getPrecons()))
                 .getDeck();
           case QUEST_OPPONENT_DECK:
             return Aggregates.random(DeckProxy.getAllQuestEventAndChallenges()).getDeck();
           case COLOR_DECK:
             final List<String> colors = new ArrayList<String>();
             final int count = Aggregates.randomInt(1, 3);
             for (int i = 1; i <= count; i++) {
               colors.add("Random " + i);
             }
             return DeckgenUtil.buildColorDeck(colors, isAi);
           case THEME_DECK:
             return Aggregates.random(DeckProxy.getAllThemeDecks()).getDeck();
           default:
             continue;
         }
       }
   }
 }
 private Deck getUserDeck() {
   Iterable<DeckProxy> decks;
   final GameType gameType = lstDecks.getGameType();
   switch (gameType) {
     case Commander:
       decks = DeckProxy.getAllCommanderDecks(DeckFormat.Commander.isLegalDeckPredicate());
       break;
     case TinyLeaders:
       decks = DeckProxy.getAllTinyLeadersDecks(DeckFormat.TinyLeaders.isLegalDeckPredicate());
       break;
     case Archenemy:
       decks = DeckProxy.getAllSchemeDecks(DeckFormat.Archenemy.isLegalDeckPredicate());
       break;
     case Planechase:
       decks = DeckProxy.getAllPlanarDecks(DeckFormat.Planechase.isLegalDeckPredicate());
       break;
     default:
       decks = DeckProxy.getAllConstructedDecks(gameType.getDeckFormat().isLegalDeckPredicate());
       break;
   }
   if (Iterables.isEmpty(decks)) {
     return getGeneratedDeck(); // fall back to generated deck if no decks in filtered list
   }
   return Aggregates.random(decks).getDeck();
 }