From c630ecd2d56a7ec5ec90a3c234bdc99054d8b12a Mon Sep 17 00:00:00 2001 From: magenoxx Date: Tue, 26 Jun 2012 16:37:27 +0400 Subject: [PATCH] Added optional caching for card objects --- Mage.Sets/src/mage/cache/CacheService.java | 28 ++++++++++++++++++---- Mage.Sets/src/mage/sets/Sets.java | 9 ++++++- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/Mage.Sets/src/mage/cache/CacheService.java b/Mage.Sets/src/mage/cache/CacheService.java index fb552c95fd2..bc7dbad9883 100644 --- a/Mage.Sets/src/mage/cache/CacheService.java +++ b/Mage.Sets/src/mage/cache/CacheService.java @@ -2,11 +2,10 @@ package mage.cache; import mage.Constants; import mage.cards.Card; +import mage.cards.ExpansionSet; import org.apache.log4j.Logger; -import java.util.List; -import java.util.Set; -import java.util.TreeSet; +import java.util.*; /** * @author noxx @@ -14,7 +13,9 @@ import java.util.TreeSet; public class CacheService { private static final Logger log = Logger.getLogger(CacheService.class); - + + private static final String CARDS_CACHE_OBJECT_NAME = "cards"; + private static final String CARDS_KEY = "cards_key"; private static final String NAMES_CACHE_OBJECT_NAME = "card_names"; private static final String NAMES_KEY = "card_names_key"; private static final String CARD_COUNT_KEY = "card_count_key"; @@ -25,6 +26,25 @@ public class CacheService { private static final int CACHE_VERSION = 1; + public static List loadCards(Collection sets) { + Cache cache = CacheDataHelper.getCachedObject(CARDS_CACHE_OBJECT_NAME); + List cards = new ArrayList(); + if (cache == null || cache.getVersion() != CACHE_VERSION) { + for (ExpansionSet set : sets) { + cards.addAll(set.getCards()); + } + cache = new Cache(CARDS_CACHE_OBJECT_NAME, CACHE_VERSION); + cache.getCacheObjects().put(CARDS_KEY, cards); + cache.getCacheObjects().put(CARD_COUNT_KEY, cards.size()); + CacheDataHelper.cacheObject(cache, CARDS_CACHE_OBJECT_NAME); + } else { + cards = (List) cache.getCacheObjects().get(CARDS_KEY); + log.debug("Loaded cards from cache."); + } + + return cards; + } + public static Set loadCardNames(List cards) { Cache cache = CacheDataHelper.getCachedObject(NAMES_CACHE_OBJECT_NAME); Set names = new TreeSet(); diff --git a/Mage.Sets/src/mage/sets/Sets.java b/Mage.Sets/src/mage/sets/Sets.java index 26564b8d2ea..34b6ad79cc2 100644 --- a/Mage.Sets/src/mage/sets/Sets.java +++ b/Mage.Sets/src/mage/sets/Sets.java @@ -59,6 +59,8 @@ public class Sets extends HashMap { private static Map cardMap; protected static Random rnd = new Random(); + private boolean useCachedCards = false; + public static Sets getInstance() { return fINSTANCE; } @@ -117,6 +119,9 @@ public class Sets extends HashMap { this.addSet(Weatherlight.getInstance()); this.addSet(Worldwake.getInstance()); this.addSet(Zendikar.getInstance()); + if (useCachedCards) { + cards = CacheService.loadCards(this.values()); + } names = CacheService.loadCardNames(cards); creatureTypes = CacheService.loadCreatureTypes(cards); nonLandNames = CacheService.loadNonLandNames(cards); @@ -124,7 +129,9 @@ public class Sets extends HashMap { private void addSet(ExpansionSet set) { this.put(set.getCode(), set); - cards.addAll(set.getCards()); + if (!useCachedCards) { // cards will be read from cache later + cards.addAll(set.getCards()); + } } public static Set getCardNames() {