package net.socialgamer.cah.data; import java.util.HashMap; import java.util.Map; import java.util.Set; import net.socialgamer.cah.Constants.CardSetData; public abstract class CardSet { public abstract int getId(); public abstract String getName(); public abstract String getDescription(); public abstract boolean isActive(); public abstract boolean isBaseDeck(); public abstract int getWeight(); public abstract Set<? extends BlackCard> getBlackCards(); public abstract Set<? extends WhiteCard> getWhiteCards(); /** * Get the JSON representation of this card set's metadata. This method will cause lazy-loading of * the card collections. * @return Client representation of this card set. */ public final Map<CardSetData, Object> getClientMetadata() { final Map<CardSetData, Object> cardSetData = getCommonClientMetadata(); cardSetData.put(CardSetData.BLACK_CARDS_IN_DECK, getBlackCards().size()); cardSetData.put(CardSetData.WHITE_CARDS_IN_DECK, getWhiteCards().size()); return cardSetData; } protected final Map<CardSetData, Object> getCommonClientMetadata() { final Map<CardSetData, Object> cardSetData = new HashMap<CardSetData, Object>(); cardSetData.put(CardSetData.ID, getId()); cardSetData.put(CardSetData.CARD_SET_NAME, getName()); cardSetData.put(CardSetData.CARD_SET_DESCRIPTION, getDescription()); cardSetData.put(CardSetData.WEIGHT, getWeight()); cardSetData.put(CardSetData.BASE_DECK, isBaseDeck()); return cardSetData; } @Override public String toString() { return String.format("%s[name=%s, base=%b, id=%d, active=%b, weight=%d, black=%d, white=%d]", getClass().getName(), getName(), isBaseDeck(), getId(), isActive(), getWeight(), getBlackCards().size(), getWhiteCards().size()); } }