package com.octo.android.robospice.persistence;
import java.util.List;
import android.app.Application;
import com.octo.android.robospice.persistence.exception.CacheLoadingException;
import com.octo.android.robospice.persistence.exception.CacheSavingException;
/**
* Super class of all entities responsible for loading/saving objects of a given
* class in the cache.
* @author sni
* @param <T>
* the class of the objects this {@link ObjectPersister} can
* persist/unpersist.
*/
public abstract class ObjectPersister<T> implements Persister, CacheCleaner {
private boolean isAsyncSaveEnabled;
private Application application;
private Class<T> clazz;
public ObjectPersister(Application application, Class<T> clazz) {
this.application = application;
this.clazz = clazz;
}
public Application getApplication() {
return application;
}
public Class<T> getHandledClass() {
return clazz;
}
@Override
public boolean canHandleClass(Class<?> clazz) {
return clazz.equals(this.clazz);
}
/**
* Load data from cache if not expired.
* @param cacheKey
* the cacheKey of the data to load.
* @param maxTimeInCache
* the maximum time the data can have been stored in cached
* before being considered expired. 0 means infinite.
* @return the data if it could be loaded.
* @throws CacheLoadingException
* if the data in cache is expired.
*/
public abstract T loadDataFromCache(Object cacheKey, long maxTimeInCache) throws CacheLoadingException;
public abstract List<T> loadAllDataFromCache() throws CacheLoadingException;
public abstract List<Object> getAllCacheKeys();
public abstract T saveDataToCacheAndReturnData(T data, Object cacheKey) throws CacheSavingException;
public abstract boolean removeDataFromCache(Object cacheKey);
@Override
public abstract void removeAllDataFromCache();
/**
* Return the creation date of creation of cache. entry for a given
* cacheKey.
* @param cacheKey
* the cachekey identifying the object to look for.
* @return a long corresponding to the creation date of creation of cache.
* @throws CacheLoadingException
* if there is no such element in cache.
*/
public abstract long getCreationDateInCache(Object cacheKey) throws CacheLoadingException;
public boolean isAsyncSaveEnabled() {
return isAsyncSaveEnabled;
}
public void setAsyncSaveEnabled(boolean isAsyncSaveEnabled) {
this.isAsyncSaveEnabled = isAsyncSaveEnabled;
}
public abstract boolean isDataInCache(Object cacheKey, long maxTimeInCacheBeforeExpiry);
}