package com.mechinn.android.ouralliance.data;
import android.database.Cursor;
import com.activeandroid.ActiveAndroid;
import com.activeandroid.Model;
import com.activeandroid.annotation.Column;
import com.activeandroid.annotation.Table;
import com.activeandroid.query.Select;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.mechinn.android.ouralliance.Prefs;
import com.mechinn.android.ouralliance.data.frc2014.TeamScouting2014;
import com.mechinn.android.ouralliance.data.frc2015.TeamScouting2015;
import java.lang.reflect.Type;
import java.util.List;
import de.greenrobot.event.EventBus;
import de.greenrobot.event.util.AsyncExecutor;
import timber.log.Timber;
@Table(name = Team.TAG, id = Team.ID)
public class Team extends OurAllianceObject implements Comparable<Team>, java.io.Serializable {
public final static String TAG = "Team";
public final static String WEBSITE = "website";
public final static String NAME = "name";
public final static String LOCALITY = "locality";
public final static String REGION = "region";
public final static String COUNTRY = "country";
public final static String TEAM_NUMBER = "teamNumber";
public final static String NICKNAME = "nickname";
public final static String ROOKIE_YEAR = "rookieYear";
@Column(name=WEBSITE)
private String website;
@Column(name=NAME)
private String name;
@Column(name=LOCALITY)
private String locality;
@Column(name=REGION)
private String region;
@Column(name=COUNTRY)
private String country;
@Column(name=TEAM_NUMBER, notNull = true, onNullConflict = Column.ConflictAction.FAIL, unique = true, onUniqueConflict = Column.ConflictAction.FAIL)
private int teamNumber;
@Column(name=NICKNAME)
private String nickname;
@Column(name=ROOKIE_YEAR)
private Integer rookieYear;
public Team() {}
public Team(Cursor cursor) {
this.loadFromCursor(cursor);
}
public int getTeamNumber() {
return teamNumber;
}
public void setTeamNumber(int teamNumber) {
if(teamNumber!=this.teamNumber) {
this.teamNumber = teamNumber;
changedData();
}
}
public String getName() {
return name;
}
public void setName(String name) {
if(null==name && null!=this.name || null!=name && !name.equals(this.name)) {
this.name = name;
changedData();
}
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
if(null==nickname && null!=this.nickname || null!=nickname && !nickname.equals(this.nickname)) {
this.nickname = nickname;
changedData();
}
}
public String getDisplayName() {
if(null!=getNickname() && ""!=getNickname()) {
return getNickname();
} else if(null!=getName() && ""!=getName()) {
return getName();
} else {
return "";
}
}
public String getWebsite() {
return website;
}
public void setWebsite(String website) {
if(null==website && null!=this.website || null!=website && !website.equals(this.website)) {
this.website = website;
changedData();
}
}
public String getLocality() {
return locality;
}
public void setLocality(String locality) {
if(null==locality && null!=this.locality || null!=locality && !locality.equals(this.locality)) {
this.locality = locality;
changedData();
}
}
public String getRegion() {
return region;
}
public void setRegion(String region) {
if(null==region && null!=this.region || null!=region && !region.equals(this.region)) {
this.region = region;
changedData();
}
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
if(null==country && null!=this.country || null!=country && !country.equals(this.country)) {
this.country = country;
changedData();
}
}
public Integer getRookieYear() {
return rookieYear;
}
public void setRookieYear(Integer rookieYear) {
if(null==rookieYear && null!=this.rookieYear || null!=rookieYear && !rookieYear.equals(this.rookieYear)) {
this.rookieYear = rookieYear;
changedData();
}
}
public String toString() {
return this.getTeamNumber()+": "+this.getDisplayName();
}
public int compareTo(Team another) {
return this.getTeamNumber() - another.getTeamNumber();
}
public boolean copy(Team data) {
if(this.equals(data)) {
super.copy(data);
this.setName(data.getName());
this.setNickname(data.getNickname());
this.setWebsite(data.getWebsite());
this.setLocality(data.getLocality());
this.setRegion(data.getRegion());
this.setCountry(data.getCountry());
this.setRookieYear(data.getRookieYear());
return true;
}
return false;
}
public boolean equals(Object data) {
if(!(data instanceof Team)) {
return false;
}
try {
return getTeamNumber()==((Team) data).getTeamNumber();
} catch (NullPointerException e) {
return false;
}
}
public static Team load(int teamNumber) {
return new Select().from(Team.class).where(Team.TEAM_NUMBER+"=?",teamNumber).executeSingle();
}
public void asyncSave() {
AsyncExecutor.create().execute(new AsyncExecutor.RunnableEx() {
@Override
public void run() throws Exception {
saveMod();
EventBus.getDefault().post(Team.this);
}
});
}
public void asyncDelete() {
AsyncExecutor.create().execute(new AsyncExecutor.RunnableEx() {
@Override
public void run() throws Exception {
delete();
EventBus.getDefault().post(Team.this);
}
});
}
}