package com.anjlab.ping.services.dao.impl.cache; import java.util.HashMap; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.anjlab.ping.entities.Account; import com.anjlab.ping.entities.Job; import com.anjlab.ping.entities.Ref; public class CacheHelper { private static final Logger logger = LoggerFactory.getLogger(AccountDAOImplCache.class); private static final Map<Class<?>, String> entityPrefixes = getPrefixMap(); public static Object getQueryCacheKey(Class<?> entityClass, Object queryUniqueData) { return getEntityCacheKey(entityClass, "q" + (queryUniqueData == null ? "null" : queryUniqueData.hashCode())); } public static Object getEntityCacheKey(Class<?> entityClass, Object entityWideUniqueData) { // TODO Use hashCodes and multi-value map if (entityPrefixes.containsKey(entityClass)) { return entityPrefixes.get(entityClass) + entityWideUniqueData; } logger.error("Entity prefix not found for class \"{}\". Such entities will consume more cache space."); return entityClass.getName() + entityWideUniqueData; } private static Map<Class<?>, String> getPrefixMap() { Map<Class<?>, String> result = new HashMap<Class<?>, String>(); result.put(Job.class, "J"); result.put(Account.class, "A"); result.put(Ref.class, "R"); return result; } }