package gov.nysenate.openleg.service.shiro;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
import gov.nysenate.openleg.config.SecurityConfig;
import gov.nysenate.openleg.dao.bill.data.BillDao;
import gov.nysenate.openleg.model.cache.CacheEvictEvent;
import gov.nysenate.openleg.model.cache.CacheEvictIdEvent;
import gov.nysenate.openleg.model.cache.CacheWarmEvent;
import gov.nysenate.openleg.model.cache.ContentCache;
import gov.nysenate.openleg.service.base.data.CachingService;
import gov.nysenate.openleg.service.bill.data.CachedBillDataService;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Ehcache;
import org.apache.shiro.cache.AbstractCacheManager;
import org.apache.shiro.cache.Cache;
import org.apache.shiro.cache.CacheException;
import org.apache.shiro.session.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.Arrays;
import java.util.List;
/**
* Created by Chenguang He on 10/19/2016.
*/
@Service
public class shiroCacheService implements CachingService<Object> {
private static final Logger logger = LoggerFactory.getLogger(shiroCacheService.class);
@Autowired private CacheManager cacheManager;
@Autowired private EventBus eventBus;
@Autowired private shiroCacheManager shiroCacheManager;
@PostConstruct
private void init() {
setupCaches();
eventBus.register(this);
}
@Override
public void setupCaches() {
cacheManager.addCache(shiroCacheManager.cache);
}
@Override
public List<Ehcache> getCaches() {
return Arrays.asList(shiroCacheManager.cache);
}
@Override
public void evictContent(Object object) {
logger.debug("evicting {}", object);
shiroCacheManager.cache.remove(object);
}
@Override
@Subscribe
public void handleCacheEvictEvent(CacheEvictEvent evictEvent) {
if (evictEvent.affects(ContentCache.SHIRO)) {
evictCaches();
}
}
@Override
@Subscribe
public void handleCacheEvictIdEvent(CacheEvictIdEvent<Object> evictIdEvent) {
if (evictIdEvent.affects(ContentCache.SHIRO)) {
evictContent(evictIdEvent.getContentId());
}
}
@Override
public void warmCaches() {
}
@Override
public void handleCacheWarmEvent(CacheWarmEvent warmEvent) {
}
}