package com.sogou.qadev.cache.impl; import java.util.Iterator; import java.util.List; import com.sogou.qadev.cache.Cache; import com.sogou.qadev.cache.EhcacheHandler; import com.sogou.qadev.service.cynthia.bean.TemplateType; import com.sogou.qadev.service.cynthia.bean.UUID; import com.sogou.qadev.service.cynthia.dao.TemplateTypeAccessSessionMySQL; import com.sogou.qadev.service.cynthia.factory.DataAccessFactory; import edu.emory.mathcs.backport.java.util.Arrays; /** * @description:templateType cache,process the templateType cache * @author:liming * @mail:liming@sogou-inc.com * @date:2014-5-5 下午7:56:44 * @version:v1.0 */ public class TemplateTypeCache implements Cache<TemplateType> { private static TemplateTypeCache instance = null; private static class SingletonHolder{ private static TemplateTypeCache instance = new TemplateTypeCache(); } public static final TemplateTypeCache getInstance() { return SingletonHolder.instance; } private TemplateTypeCache() { super(); } @Override public TemplateType get(UUID id){ if (id == null) { return null; } return get(id.getValue()); } @Override public TemplateType get(String id){ Object templateType = EhcacheHandler.getInstance().get(EhcacheHandler.FOREVER_CACHE,id); if (templateType != null){ if (templateType instanceof TemplateType) { return (TemplateType)templateType; }else { return null; } } else{ TemplateType type = new TemplateTypeAccessSessionMySQL().queryTemplateTypeById(DataAccessFactory.getInstance().createUUID(id)); if (type != null) { EhcacheHandler.getInstance().set(EhcacheHandler.FOREVER_CACHE,type.getId().getValue(), type); } return type; } } public List<TemplateType> getAll(){ Object allTemplateType = EhcacheHandler.getInstance().get(EhcacheHandler.FOREVER_CACHE,"allTemplateType"); if (allTemplateType != null) { return (List<TemplateType>)allTemplateType; }else { List<TemplateType> all = new TemplateTypeAccessSessionMySQL().queryAllTemplateType(); if (all != null && all.size() > 0) { setAll(all); } return all; } } /** * * 功能:从数据库查询 所有数据,放入缓存 * 更改时间:2013-8-15 下午9:53:49 * 作者:李明 * 版本:1.0 * 邮箱:liming@sogou-inc.com */ public void putAllDataToCache(){ List<TemplateType> allTemplateTypes = new TemplateTypeAccessSessionMySQL().queryAllTemplateType(); EhcacheHandler ehcachedHanler = EhcacheHandler.getInstance(); for (TemplateType templateType : allTemplateTypes) { ehcachedHanler.set(EhcacheHandler.FOREVER_CACHE,templateType.getId().getValue(), templateType); } setAll(allTemplateTypes); } @SuppressWarnings("unchecked") public void remove(UUID[] uuids) { for (UUID uuid : uuids) { EhcacheHandler.getInstance().delete(EhcacheHandler.FOREVER_CACHE,uuid.getValue()); } List<UUID> deleteTempalteList = Arrays.asList(uuids); List<TemplateType> allTemplateTypes = getAll(); Iterator<TemplateType> it = allTemplateTypes.iterator(); while (it.hasNext()) { if (deleteTempalteList.contains(it.next().getId())) { it.remove(); } } setAll(allTemplateTypes); } @Override public void set(String key, Object value) { if (value == null) { return; } EhcacheHandler.getInstance().set(EhcacheHandler.FOREVER_CACHE,key, value); List<TemplateType> allTemplateTypes = getAll(); Iterator<TemplateType> it = allTemplateTypes.iterator(); while (it.hasNext()) { if (it.next().getId().getValue().equals(((TemplateType)value).getId().getValue())) { it.remove(); } } allTemplateTypes.add((TemplateType)value); setAll(allTemplateTypes); } private void setAll(List<TemplateType> allTemplateTypes){ EhcacheHandler.getInstance().set(EhcacheHandler.FOREVER_CACHE,"allTemplateType", allTemplateTypes); } private void remove(String key) { EhcacheHandler.getInstance().delete(EhcacheHandler.FOREVER_CACHE,key); } }