package it.demo.twitterlike.android.tasks;
import it.demo.twitterlike.android.application.MainApplication;
import it.demo.twitterlike.android.service.TwitterLikeService;
import it.demo.twitterlike.android.ui.utils.DeviceUtils;
import it.demo.twitterlike.rest.api.MessageOperations;
import it.demo.twitterlike.rest.api.UserOperations;
import org.springframework.http.HttpStatus;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.RestClientException;
import android.util.Log;
import com.telly.groundy.GroundyTask;
import com.telly.groundy.TaskResult;
public abstract class AbstractRemoteInvocationTask extends GroundyTask {
public static final String AUTENTICATION_ERROR = "authenticationError";
public static final String CONNECTION_ERROR = "connectionError";
public static final String ORDER_PARAMETER = "order";
protected final String TAG = getClass().getSimpleName();
private final boolean checkOnline;
public AbstractRemoteInvocationTask() {
this(true);
}
public AbstractRemoteInvocationTask(boolean checkOnline) {
this.checkOnline = checkOnline;
}
@Override
protected final TaskResult doInBackground() {
if (!checkOnline || DeviceUtils.isOnline(getContext())) {
try {
return doInRemote();
} catch (HttpClientErrorException e) {
Log.e(TAG, e.getLocalizedMessage(), e);
if (HttpStatus.FORBIDDEN == e.getStatusCode()
|| HttpStatus.UNAUTHORIZED == e.getStatusCode()) {
return authenticationError();
} else {
return networkError();
}
} catch (RestClientException httph) {
Log.e(TAG, httph != null ? httph.getLocalizedMessage()
: "RestClient Exception", httph);
return networkError();
} catch (Exception e) {
Log.e(TAG, e.getLocalizedMessage(), e);
return failed();
}
} else {
return networkError();
}
}
protected TaskResult doInRemote() {
doRemoteExecution();
return succeeded();
}
protected void doRemoteExecution() {
}
protected TaskResult authenticationError() {
return failed().add(AUTENTICATION_ERROR, true);
}
protected TaskResult networkError() {
return failed().add(CONNECTION_ERROR, true);
}
protected MessageOperations getMessageOperations() {
return getApplication().getMessageOperations();
}
protected UserOperations getUserOperations() {
return getApplication().getUserOperations();
}
protected TwitterLikeService getTwitterLikeService() {
return getApplication().getTwitterLikeService();
}
protected MainApplication getApplication() {
return (MainApplication) getContext().getApplicationContext();
}
}