package edu.kufpg.armatus.data;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.Parcel;
import android.os.Parcelable;
import com.google.common.base.Objects;
import com.google.common.base.Optional;
import edu.kufpg.armatus.util.ParcelUtils;
public class Crumb implements Parcelable {
private static final String CRUMB = "crumb", NUM = "num";
private final Optional<Integer> mNum;
private final String mCrumbName;
public Crumb(String crumbName) {
this(Optional.<Integer>absent(), crumbName);
}
public Crumb(Integer num, String crumbName) {
this(Optional.fromNullable(num), crumbName);
}
public Crumb(JSONObject o) throws JSONException {
this(jsonToNum(o), o.getString(CRUMB));
}
private Crumb(Optional<Integer> num, String crumbName) {
mNum = num;
mCrumbName = crumbName;
}
public int getNum() throws IllegalStateException {
return mNum.get();
}
public String getCrumbName() {
return mCrumbName;
}
public boolean hasNum() {
return mNum.isPresent();
}
private static Optional<Integer> jsonToNum(JSONObject o) throws JSONException {
if (o.has(NUM)) {
return Optional.of(o.getInt(NUM));
} else {
return Optional.absent();
}
}
@Override
public boolean equals(Object o) {
if (o instanceof Crumb) {
Crumb c = (Crumb) o;
return mNum.equals(c.mNum) && mCrumbName.equals(c.getCrumbName());
} else {
return false;
}
}
@Override
public int hashCode() {
return Objects.hashCode(mNum, mCrumbName);
}
public static Parcelable.Creator<Crumb> CREATOR =
new Parcelable.Creator<Crumb>() {
@Override
public Crumb createFromParcel(Parcel source) {
Optional<Integer> num = ParcelUtils.readOptional(source);
String crumb = source.readString();
return new Crumb(num, crumb);
}
@Override
public Crumb[] newArray(int size) {
return new Crumb[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
ParcelUtils.writeOptional(dest, mNum);
dest.writeString(mCrumbName);
}
}