package com.salesmanager.core.business.utils;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.cache.Cache;
import org.springframework.cache.Cache.ValueWrapper;
import org.springframework.stereotype.Component;
import com.salesmanager.core.model.merchant.MerchantStore;
@Component("cache")
public class CacheUtils {
@Inject
@Qualifier("serviceCache")
private Cache cache;
public final static String REFERENCE_CACHE = "REF";
private static final Logger LOGGER = LoggerFactory.getLogger(CacheUtils.class);
private final static String KEY_DELIMITER = "_";
public void putInCache(Object object, String keyName) throws Exception {
cache.put(keyName, object);
}
public Object getFromCache(String keyName) throws Exception {
ValueWrapper vw = cache.get(keyName);
if(vw!=null) {
return vw.get();
}
return null;
}
public List<String> getCacheKeys(MerchantStore store) throws Exception {
net.sf.ehcache.Cache cacheImpl = (net.sf.ehcache.Cache) cache.getNativeCache();
List<String> returnKeys = new ArrayList<String>();
for (Object key: cacheImpl.getKeys()) {
try {
String sKey = (String)key;
// a key should be <storeId>_<rest of the key>
int delimiterPosition = sKey.indexOf(KEY_DELIMITER);
if(delimiterPosition>0 && Character.isDigit(sKey.charAt(0))) {
String keyRemaining = sKey.substring(delimiterPosition+1);
returnKeys.add(keyRemaining);
}
} catch (Exception e) {
LOGGER.equals("key " + key + " cannot be converted to a String or parsed");
}
}
return returnKeys;
}
public void shutDownCache() throws Exception {
}
public void removeFromCache(String keyName) throws Exception {
cache.evict(keyName);
}
public void removeAllFromCache(MerchantStore store) throws Exception {
net.sf.ehcache.Cache cacheImpl = (net.sf.ehcache.Cache) cache.getNativeCache();
for (Object key: cacheImpl.getKeys()) {
try {
String sKey = (String)key;
// a key should be <storeId>_<rest of the key>
int delimiterPosition = sKey.indexOf(KEY_DELIMITER);
if(delimiterPosition>0 && Character.isDigit(sKey.charAt(0))) {
cache.evict(key);
}
} catch (Exception e) {
LOGGER.equals("key " + key + " cannot be converted to a String or parsed");
}
}
}
}