package it.cnr.isti.driver.utils;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import net.sf.ehcache.Cache;
import net.sf.ehcache.Element;

public class CachingPublisherClient extends PublisherClient {
	
	protected Log log = LogFactory.getLog(CachingPublisherClient.class);
	
	private Cache recordCache;
	
	public String getResourceById(String id, String format) {
		log.debug("getting record by id from cache");
		Element element = getRecordCache().get(makeCacheKey(id, format));
		if(element == null) {
			String record = super.getResourceById(id, format);
			updateRecord(id, format, record);
			return record;
		}
		log.debug("found record in cache");
		return (String) element.getObjectValue();
	}

	public void updateRecord(String id, String format, String record) {
		log.debug("updating cache for " + id);
		getRecordCache().put(new Element(makeCacheKey(id, format), record));
	}

	protected String makeCacheKey(String id, String format) {
		return id + format;
	}
	
	public Cache getRecordCache() {
		return recordCache;
	}

	public void setRecordCache(Cache recordCache) {
		this.recordCache = recordCache;
	}
}
