package com.jasonrobinson.racer.model;
import android.os.Parcel;
import android.os.Parcelable;
import com.google.gson.annotations.SerializedName;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.field.ForeignCollectionField;
import com.j256.ormlite.table.DatabaseTable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
@DatabaseTable
public class Race implements Parcelable {
public static final Parcelable.Creator<Race> CREATOR = new Parcelable.Creator<Race>() {
public Race createFromParcel(Parcel in) {
return new Race(in);
}
public Race[] newArray(int size) {
return new Race[size];
}
};
@DatabaseField(id = true)
@SerializedName("id")
private String raceId;
@DatabaseField
private String description;
@DatabaseField
private String url;
@DatabaseField
private boolean event;
@DatabaseField
private Date registerAt;
@DatabaseField
private Date startAt;
@DatabaseField
private Date endAt;
@ForeignCollectionField
private Collection<Rule> rules;
private Race() {
}
private Race(Parcel in) {
raceId = in.readString();
description = in.readString();
url = in.readString();
event = in.readInt() == 1;
registerAt = new Date(in.readLong());
startAt = new Date(in.readLong());
endAt = new Date(in.readLong());
Parcelable[] ruleParcels = in.readParcelableArray(Rule.class.getClassLoader());
rules = new ArrayList<Rule>();
for (Parcelable ruleParcel : ruleParcels) {
rules.add((Rule) ruleParcel);
}
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(raceId);
dest.writeString(description);
dest.writeString(url);
dest.writeInt(event ? 1 : 0);
dest.writeLong(registerAt.getTime());
dest.writeLong(startAt.getTime());
dest.writeLong(endAt.getTime());
dest.writeParcelableArray(rules.toArray(new Rule[0]), flags);
}
public String getRaceId() {
return raceId;
}
public String getDescription() {
return description;
}
public String getUrl() {
return url;
}
public boolean isEvent() {
return event;
}
public Date getRegisterAt() {
return registerAt;
}
public Date getStartAt() {
return startAt;
}
public Date getEndAt() {
return endAt;
}
public Collection<Rule> getRules() {
return rules;
}
public boolean isInProgress() {
Date now = new Date(System.currentTimeMillis());
return now.after(getStartAt()) && now.before(getEndAt());
}
public boolean isFinished() {
Date now = new Date(System.currentTimeMillis());
return now.after(getEndAt());
}
public boolean isRegistrationOpen() {
Date now = new Date(System.currentTimeMillis());
return now.after(getRegisterAt()) && now.before(getEndAt());
}
@DatabaseTable
public static class Rule implements Parcelable {
public static final Parcelable.Creator<Rule> CREATOR = new Parcelable.Creator<Rule>() {
public Rule createFromParcel(Parcel in) {
return new Rule(in);
}
public Rule[] newArray(int size) {
return new Rule[size];
}
};
@DatabaseField
@SerializedName("id")
private long ruleId;
@DatabaseField
private String name;
@DatabaseField
private String description;
@SuppressWarnings("unused")
@DatabaseField(generatedId = true)
private transient long id;
@SuppressWarnings("unused")
@DatabaseField(foreign = true)
private transient Race race;
private Rule() {
}
private Rule(Parcel in) {
ruleId = in.readLong();
name = in.readString();
description = in.readString();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(ruleId);
dest.writeString(name);
dest.writeString(description);
}
public long getRuleId() {
return ruleId;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public void setRace(Race race) {
this.race = race;
}
}
}