package be.shouldit.proxy.lib;
import android.os.Parcel;
import android.os.Parcelable;
import org.json.JSONException;
import org.json.JSONObject;
import java.text.DateFormat;
import java.util.Date;
import be.shouldit.proxy.lib.enums.CheckStatusValues;
import be.shouldit.proxy.lib.enums.ProxyStatusProperties;
import timber.log.Timber;
public class ProxyStatusItem implements Parcelable
{
public ProxyStatusProperties statusCode;
public CheckStatusValues status;
public Boolean result;
public Boolean effective;
public String message;
public Date checkedDate;
public ProxyStatusItem(ProxyStatusProperties code, CheckStatusValues st, Boolean val, Boolean eff, String msg, Date date)
{
statusCode = code;
status = st;
result = val;
effective = eff;
message = msg;
checkedDate = date;
}
public ProxyStatusItem(ProxyStatusProperties code, CheckStatusValues st, Boolean val, Boolean eff, String msg)
{
this(code,st,val,eff,msg,null);
}
public ProxyStatusItem(ProxyStatusProperties code, CheckStatusValues st, Boolean eff, Boolean val)
{
this(code,st,val,eff, "",null);
}
public ProxyStatusItem(ProxyStatusProperties code)
{
this(code,CheckStatusValues.NOT_CHECKED, false, true, "",null);
}
public ProxyStatusItem(ProxyStatusProperties code, CheckStatusValues checked, boolean res, String msg)
{
this(code,checked, res, true, msg,null);
}
public ProxyStatusItem(ProxyStatusProperties code, CheckStatusValues checked, boolean res)
{
this(code,checked, res, true, "",null);
}
public String toString()
{
StringBuilder sb = new StringBuilder();
sb.append(String.format("%s (Effective: %s, Status: %s, Result: %s", statusCode, effective, status, result));
if (checkedDate != null)
{
DateFormat df = DateFormat.getDateTimeInstance();
sb.append(", Checked at: " + df.format(checkedDate));
}
if (message != null && message.length() > 0)
sb.append(", Message: " + message);
sb.append(")");
return sb.toString();
}
public String toShortString()
{
StringBuilder sb = new StringBuilder();
sb.append(String.format("%s %s/%s", statusCode, status, result));
return sb.toString();
}
public JSONObject toJSON()
{
JSONObject jsonObject = new JSONObject();
try
{
jsonObject.put("status", statusCode);
jsonObject.put("effective", effective);
jsonObject.put("status",status);
jsonObject.put("result",result);
if (checkedDate != null)
{
DateFormat df = DateFormat.getDateTimeInstance();
jsonObject.put("checked_date",df.format(checkedDate));
}
else
{
jsonObject.put("checked_date",null);
}
jsonObject.put("message",message);
}
catch (JSONException e)
{
Timber.e(e, "Exception converting to JSON object ProxyStatusItem");
}
return jsonObject;
}
@Override
public int describeContents() { return 0; }
@Override
public void writeToParcel(Parcel dest, int flags)
{
dest.writeInt(this.statusCode == null ? -1 : this.statusCode.ordinal());
dest.writeInt(this.status == null ? -1 : this.status.ordinal());
dest.writeValue(this.result);
dest.writeValue(this.effective);
dest.writeString(this.message);
dest.writeLong(checkedDate != null ? checkedDate.getTime() : -1);
}
private ProxyStatusItem(Parcel in)
{
int tmpStatusCode = in.readInt();
this.statusCode = tmpStatusCode == -1 ? null : ProxyStatusProperties.values()[tmpStatusCode];
int tmpStatus = in.readInt();
this.status = tmpStatus == -1 ? null : CheckStatusValues.values()[tmpStatus];
this.result = (Boolean) in.readValue(Boolean.class.getClassLoader());
this.effective = (Boolean) in.readValue(Boolean.class.getClassLoader());
this.message = in.readString();
long tmpCheckedDate = in.readLong();
this.checkedDate = tmpCheckedDate == -1 ? null : new Date(tmpCheckedDate);
}
public static final Creator<ProxyStatusItem> CREATOR = new Creator<ProxyStatusItem>()
{
public ProxyStatusItem createFromParcel(Parcel source) {return new ProxyStatusItem(source);}
public ProxyStatusItem[] newArray(int size) {return new ProxyStatusItem[size];}
};
@Override
public boolean equals(Object o)
{
if (this == o) return true;
if (!(o instanceof ProxyStatusItem)) return false;
ProxyStatusItem that = (ProxyStatusItem) o;
if (checkedDate != null ? !checkedDate.equals(that.checkedDate) : that.checkedDate != null)
return false;
if (effective != null ? !effective.equals(that.effective) : that.effective != null)
return false;
if (message != null ? !message.equals(that.message) : that.message != null) return false;
if (result != null ? !result.equals(that.result) : that.result != null) return false;
if (status != that.status) return false;
if (statusCode != that.statusCode) return false;
return true;
}
}