From f7fe057b745d3f0e19b5dd6bd1819b11fc89c551 Mon Sep 17 00:00:00 2001 From: Eduardo Pedroni Date: Sun, 7 Aug 2016 22:18:55 +0200 Subject: Added filtering, still not working fully --- .../containers/StandaloneCardContainer.java | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/eu/equalparts/cardbase/containers/StandaloneCardContainer.java (limited to 'src/eu/equalparts/cardbase/containers/StandaloneCardContainer.java') diff --git a/src/eu/equalparts/cardbase/containers/StandaloneCardContainer.java b/src/eu/equalparts/cardbase/containers/StandaloneCardContainer.java new file mode 100644 index 0000000..e5a514e --- /dev/null +++ b/src/eu/equalparts/cardbase/containers/StandaloneCardContainer.java @@ -0,0 +1,66 @@ +package eu.equalparts.cardbase.containers; + +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import eu.equalparts.cardbase.cards.Card; + +/** + * TODO fix comments + * Holds actual card data in addition to the card counts in {@code ReferenceCardContainer}. + * + * @author Eduardo Pedroni + * + */ +public class StandaloneCardContainer extends ReferenceCardContainer { + /** + * A map with card hashes as entry keys (calculated used {@code Card.hashCode()}) + * and card objects as entry values. + */ + @JsonProperty private Map cardData = new HashMap<>(); + + /** + * Returns a card from the cardbase by set code and number. + * If no such card is in the cardbase, returns null. + * + * @param setCode the set to which the requested card belongs. + * @param number the requested card's set number. + * @return the requested {@code Card} or null if no card is found. + */ + public Card getCard(String setCode, String number) { + return cardData.get(Card.makeHash(setCode, number)); + } + + /** + * This method is intended to allow iteration directly on the list of cards, + * while at the same time retaining control over the insert and remove procedures. + * The returned {@code List} is a copy of the list kept internally by {@code StandaloneCardContainer}; + * modifying its structure is possible but will not affect the container instance from which it came. + * + * @return an unmodifiable list of all the cards in the cardbase. + */ + public List getCards() { + return new LinkedList(cardData.values()); + } + + @Override + public void addCard(Card cardToAdd, int count) { + super.addCard(cardToAdd, count); + cardData.putIfAbsent(cardToAdd.hashCode(), cardToAdd); + } + + @Override + public int removeCard(Card cardToRemove, int count) { + int removed = super.removeCard(cardToRemove, count); + + if (getCount(cardToRemove) <= 0) { + cardData.remove(cardToRemove.hashCode()); + } + + return removed; + } +} -- cgit v1.2.3