package in.srain.cube.cache; import android.text.TextUtils; import in.srain.cube.request.JsonData; public class Query<T> implements ICacheAble<T> { public enum RequestType { USE_CACHE_NOT_EXPIRED, USE_DATA_CREATED, USE_CACHE_ANYWAY, FAIL, } private QueryHandler mHandler; private CacheManager mCacheManager; public Query(CacheManager cacheManager) { mCacheManager = cacheManager; } public void continueAfterCreateData(final String data) { if (!TextUtils.isEmpty(data)) { mCacheManager.continueAfterCreateData(this, data); } else { queryFail(); } } private void queryFail() { mHandler.onQueryFinish(RequestType.FAIL, null, true); } public <T> void setHandler(QueryHandler<T> handler) { mHandler = handler; } public void query() { mCacheManager.requestCache(this); } @Override public long getCacheTime() { if (mHandler != null) { return mHandler.getCacheTime(); } return 0; } @Override public String getCacheKey() { if (mHandler != null) { return mHandler.getCacheKey(); } return null; } @Override public String getAssertInitDataPath() { if (mHandler != null) { return mHandler.getAssertInitDataPath(); } return null; } @Override public T processRawDataFromCache(JsonData rawData) { if (mHandler != null) { return (T) mHandler.processRawDataFromCache(rawData); } return null; } @Override public void onCacheData(CacheResultType cacheResultType, T cacheData, boolean outOfDate) { switch (cacheResultType) { case FROM_CACHE_FILE: break; case FROM_INIT_FILE: break; case FROM_MEMORY: break; case FROM_CREATED: break; } if (outOfDate) { if (mHandler != null && mHandler.useCacheAnyway()) { mHandler.onQueryFinish(RequestType.USE_CACHE_ANYWAY, cacheData, outOfDate); } } else { switch (cacheResultType) { case FROM_CACHE_FILE: break; case FROM_INIT_FILE: break; case FROM_MEMORY: break; case FROM_CREATED: break; } mHandler.onQueryFinish(RequestType.USE_CACHE_NOT_EXPIRED, cacheData, true); } } @Override public void createDataForCache(CacheManager cacheManager) { if (mHandler != null) { continueAfterCreateData(mHandler.createDataForCache(this)); } else { queryFail(); } } @Override public boolean cacheIsDisabled() { return mHandler != null && mHandler.disableCache(); } }