package org.wikipedia.edit;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.Nullable;
class EditAbuseFilterResult extends EditResult {
static final int TYPE_WARNING = 1;
static final int TYPE_ERROR = 2;
@Nullable private final String code;
@Nullable private final String info;
@Nullable private final String warning;
EditAbuseFilterResult(@Nullable String code, @Nullable String info, @Nullable String warning) {
super("Failure");
this.code = code;
this.info = info;
this.warning = warning;
}
private EditAbuseFilterResult(Parcel in) {
super(in);
code = in.readString();
info = in.readString();
warning = in.readString();
}
@Nullable public String getCode() {
return code;
}
@Nullable public String getInfo() {
return info;
}
@Nullable public String getWarning() {
return warning;
}
@Override public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeString(code);
dest.writeString(info);
dest.writeString(warning);
}
public int getType() {
if (code != null && code.startsWith("abusefilter-warning")) {
return TYPE_WARNING;
} else if (code != null && code.startsWith("abusefilter-disallowed")) {
return TYPE_ERROR;
} else if (info != null && info.startsWith("Hit AbuseFilter")) {
// This case is here because, unfortunately, an admin can create an abuse filter which
// emits an arbitrary error code over the API.
// TODO: More properly handle the case where the AbuseFilter throws an arbitrary error.
// Oh, and, you know, also fix the AbuseFilter API to not throw arbitrary error codes.
return TYPE_ERROR;
} else {
// We have no understanding of what kind of abuse filter response we got. It's safest
// to simply treat these as an error.
return TYPE_ERROR;
}
}
public static final Parcelable.Creator<EditAbuseFilterResult> CREATOR
= new Parcelable.Creator<EditAbuseFilterResult>() {
@Override
public EditAbuseFilterResult createFromParcel(Parcel in) {
return new EditAbuseFilterResult(in);
}
@Override
public EditAbuseFilterResult[] newArray(int size) {
return new EditAbuseFilterResult[size];
}
};
}