package magic.ui.widget.deck.legality; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import javax.swing.event.TableModelListener; import javax.swing.table.TableModel; import magic.data.CardLegality; import magic.data.MagicFormat; import magic.model.MagicCardDefinition; import magic.model.MagicDeck; import magic.utility.DeckUtils; public class CardsLegalityTableModel implements TableModel { private static final Comparator<CardLegalityInfo> NAME_COMPARATOR_DESC = new Comparator<CardLegalityInfo>() { @Override public int compare(final CardLegalityInfo cfl1, final CardLegalityInfo cfl2) { return cfl1.getCardName().compareTo(cfl2.getCardName()); } }; /** * List of event listeners. These listeners wait for something to happen * with the table so that they can react. This is a must! */ private final ArrayList<TableModelListener> listeners = new ArrayList<>(); @Override public void addTableModelListener(final TableModelListener l) { if (listeners.contains(l) == false) { listeners.add(l); } } @Override public void removeTableModelListener(final TableModelListener l) { listeners.remove(l); } static final String[] COLUMN_NAMES = { "#", // 0 "Name" // 1 }; static final int[] COLUMN_MIN_WIDTHS = { 30, // 0 # 180 // 1 name }; public static final int COST_COLUMN_INDEX = 2; private List<CardLegalityInfo> cardLegalityList = new ArrayList<>(); private final Comparator<CardLegalityInfo> comp; public CardsLegalityTableModel() { this.comp = NAME_COMPARATOR_DESC; } public MagicCardDefinition getCardDef(final int row) { if (row < 0 || row >= cardLegalityList.size()) { return null; } return cardLegalityList.get(row).getCard(); } public void showDeckLegality(final MagicDeck aDeck, final MagicFormat aFormat) { if (aFormat != null) { cardLegalityList = getCardsLegalityList(aDeck, aFormat); if (comp != null) { Collections.sort(cardLegalityList, comp); } } } @Override public Class<?> getColumnClass(final int columnIndex) { return String.class; } @Override public int getColumnCount(){ return COLUMN_NAMES.length; } @Override public String getColumnName(final int columnIndex){ return COLUMN_NAMES[columnIndex]; } @Override public int getRowCount() { return cardLegalityList.size(); } @Override public Object getValueAt(final int rowIndex, final int columnIndex) { return columnIndex == 1 ? cardLegalityList.get(rowIndex).getCardName() : ""; } @Override public boolean isCellEditable(final int rowIndex, final int columnIndex) { return false; } @Override public void setValueAt(final Object value, final int rowIndex, final int columnIndex) { } CardLegalityInfo getCardLegality(int row) { return cardLegalityList.get(row); } private List<CardLegalityInfo> getCardsLegalityList(final MagicDeck aDeck, final MagicFormat aFormat) { final List<CardLegalityInfo> cardsLegalityList = new ArrayList<>(); for (MagicCardDefinition card : DeckUtils.getDistinctCards(aDeck)) { final int cardCountCheck = card.canHaveAnyNumberInDeck() ? 1 : aDeck.getCardCount(card); final CardLegality legality = aFormat.getCardLegality(card, cardCountCheck); final CardLegalityInfo cardLegality = new CardLegalityInfo(card, legality, aFormat); cardsLegalityList.add(cardLegality); } return cardsLegalityList; } }