package com.circlegate.liban.task;
import android.text.TextUtils;
import android.widget.Toast;
import com.circlegate.liban.R;
import com.circlegate.liban.base.ApiBase.ApiCreator;
import com.circlegate.liban.base.ApiBase.ApiParcelable;
import com.circlegate.liban.base.ApiBase.IApiParcelable;
import com.circlegate.liban.base.ApiDataIO.ApiDataInput;
import com.circlegate.liban.base.ApiDataIO.ApiDataOutput;
import com.circlegate.liban.base.Exceptions.NotImplementedException;
import com.circlegate.liban.task.TaskInterfaces.ITaskContext;
import com.circlegate.liban.utils.LogUtils;
public class TaskErrors {
public interface ITaskError extends IApiParcelable {
boolean isOk();
CharSequence getMsg(ITaskContext context);
//DialogFragment createDialog(ITaskContext context, boolean finish);
void showToast(ITaskContext context);
TaskException createExc(ITaskContext context);
String getGoogleAnalyticsId();
}
public static class TaskException extends Exception {
private final ITaskError taskError;
public TaskException(ITaskError taskError) {
this.taskError = taskError;
}
public ITaskError getTaskError() {
return taskError;
}
}
// public static class TaskErrorDialog extends BaseDialogFragment {
// private boolean finish;
//
// public static TaskErrorDialog newInstance(CharSequence msg, boolean finish) {
// Bundle b = new Bundle();
// b.putCharSequence("msg", msg);
// b.putBoolean("finish", finish);
// TaskErrorDialog ret = new TaskErrorDialog();
// ret.setArguments(b);
// ret.setCancelable(true);
// return ret;
// }
//
// @Override
// protected Builder build(Builder b, Bundle savedInstanceState) {
// Bundle args = getArguments();
// final CharSequence errorMsg = args.getCharSequence("msg");
// this.finish = args.getBoolean("finish");
//
// b.setTitle(getString(R.string.error));
// b.setMessage(errorMsg);
// b.setPositiveButton(android.R.string.ok, new OnClickListener() {
// @Override
// public void onClick(View v) {
// dismiss();
// if (finish && getActivity() != null)
// getActivity().finish();
// }
// });
// return b;
// }
//
// @Override
// public void onCancel(DialogInterface dialog) {
// super.onCancel(dialog);
// if (finish && getActivity() != null)
// getActivity().finish();
// }
// }
public static abstract class TaskError extends ApiParcelable implements ITaskError {
@Override
public boolean isOk() {
return false;
}
// @Override
// public DialogFragment createDialog(ITaskContext context, boolean finish) {
// return TaskErrorDialog.newInstance(getDialogMsg(context), finish);
// }
@Override
public void showToast(ITaskContext context) {
LogUtils.e("TaskError", "showToast: " + getMsg(context).toString());
Toast.makeText(context.getAndroidContext(), getMsg(context), Toast.LENGTH_SHORT).show();
}
@Override
public TaskException createExc(ITaskContext context) {
return new TaskException(this);
}
//protected CharSequence getDialogMsg(ITaskContext context) {
// return getMsg(context);
//}
//protected CharSequence getToastMsg(ITaskContext context) {
// return getMsg(context);
//}
}
public static class BaseError extends TaskError {
public static final int OK = 0;
public static final int UNKNOWN_ERROR = -1;
public static final int SERVER_ERROR = -2;
public static final int CONNECTION_ERROR_COMMUNICATION = -3;
public static final int CONNECTION_ERROR_UNEXPECTED_RES = -4;
public static final int FILE_ERROR = -5;
public static final int LOGIN_ERROR = -6;
public static final BaseError ERR_OK = new BaseError(OK, 0) {
@Override
public boolean isOk() {
return true;
}
};
public static final BaseError ERR_UNKNOWN_ERROR = new BaseError(UNKNOWN_ERROR, R.string.err_unknown_error);
public static final BaseError ERR_SERVER_ERROR = new BaseError(SERVER_ERROR, R.string.err_server_error);
public static final BaseError ERR_CONNECTION_ERROR_COMMUNICATION = new BaseError(CONNECTION_ERROR_COMMUNICATION, R.string.err_connection_error_communication);
public static final BaseError ERR_CONNECTION_ERROR_UNEXPECTED_RES = new BaseError(CONNECTION_ERROR_UNEXPECTED_RES, R.string.err_connection_error_unexpected_res);
public static final BaseError ERR_FILE_ERROR = new BaseError(FILE_ERROR, R.string.err_file_error);
public static final BaseError ERR_LOGIN_ERROR = new BaseError(LOGIN_ERROR, R.string.err_login_error);
// nezapomenout pridavat case vetve v ApiCreatoru!
private final int id;
private final int resId;
private BaseError(int id, int resId) {
this.id = id;
this.resId = resId;
}
@Override
public void save(ApiDataOutput d, int flags) {
d.write(this.id);
}
public int getId() {
return this.id;
}
public int getResId() {
return this.resId;
}
@Override
public int hashCode() {
int _hash = 17;
_hash = _hash * 29 + id;
//_hash = _hash * 29 + resId;
return _hash;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof BaseError)) {
return false;
}
BaseError lhs = (BaseError) o;
return lhs != null &&
id == lhs.id;
//resId == lhs.resId;
}
@Override
public CharSequence getMsg(ITaskContext context) {
return resId != 0 ? context.getAndroidContext().getString(resId) : "";
}
@Override
public String getGoogleAnalyticsId() {
return "BaseError:" + id;
}
public static boolean isConnectionError(ITaskError error) {
return error instanceof BaseError
&& (((BaseError)error).id == CONNECTION_ERROR_COMMUNICATION || ((BaseError)error).id == CONNECTION_ERROR_UNEXPECTED_RES);
}
public static final ApiCreator<BaseError> CREATOR = new ApiCreator<BaseError>() {
public BaseError create(ApiDataInput d) {
int id = d.readInt();
switch (id) {
case OK: return ERR_OK;
case UNKNOWN_ERROR: return ERR_UNKNOWN_ERROR;
case SERVER_ERROR: return ERR_SERVER_ERROR;
case CONNECTION_ERROR_COMMUNICATION: return ERR_CONNECTION_ERROR_COMMUNICATION;
case CONNECTION_ERROR_UNEXPECTED_RES: return ERR_CONNECTION_ERROR_UNEXPECTED_RES;
case FILE_ERROR: return ERR_FILE_ERROR;
case LOGIN_ERROR: return ERR_LOGIN_ERROR;
default: throw new NotImplementedException();
}
}
public BaseError[] newArray(int size) { return new BaseError[size]; }
};
}
public static class SimpleError extends TaskError {
private final int rid;
public SimpleError(int rid) {
this.rid = rid;
}
public SimpleError(ApiDataInput d) {
this.rid = d.readInt();
}
@Override
public void save(ApiDataOutput d, int flags) {
d.write(this.rid);
}
public int getRid() {
return this.rid;
}
@Override
public CharSequence getMsg(ITaskContext context) {
if (rid != 0)
return context.getAndroidContext().getString(rid);
else
return "";
}
@Override
public String getGoogleAnalyticsId() {
return "SimpleError-rid:" + rid;
}
public static final ApiCreator<SimpleError> CREATOR = new ApiCreator<SimpleError>() {
public SimpleError create(ApiDataInput d) { return new SimpleError(d); }
public SimpleError[] newArray(int size) { return new SimpleError[size]; }
};
}
public static class ErrCodeMsgError extends TaskError {
public static final int DEFAULT_ERR_CODE = -1;
private final int errCode;
private final String errMessage;
public ErrCodeMsgError(String errMessage) {
this(DEFAULT_ERR_CODE, errMessage);
}
// Upraveno!
public ErrCodeMsgError(int errCode, String errMessage) {
this.errCode = errCode;
this.errMessage = errMessage == null ? "" : errMessage;
}
public ErrCodeMsgError(ApiDataInput d) {
this.errCode = d.readInt();
this.errMessage = d.readString();
}
@Override
public void save(ApiDataOutput d, int flags) {
d.write(this.errCode);
d.write(this.errMessage);
}
public int getErrCode() {
return this.errCode;
}
public String getErrMessage() {
return this.errMessage;
}
@Override
public CharSequence getMsg(ITaskContext context) {
return !TextUtils.isEmpty(errMessage) ? errMessage : context.getAndroidContext().getString(R.string.err_unknown_error);
}
@Override
public String getGoogleAnalyticsId() {
return "ErrCodeMsgError:" + errCode;
}
public static final ApiCreator<ErrCodeMsgError> CREATOR = new ApiCreator<ErrCodeMsgError>() {
public ErrCodeMsgError create(ApiDataInput d) { return new ErrCodeMsgError(d); }
public ErrCodeMsgError[] newArray(int size) { return new ErrCodeMsgError[size]; }
};
}
}