package org.hsweb.web.service.impl.draft; import org.hsweb.web.bean.po.draft.Draft; import org.hsweb.web.service.draft.DraftService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; import org.springframework.cache.concurrent.ConcurrentMapCacheManager; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * Created by zhouhao on 16-6-3. */ @Service public class CacheDraftService implements DraftService { @Autowired(required = false) private CacheManager cacheManager; private String cacheKey = "draft:"; @PostConstruct public void init() { if (cacheManager == null) { cacheManager = new ConcurrentMapCacheManager(); } } @Override public String createDraft(String key, Draft draft) { Cache cache = cacheManager.getCache(cacheKey + draft.getCreatorId()); Cache.ValueWrapper wrapper = cache.get(key); Map<String, Draft> drafts; if (wrapper == null) { drafts = new LinkedHashMap<>(); } else { drafts = ((Map<String, Draft>) wrapper.get()); } drafts.put(draft.getId(), draft); cache.put(key, drafts); return draft.getId(); } @Override public List<Draft> getAllDraftByKey(String key, String userId) { Cache cache = cacheManager.getCache(cacheKey + userId); Cache.ValueWrapper wrapper = cache.get(key); if (wrapper != null) { return new ArrayList<>(((Map<String, Draft>) wrapper.get()).values()); } return new ArrayList<>(); } @Override public boolean removeDraft(String key, String userId, String id) { Cache cache = cacheManager.getCache(cacheKey + userId); Cache.ValueWrapper wrapper = cache.get(key); if (wrapper != null) { Map<String, Draft> drafts = ((Map<String, Draft>) wrapper.get()); drafts.remove(id); cache.put(key, drafts); return true; } return false; } @Override public boolean removeDraft(String key, String userId) { Cache cache = cacheManager.getCache(cacheKey + userId); cache.evict(key); return true; } }