001: package org.claros.commons.cache;
002:
003: import java.util.Date;
004: import java.util.HashMap;
005:
006: public class CacheManager {
007: private static HashMap<String, Object> cacheMap = new HashMap<String, Object>();
008:
009: /**
010: * This class is singleton so private constructor is used.
011: */
012: private CacheManager() {
013: super ();
014: }
015:
016: /**
017: * returns cache item from hashmap
018: * @param key
019: * @return Cache
020: */
021: private synchronized static Cache getCache(String key) {
022: return (Cache) cacheMap.get(key);
023: }
024:
025: /**
026: * Looks at the hashmap if a cache item exists or not
027: * @param key
028: * @return Cache
029: */
030: private synchronized static boolean hasCache(String key) {
031: return cacheMap.containsKey(key);
032: }
033:
034: /**
035: * Invalidates all cache
036: */
037: public synchronized static void invalidateAll() {
038: cacheMap.clear();
039: }
040:
041: /**
042: * Invalidates a single cache item
043: * @param key
044: */
045: public synchronized static void invalidate(String key) {
046: cacheMap.remove(key);
047: }
048:
049: /**
050: * Adds new item to cache hashmap
051: * @param key
052: * @return Cache
053: */
054: private synchronized static void putCache(String key, Cache object) {
055: cacheMap.put(key, object);
056: }
057:
058: /**
059: * Reads a cache item's content
060: * @param key
061: * @return
062: */
063: public static Cache getContent(String key) {
064: if (hasCache(key)) {
065: Cache cache = getCache(key);
066: if (cacheExpired(cache)) {
067: cache.setExpired(true);
068: }
069: return cache;
070: } else {
071: return null;
072: }
073: }
074:
075: /**
076: *
077: * @param key
078: * @param content
079: * @param ttl
080: */
081: public static void putContent(String key, Object content, long ttl) {
082: Cache cache = new Cache();
083: cache.setKey(key);
084: cache.setValue(content);
085: cache.setTimeOut(ttl + new Date().getTime());
086: cache.setExpired(false);
087: putCache(key, cache);
088: }
089:
090: /** @modelguid {172828D6-3AB2-46C4-96E2-E72B34264031} */
091: private static boolean cacheExpired(Cache cache) {
092: if (cache == null) {
093: return false;
094: }
095: long milisNow = new Date().getTime();
096: long milisExpire = cache.getTimeOut();
097: if (milisExpire < 0) { // Cache never expires
098: return false;
099: } else if (milisNow >= milisExpire) {
100: return true;
101: } else {
102: return false;
103: }
104: }
105:
106: }
|