diff --git a/src/magic/model/MagicCondensedCardDefinition.java b/src/magic/model/MagicCondensedCardDefinition.java new file mode 100644 index 0000000000..8ed16d0da2 --- /dev/null +++ b/src/magic/model/MagicCondensedCardDefinition.java @@ -0,0 +1,137 @@ +package magic.model; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +// basically a wrapper for MagicCardDefinition that adds number of copies of card +public class MagicCondensedCardDefinition { + private int copies; + private MagicCardDefinition card; + + public MagicCondensedCardDefinition(MagicCardDefinition card) { + this.card = card; + copies = 1; + } + + public MagicCardDefinition getCard() { + return card; + } + + public void incrementNumCopies() { + copies++; + } + + public void decrementNumCopies() { + if (copies > 0) { + copies--; + } + } + + public void setNumCopies(int i) { + copies = i; + } + + public int getNumCopies() { + return copies; + } + + public static final Comparator NUM_COPIES_COMPARATOR_DESC=new Comparator() { + @Override + public int compare(final MagicCondensedCardDefinition cardDefinition1,final MagicCondensedCardDefinition cardDefinition2) { + return cardDefinition1.getNumCopies() - cardDefinition2.getNumCopies(); + } + }; + + public static final Comparator NUM_COPIES_COMPARATOR_ASC=new Comparator() { + @Override + public int compare(final MagicCondensedCardDefinition cardDefinition1,final MagicCondensedCardDefinition cardDefinition2) { + return MagicCondensedCardDefinition.NUM_COPIES_COMPARATOR_DESC.compare(cardDefinition2, cardDefinition1); + } + }; + + public static final Comparator NAME_COMPARATOR_DESC=new Comparator() { + @Override + public int compare(final MagicCondensedCardDefinition cardDefinition1,final MagicCondensedCardDefinition cardDefinition2) { + return MagicCardDefinition.NAME_COMPARATOR_DESC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); + } + }; + + public static final Comparator NAME_COMPARATOR_ASC=new Comparator() { + @Override + public int compare(final MagicCondensedCardDefinition cardDefinition1,final MagicCondensedCardDefinition cardDefinition2) { + return MagicCardDefinition.NAME_COMPARATOR_ASC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); + } + }; + + public static final Comparator CONVERTED_COMPARATOR_DESC=new Comparator() { + @Override + public int compare(final MagicCondensedCardDefinition cardDefinition1,final MagicCondensedCardDefinition cardDefinition2) { + return MagicCardDefinition.CONVERTED_COMPARATOR_DESC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); + } + }; + + public static final Comparator CONVERTED_COMPARATOR_ASC=new Comparator() { + @Override + public int compare(final MagicCondensedCardDefinition cardDefinition1,final MagicCondensedCardDefinition cardDefinition2) { + return MagicCardDefinition.CONVERTED_COMPARATOR_ASC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); + } + }; + + public static final Comparator TYPE_COMPARATOR_DESC=new Comparator() { + @Override + public int compare(final MagicCondensedCardDefinition cardDefinition1,final MagicCondensedCardDefinition cardDefinition2) { + return MagicCardDefinition.TYPE_COMPARATOR_DESC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); + } + }; + + public static final Comparator TYPE_COMPARATOR_ASC=new Comparator() { + @Override + public int compare(final MagicCondensedCardDefinition cardDefinition1,final MagicCondensedCardDefinition cardDefinition2) { + return MagicCardDefinition.TYPE_COMPARATOR_ASC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); + } + }; + + public static final Comparator RARITY_COMPARATOR_DESC=new Comparator() { + @Override + public int compare(final MagicCondensedCardDefinition cardDefinition1,final MagicCondensedCardDefinition cardDefinition2) { + return MagicCardDefinition.RARITY_COMPARATOR_DESC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); + } + }; + + public static final Comparator RARITY_COMPARATOR_ASC=new Comparator() { + @Override + public int compare(final MagicCondensedCardDefinition cardDefinition1,final MagicCondensedCardDefinition cardDefinition2) { + return MagicCardDefinition.RARITY_COMPARATOR_ASC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); + } + }; + + public static final Comparator POWER_COMPARATOR_DESC=new Comparator() { + @Override + public int compare(final MagicCondensedCardDefinition cardDefinition1,final MagicCondensedCardDefinition cardDefinition2) { + return MagicCardDefinition.POWER_COMPARATOR_DESC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); + } + }; + + public static final Comparator POWER_COMPARATOR_ASC=new Comparator() { + @Override + public int compare(final MagicCondensedCardDefinition cardDefinition1,final MagicCondensedCardDefinition cardDefinition2) { + return MagicCardDefinition.POWER_COMPARATOR_ASC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); + } + }; + + public static final Comparator TOUGHNESS_COMPARATOR_DESC=new Comparator() { + @Override + public int compare(final MagicCondensedCardDefinition cardDefinition1,final MagicCondensedCardDefinition cardDefinition2) { + return MagicCardDefinition.TOUGHNESS_COMPARATOR_DESC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); + } + }; + + public static final Comparator TOUGHNESS_COMPARATOR_ASC=new Comparator() { + @Override + public int compare(final MagicCondensedCardDefinition cardDefinition1,final MagicCondensedCardDefinition cardDefinition2) { + return MagicCardDefinition.POWER_COMPARATOR_ASC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); + } + }; +} \ No newline at end of file diff --git a/src/magic/model/MagicCondensedDeck.java b/src/magic/model/MagicCondensedDeck.java new file mode 100644 index 0000000000..0f34145d16 --- /dev/null +++ b/src/magic/model/MagicCondensedDeck.java @@ -0,0 +1,71 @@ +package magic.model; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class MagicCondensedDeck extends ArrayList { + + private static final long serialVersionUID = 143L; + + private String name = "Unsaved Deck"; + + public MagicCondensedDeck() {} + + public MagicCondensedDeck(final MagicCondensedDeck deck) { + super(deck); + name = deck.getName(); + } + + public MagicCondensedDeck(final MagicDeck list) { + this((List) list); + + name = list.getName(); + } + + public MagicCondensedDeck(final List list) { + super(); + + Collections.sort(list, MagicCardDefinition.NAME_COMPARATOR_DESC); + + MagicCondensedCardDefinition lastDeckCard = null; + + for(int i = 0; i < list.size(); i++) { + // increment copies count if more than one of the same card + if(lastDeckCard != null && MagicCardDefinition.NAME_COMPARATOR_DESC.compare(lastDeckCard.getCard(), list.get(i)) == 0) { + lastDeckCard.incrementNumCopies(); + } else { + lastDeckCard = new MagicCondensedCardDefinition(list.get(i)); + add(lastDeckCard); + } + } + } + + public void setContent(final MagicCondensedDeck deck) { + clear(); + addAll(deck); + name = deck.getName(); + } + + public void setName(final String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public MagicDeck toMagicDeck() { + MagicDeck deck = new MagicDeck(); + + for(int i = 0; i < size(); i++) { + MagicCondensedCardDefinition card = get(i); + + for(int j = 0; j < card.getNumCopies(); j++) { + deck.add(card.getCard()); + } + } + + return deck; + } +} diff --git a/src/magic/model/MagicDeckCardDefinition.java b/src/magic/model/MagicDeckCardDefinition.java deleted file mode 100644 index 6e2814ed76..0000000000 --- a/src/magic/model/MagicDeckCardDefinition.java +++ /dev/null @@ -1,163 +0,0 @@ -package magic.model; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -// basically a wrapper for MagicCardDefinition that adds number of copies of card -public class MagicDeckCardDefinition { - private int copies; - private MagicCardDefinition card; - - public MagicDeckCardDefinition(MagicCardDefinition card) { - this.card = card; - copies = 1; - } - - public MagicCardDefinition getCard() { - return card; - } - - public void incrementNumCopies() { - copies++; - } - - public void decrementNumCopies() { - if (copies > 0) { - copies--; - } - } - - public void setNumCopies(int i) { - copies = i; - } - - public int getNumCopies() { - return copies; - } - - public static List simpleCopyCardList(List list) { - ArrayList newList = new ArrayList(); - for(int i = 0; i < list.size(); i++) { - newList.add(new MagicDeckCardDefinition(list.get(i))); - } - return newList; - } - - public static List condenseCopyCardList(List list) { - Collections.sort(list, MagicCardDefinition.NAME_COMPARATOR_DESC); - - ArrayList newList = new ArrayList(); - MagicDeckCardDefinition lastDeckCard = null; - - for(int i = 0; i < list.size(); i++) { - // increment copies count if more than one of the same card - if(lastDeckCard != null && MagicCardDefinition.NAME_COMPARATOR_DESC.compare(lastDeckCard.getCard(), list.get(i)) == 0) { - lastDeckCard.incrementNumCopies(); - } else { - lastDeckCard = new MagicDeckCardDefinition(list.get(i)); - newList.add(lastDeckCard); - } - } - return newList; - } - - public static final Comparator NUM_COPIES_COMPARATOR_DESC=new Comparator() { - @Override - public int compare(final MagicDeckCardDefinition cardDefinition1,final MagicDeckCardDefinition cardDefinition2) { - return cardDefinition1.getNumCopies() - cardDefinition2.getNumCopies(); - } - }; - - public static final Comparator NUM_COPIES_COMPARATOR_ASC=new Comparator() { - @Override - public int compare(final MagicDeckCardDefinition cardDefinition1,final MagicDeckCardDefinition cardDefinition2) { - return MagicDeckCardDefinition.NUM_COPIES_COMPARATOR_DESC.compare(cardDefinition2, cardDefinition1); - } - }; - - public static final Comparator NAME_COMPARATOR_DESC=new Comparator() { - @Override - public int compare(final MagicDeckCardDefinition cardDefinition1,final MagicDeckCardDefinition cardDefinition2) { - return MagicCardDefinition.NAME_COMPARATOR_DESC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); - } - }; - - public static final Comparator NAME_COMPARATOR_ASC=new Comparator() { - @Override - public int compare(final MagicDeckCardDefinition cardDefinition1,final MagicDeckCardDefinition cardDefinition2) { - return MagicCardDefinition.NAME_COMPARATOR_ASC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); - } - }; - - public static final Comparator CONVERTED_COMPARATOR_DESC=new Comparator() { - @Override - public int compare(final MagicDeckCardDefinition cardDefinition1,final MagicDeckCardDefinition cardDefinition2) { - return MagicCardDefinition.CONVERTED_COMPARATOR_DESC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); - } - }; - - public static final Comparator CONVERTED_COMPARATOR_ASC=new Comparator() { - @Override - public int compare(final MagicDeckCardDefinition cardDefinition1,final MagicDeckCardDefinition cardDefinition2) { - return MagicCardDefinition.CONVERTED_COMPARATOR_ASC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); - } - }; - - public static final Comparator TYPE_COMPARATOR_DESC=new Comparator() { - @Override - public int compare(final MagicDeckCardDefinition cardDefinition1,final MagicDeckCardDefinition cardDefinition2) { - return MagicCardDefinition.TYPE_COMPARATOR_DESC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); - } - }; - - public static final Comparator TYPE_COMPARATOR_ASC=new Comparator() { - @Override - public int compare(final MagicDeckCardDefinition cardDefinition1,final MagicDeckCardDefinition cardDefinition2) { - return MagicCardDefinition.TYPE_COMPARATOR_ASC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); - } - }; - - public static final Comparator RARITY_COMPARATOR_DESC=new Comparator() { - @Override - public int compare(final MagicDeckCardDefinition cardDefinition1,final MagicDeckCardDefinition cardDefinition2) { - return MagicCardDefinition.RARITY_COMPARATOR_DESC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); - } - }; - - public static final Comparator RARITY_COMPARATOR_ASC=new Comparator() { - @Override - public int compare(final MagicDeckCardDefinition cardDefinition1,final MagicDeckCardDefinition cardDefinition2) { - return MagicCardDefinition.RARITY_COMPARATOR_ASC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); - } - }; - - public static final Comparator POWER_COMPARATOR_DESC=new Comparator() { - @Override - public int compare(final MagicDeckCardDefinition cardDefinition1,final MagicDeckCardDefinition cardDefinition2) { - return MagicCardDefinition.POWER_COMPARATOR_DESC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); - } - }; - - public static final Comparator POWER_COMPARATOR_ASC=new Comparator() { - @Override - public int compare(final MagicDeckCardDefinition cardDefinition1,final MagicDeckCardDefinition cardDefinition2) { - return MagicCardDefinition.POWER_COMPARATOR_ASC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); - } - }; - - public static final Comparator TOUGHNESS_COMPARATOR_DESC=new Comparator() { - @Override - public int compare(final MagicDeckCardDefinition cardDefinition1,final MagicDeckCardDefinition cardDefinition2) { - return MagicCardDefinition.TOUGHNESS_COMPARATOR_DESC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); - } - }; - - public static final Comparator TOUGHNESS_COMPARATOR_ASC=new Comparator() { - @Override - public int compare(final MagicDeckCardDefinition cardDefinition1,final MagicDeckCardDefinition cardDefinition2) { - return MagicCardDefinition.POWER_COMPARATOR_ASC.compare(cardDefinition1.getCard(), cardDefinition2.getCard()); - } - }; -} \ No newline at end of file diff --git a/src/magic/model/MagicDeckConstructionRule.java b/src/magic/model/MagicDeckConstructionRule.java index 2abe78e710..207112dee1 100644 --- a/src/magic/model/MagicDeckConstructionRule.java +++ b/src/magic/model/MagicDeckConstructionRule.java @@ -28,8 +28,8 @@ public enum MagicDeckConstructionRule { brokenRules.add(MinDeckSize); } - List countedDeck = MagicDeckCardDefinition.condenseCopyCardList(deck); - for(MagicDeckCardDefinition countedCard : countedDeck) { + MagicCondensedDeck countedDeck = new MagicCondensedDeck(deck); + for(MagicCondensedCardDefinition countedCard : countedDeck) { if(countedCard.getNumCopies() > 4 && !countedCard.getCard().isBasic() && !countedCard.getCard().getName().equals("Relentless Rats")) { brokenRules.add(FourCopyLimit); break; diff --git a/src/magic/ui/CardTableModel.java b/src/magic/ui/CardTableModel.java index afe9cf4e76..3b43afe88e 100644 --- a/src/magic/ui/CardTableModel.java +++ b/src/magic/ui/CardTableModel.java @@ -1,7 +1,9 @@ package magic.ui; import magic.model.MagicCardDefinition; -import magic.model.MagicDeckCardDefinition; +import magic.model.MagicCondensedCardDefinition; +import magic.model.MagicCondensedDeck; +import magic.model.MagicDeck; import magic.model.MagicManaCost; import java.lang.Integer; @@ -71,11 +73,11 @@ public class CardTableModel implements TableModel { private final boolean isDeck; private boolean[] isDesc = new boolean[] {false, false, false, false, false, false, false, false, false, false, false, false, false}; - private List cardDefinitions; - private Comparator comp; + private MagicCondensedDeck cardDefinitions; + private Comparator comp; public CardTableModel(final List cardDefs, final boolean isDeck) { - this.comp = MagicDeckCardDefinition.NAME_COMPARATOR_DESC; + this.comp = MagicCondensedCardDefinition.NAME_COMPARATOR_DESC; this.isDeck = isDeck; setCards(cardDefs); @@ -99,11 +101,7 @@ public class CardTableModel implements TableModel { } public void setCards(List defs) { - if (isDeck) { - this.cardDefinitions = MagicDeckCardDefinition.condenseCopyCardList(defs); - } else { - this.cardDefinitions = MagicDeckCardDefinition.simpleCopyCardList(defs); - } + this.cardDefinitions = new MagicCondensedDeck(defs); // re-sort if necessary if(comp != null) { @@ -112,23 +110,23 @@ public class CardTableModel implements TableModel { } public void sort(int column) { - Comparator oldComp = comp; + Comparator oldComp = comp; comp = null; switch(column) { - case 0: comp = (isDesc[column]) ? MagicDeckCardDefinition.NUM_COPIES_COMPARATOR_ASC : MagicDeckCardDefinition.NUM_COPIES_COMPARATOR_DESC; + case 0: comp = (isDesc[column]) ? MagicCondensedCardDefinition.NUM_COPIES_COMPARATOR_ASC : MagicCondensedCardDefinition.NUM_COPIES_COMPARATOR_DESC; break; - case 1: comp = (isDesc[column]) ? MagicDeckCardDefinition.NAME_COMPARATOR_ASC : MagicDeckCardDefinition.NAME_COMPARATOR_DESC; + case 1: comp = (isDesc[column]) ? MagicCondensedCardDefinition.NAME_COMPARATOR_ASC : MagicCondensedCardDefinition.NAME_COMPARATOR_DESC; break; - case 2: comp = (isDesc[column]) ? MagicDeckCardDefinition.CONVERTED_COMPARATOR_ASC : MagicDeckCardDefinition.CONVERTED_COMPARATOR_DESC; + case 2: comp = (isDesc[column]) ? MagicCondensedCardDefinition.CONVERTED_COMPARATOR_ASC : MagicCondensedCardDefinition.CONVERTED_COMPARATOR_DESC; break; - case 3: comp = (isDesc[column]) ? MagicDeckCardDefinition.POWER_COMPARATOR_ASC : MagicDeckCardDefinition.POWER_COMPARATOR_DESC; + case 3: comp = (isDesc[column]) ? MagicCondensedCardDefinition.POWER_COMPARATOR_ASC : MagicCondensedCardDefinition.POWER_COMPARATOR_DESC; break; - case 4: comp = (isDesc[column]) ? MagicDeckCardDefinition.TOUGHNESS_COMPARATOR_ASC : MagicDeckCardDefinition.TOUGHNESS_COMPARATOR_DESC; + case 4: comp = (isDesc[column]) ? MagicCondensedCardDefinition.TOUGHNESS_COMPARATOR_ASC : MagicCondensedCardDefinition.TOUGHNESS_COMPARATOR_DESC; break; - case 5: comp = (isDesc[column]) ? MagicDeckCardDefinition.TYPE_COMPARATOR_ASC : MagicDeckCardDefinition.TYPE_COMPARATOR_DESC; + case 5: comp = (isDesc[column]) ? MagicCondensedCardDefinition.TYPE_COMPARATOR_ASC : MagicCondensedCardDefinition.TYPE_COMPARATOR_DESC; break; - case 7: comp = (isDesc[column]) ? MagicDeckCardDefinition.RARITY_COMPARATOR_ASC : MagicDeckCardDefinition.RARITY_COMPARATOR_DESC; + case 7: comp = (isDesc[column]) ? MagicCondensedCardDefinition.RARITY_COMPARATOR_ASC : MagicCondensedCardDefinition.RARITY_COMPARATOR_DESC; break; }