mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
Extended CardDB API (w/ Tests) adding a Predicate filter for getCardFromEditions series
The getCardFromEditions series now include new variants (also for released before/after) accepting an extra filter to be passed used as an extra filter for returned cards!
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
package forge.card;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.collect.*;
|
||||
import forge.card.CardEdition.CardInSet;
|
||||
import forge.card.CardEdition.Type;
|
||||
@@ -561,14 +562,28 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
|
||||
return this.getCardFromEditions(cardName, this.defaultCardArtPreference);
|
||||
}
|
||||
|
||||
public PaperCard getCardFromEditions(final String cardName, Predicate<PaperCard> filter) {
|
||||
return this.getCardFromEditions(cardName, this.defaultCardArtPreference, filter);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PaperCard getCardFromEditions(final String cardName, CardArtPreference artPreference) {
|
||||
return getCardFromEditions(cardName, artPreference, IPaperCard.NO_ART_INDEX);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PaperCard getCardFromEditions(final String cardName, CardArtPreference artPreference, Predicate<PaperCard> filter) {
|
||||
return getCardFromEditions(cardName, artPreference, IPaperCard.NO_ART_INDEX, filter);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PaperCard getCardFromEditions(final String cardInfo, final CardArtPreference artPreference, int artIndex) {
|
||||
return this.tryToGetCardFromEditions(cardInfo, artPreference, artIndex);
|
||||
return this.tryToGetCardFromEditions(cardInfo, artPreference, artIndex, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PaperCard getCardFromEditions(final String cardInfo, final CardArtPreference artPreference, int artIndex, Predicate<PaperCard> filter) {
|
||||
return this.tryToGetCardFromEditions(cardInfo, artPreference, artIndex, filter);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -578,12 +593,10 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
|
||||
* ===============================================
|
||||
*/
|
||||
|
||||
@Override
|
||||
public PaperCard getCardFromEditionsReleasedBefore(String cardName, Date releaseDate){
|
||||
return this.getCardFromEditionsReleasedBefore(cardName, this.defaultCardArtPreference, PaperCard.DEFAULT_ART_INDEX, releaseDate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PaperCard getCardFromEditionsReleasedBefore(String cardName, int artIndex, Date releaseDate){
|
||||
return this.getCardFromEditionsReleasedBefore(cardName, this.defaultCardArtPreference, artIndex, releaseDate);
|
||||
}
|
||||
@@ -594,16 +607,24 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
|
||||
}
|
||||
|
||||
@Override
|
||||
public PaperCard getCardFromEditionsReleasedBefore(String cardName, CardArtPreference artPreference, int artIndex, Date releaseDate){
|
||||
return this.tryToGetCardFromEditions(cardName, artPreference, artIndex, releaseDate, true);
|
||||
public PaperCard getCardFromEditionsReleasedBefore(String cardName, CardArtPreference artPreference, Date releaseDate, Predicate<PaperCard> filter){
|
||||
return this.getCardFromEditionsReleasedBefore(cardName, artPreference, PaperCard.DEFAULT_ART_INDEX, releaseDate, filter);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PaperCard getCardFromEditionsReleasedBefore(String cardName, CardArtPreference artPreference, int artIndex, Date releaseDate){
|
||||
return this.tryToGetCardFromEditions(cardName, artPreference, artIndex, releaseDate, true, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PaperCard getCardFromEditionsReleasedBefore(String cardName, CardArtPreference artPreference, int artIndex, Date releaseDate, Predicate<PaperCard> filter){
|
||||
return this.tryToGetCardFromEditions(cardName, artPreference, artIndex, releaseDate, true, filter);
|
||||
}
|
||||
|
||||
public PaperCard getCardFromEditionsReleasedAfter(String cardName, Date releaseDate){
|
||||
return this.getCardFromEditionsReleasedAfter(cardName, this.defaultCardArtPreference, PaperCard.DEFAULT_ART_INDEX, releaseDate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PaperCard getCardFromEditionsReleasedAfter(String cardName, int artIndex, Date releaseDate){
|
||||
return this.getCardFromEditionsReleasedAfter(cardName, this.defaultCardArtPreference, artIndex, releaseDate);
|
||||
}
|
||||
@@ -613,18 +634,28 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
|
||||
return this.getCardFromEditionsReleasedAfter(cardName, artPreference, PaperCard.DEFAULT_ART_INDEX, releaseDate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PaperCard getCardFromEditionsReleasedAfter(String cardName, CardArtPreference artPreference, Date releaseDate, Predicate<PaperCard> filter){
|
||||
return this.getCardFromEditionsReleasedAfter(cardName, artPreference, PaperCard.DEFAULT_ART_INDEX, releaseDate, filter);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PaperCard getCardFromEditionsReleasedAfter(String cardName, CardArtPreference artPreference, int artIndex, Date releaseDate){
|
||||
return this.tryToGetCardFromEditions(cardName, artPreference, artIndex, releaseDate, false);
|
||||
return this.tryToGetCardFromEditions(cardName, artPreference, artIndex, releaseDate, false, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PaperCard getCardFromEditionsReleasedAfter(String cardName, CardArtPreference artPreference, int artIndex, Date releaseDate, Predicate<PaperCard> filter){
|
||||
return this.tryToGetCardFromEditions(cardName, artPreference, artIndex, releaseDate, false, filter);
|
||||
}
|
||||
|
||||
// Override when there is no date
|
||||
private PaperCard tryToGetCardFromEditions(String cardInfo, CardArtPreference artPreference, int artIndex){
|
||||
return this.tryToGetCardFromEditions(cardInfo, artPreference, artIndex, null, false);
|
||||
private PaperCard tryToGetCardFromEditions(String cardInfo, CardArtPreference artPreference, int artIndex, Predicate<PaperCard> filter){
|
||||
return this.tryToGetCardFromEditions(cardInfo, artPreference, artIndex, null, false, filter);
|
||||
}
|
||||
|
||||
private PaperCard tryToGetCardFromEditions(String cardInfo, CardArtPreference artPreference, int artIndex,
|
||||
Date releaseDate, boolean releasedBeforeFlag){
|
||||
Date releaseDate, boolean releasedBeforeFlag, Predicate<PaperCard> filter){
|
||||
if (cardInfo == null)
|
||||
return null;
|
||||
final CardRequest cr = CardRequest.fromString(cardInfo);
|
||||
@@ -635,8 +666,9 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
|
||||
cr.artIndex = artIndex; // 2nd cond. is to verify that some actual value has been passed in.
|
||||
|
||||
List<PaperCard> cards;
|
||||
Predicate<PaperCard> cardQueryFilter;
|
||||
if (releaseDate != null) {
|
||||
cards = getAllCards(cr.cardName, new Predicate<PaperCard>() {
|
||||
cardQueryFilter = new Predicate<PaperCard>() {
|
||||
@Override
|
||||
public boolean apply(PaperCard c) {
|
||||
if (c.getArtIndex() != cr.artIndex)
|
||||
@@ -648,15 +680,18 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
|
||||
else
|
||||
return ed.getDate().after(releaseDate);
|
||||
}
|
||||
});
|
||||
};
|
||||
} else // filter candidates based on requested artIndex
|
||||
cards = getAllCards(cr.cardName, new Predicate<PaperCard>() {
|
||||
cardQueryFilter = new Predicate<PaperCard>() {
|
||||
@Override
|
||||
public boolean apply(PaperCard card) {
|
||||
return card.getArtIndex() == cr.artIndex;
|
||||
}
|
||||
});
|
||||
|
||||
};
|
||||
if (filter != null)
|
||||
cardQueryFilter = Predicates.and(cardQueryFilter, filter);
|
||||
cards = getAllCards(cr.cardName, cardQueryFilter);
|
||||
// Note: No need to check whether "cards" is empty; the next for loop will validate condition at L699
|
||||
if (cards.size() == 1) // if only one candidate, there much else we should do
|
||||
return cr.isFoil ? cards.get(0).getFoiled() : cards.get(0);
|
||||
|
||||
@@ -906,6 +941,25 @@ public final class CardDb implements ICardDatabase, IDeckGenPool {
|
||||
}
|
||||
}
|
||||
|
||||
// This Predicate validates if a card is legal in a given format (identified by the list of allowed sets)
|
||||
@Override
|
||||
public Predicate<? super PaperCard> isLegal(List<String> allowedSetCodes){
|
||||
return new PredicateLegalInSets(allowedSetCodes);
|
||||
}
|
||||
|
||||
private class PredicateLegalInSets implements Predicate<PaperCard> {
|
||||
private final List<String> sets = new ArrayList<>();
|
||||
|
||||
public PredicateLegalInSets(final List<String> allowedSets){
|
||||
this.sets.addAll(allowedSets);
|
||||
}
|
||||
@Override
|
||||
public boolean apply(final PaperCard card){
|
||||
if (card == null) return false;
|
||||
return this.sets.contains(card.getEdition());
|
||||
}
|
||||
}
|
||||
|
||||
// This Predicate validates if a card was printed at [rarity], on any of its printings
|
||||
@Override
|
||||
public Predicate<? super PaperCard> wasPrintedAtRarity(CardRarity rarity) {
|
||||
|
||||
@@ -61,18 +61,18 @@ public interface ICardDatabase extends Iterable<PaperCard> {
|
||||
PaperCard getCardFromEditions(String cardName, CardArtPreference artPreference);
|
||||
PaperCard getCardFromEditions(String cardName, CardArtPreference artPreference, Predicate<PaperCard> filter);
|
||||
PaperCard getCardFromEditions(String cardName, CardArtPreference artPreference, int artIndex);
|
||||
PaperCard getCardFromEditions(String cardName, CardArtPreference artPreference, int artiIndex, Predicate<PaperCard> filter);
|
||||
PaperCard getCardFromEditions(String cardName, CardArtPreference artPreference, int artIndex, Predicate<PaperCard> filter);
|
||||
|
||||
// 4. Specialised Card Lookup on CardArtPreference Selection and Release Date
|
||||
PaperCard getCardFromEditionsReleasedBefore(String cardName, Date releaseDate);
|
||||
PaperCard getCardFromEditionsReleasedBefore(String cardName, int artIndex, Date releaseDate);
|
||||
PaperCard getCardFromEditionsReleasedBefore(String cardName, CardArtPreference artPreference, Date releaseDate);
|
||||
PaperCard getCardFromEditionsReleasedBefore(String cardName, CardArtPreference artPreference, Date releaseDate, Predicate<PaperCard> filter);
|
||||
PaperCard getCardFromEditionsReleasedBefore(String cardName, CardArtPreference artPreference, int artIndex, Date releaseDate);
|
||||
PaperCard getCardFromEditionsReleasedBefore(String cardName, CardArtPreference artPreference, int artIndex, Date releaseDate, Predicate<PaperCard> filter);
|
||||
|
||||
PaperCard getCardFromEditionsReleasedAfter(String cardName, Date releaseDate);
|
||||
PaperCard getCardFromEditionsReleasedAfter(String cardName, int artIndex, Date releaseDate);
|
||||
PaperCard getCardFromEditionsReleasedAfter(String cardName, CardArtPreference artPreference, Date releaseDate);
|
||||
PaperCard getCardFromEditionsReleasedAfter(String cardName, CardArtPreference artPreference, Date releaseDate, Predicate<PaperCard> filter);
|
||||
PaperCard getCardFromEditionsReleasedAfter(String cardName, CardArtPreference artPreference, int artIndex, Date releaseDate);
|
||||
PaperCard getCardFromEditionsReleasedAfter(String cardName, CardArtPreference artPreference, int artIndex, Date releaseDate, Predicate<PaperCard> filter);
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user