package co.touchlab.droidconandroid.network;
import retrofit.ErrorHandler;
import retrofit.RetrofitError;
import retrofit.client.Response;
/**
* Created by kgalligan on 7/29/14.
*/
public class NetworkErrorHandler implements ErrorHandler
{
@Override
public Throwable handleError(RetrofitError cause)
{
if (cause.isNetworkError())
{
return new NetworkException(cause.getCause());
}
if(cause.getResponse() != null)
{
ResponseException responseException = parseResponse(cause.getResponse());
if(responseException != null)
return responseException;
}
return new FatalUnknownException(cause.getCause());
}
protected ResponseException parseResponse(Response response)
{
if(response.getStatus() == 404)
return new NotFoundException();
return null;
}
public static class NetworkException extends Exception
{
public NetworkException()
{
super();
}
public NetworkException(String detailMessage)
{
super(detailMessage);
}
public NetworkException(String detailMessage, Throwable throwable)
{
super(detailMessage, throwable);
}
public NetworkException(Throwable throwable)
{
super(throwable);
}
}
public static class ResponseException extends Exception
{
public ResponseException()
{
}
public ResponseException(String detailMessage)
{
super(detailMessage);
}
public ResponseException(String detailMessage, Throwable throwable)
{
super(detailMessage, throwable);
}
public ResponseException(Throwable throwable)
{
super(throwable);
}
}
public static class NotFoundException extends ResponseException
{}
public static class FatalUnknownException extends RuntimeException
{
public FatalUnknownException()
{
}
public FatalUnknownException(String detailMessage)
{
super(detailMessage);
}
public FatalUnknownException(String detailMessage, Throwable throwable)
{
super(detailMessage, throwable);
}
public FatalUnknownException(Throwable throwable)
{
super(throwable);
}
}
}