package de.vanmar.android.yarrn.requests;
import android.app.Application;
import com.octo.android.robospice.persistence.DurationInMillis;
import com.octo.android.robospice.persistence.exception.SpiceException;
import com.octo.android.robospice.persistence.springandroid.json.gson.GsonObjectPersisterFactory;
import org.acra.ACRA;
import org.scribe.model.OAuthRequest;
import org.scribe.model.Response;
import de.vanmar.android.yarrn.YarrnPrefs_;
import de.vanmar.android.yarrn.ravelry.dts.ETaggable;
public abstract class AbstractRavelryGetRequest<T extends ETaggable> extends AbstractRavelryRequest<T> {
public static final long CACHE_DURATION = DurationInMillis.ONE_MINUTE;
private final GsonObjectPersisterFactory persisterFactory;
public AbstractRavelryGetRequest(Class<T> clazz, Application application, YarrnPrefs_ prefs) {
super(clazz, prefs, application);
try {
persisterFactory = new GsonObjectPersisterFactory(application);
} catch (SpiceException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
@Override
public T loadDataFromNetwork() throws Exception {
final OAuthRequest request = getRequest();
ACRA.getErrorReporter().putCustomData("lastUrl", getCacheKey().toString());
/*T dataFromCache = persisterFactory.createObjectPersister(getResultType()).loadDataFromCache(getCacheKey(), DurationInMillis.ALWAYS_RETURNED);
if (dataFromCache != null) {
request.addHeader("If-None-Match", dataFromCache.getETag());
}*/
final Response response = executeRequest(request);
/*if (response.getCode() == 304) {
return dataFromCache;
} else {*/
T result = parseResult(response.getBody());
result.setETag(response.getHeader("ETag"));
return result;
/*}*/
}
protected abstract T parseResult(String responseBody);
protected abstract OAuthRequest getRequest();
public Object getCacheKey() {
OAuthRequest request = getRequest();
return request.getCompleteUrl();
}
}