package com.mechinn.android.ouralliance.data;
import android.database.Cursor;
import com.activeandroid.annotation.Column;
import com.activeandroid.query.Select;
import com.mechinn.android.ouralliance.data.frc2014.TeamScouting2014;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import de.greenrobot.event.EventBus;
import de.greenrobot.event.util.AsyncExecutor;
/**
* Created by mechinn on 2/14/2015.
*/
public abstract class MatchScouting extends OurAllianceObject implements Comparable<MatchScouting>, java.io.Serializable {
public final static String TAG = "MatchScouting";
public final static String MATCH = Match.TAG;
public final static String ALLIANCE = "alliance";
public final static String POSITION = "position";
public final static String NOTES = "notes";
@Column(name=MATCH, onDelete = Column.ForeignKeyAction.CASCADE, notNull = true, onNullConflict = Column.ConflictAction.FAIL, uniqueGroups = {TAG}, onUniqueConflicts = {Column.ConflictAction.FAIL})
private Match match;
@Column(name=ALLIANCE, notNull = true, onNullConflict = Column.ConflictAction.FAIL)
private boolean alliance;
@Column(name=POSITION, notNull = true, onNullConflict = Column.ConflictAction.FAIL)
private int position;
@Column(name=NOTES)
private String notes;
public Match getMatch() {
return match;
}
public void setMatch(Match match) {
if(null==match && null!=this.match || null!=match && !match.equals(this.match)) {
this.match = match;
changedData();
}
}
public void replaceMatch(Match match) {
this.match = match;
}
public abstract TeamScouting getTeamScouting();
public abstract void setTeamScouting(TeamScouting teamScouting);
protected abstract void saveTeamScouting();
public boolean isAlliance() {
return alliance;
}
public void setAlliance(boolean alliance) {
if(alliance!=this.alliance) {
this.alliance = alliance;
changedData();
}
}
public int getPosition() {
return position;
}
public void setPosition(int position) {
if(position!=this.position) {
this.position = position;
changedData();
}
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
if(!notes.equals(this.notes)) {
this.notes = notes;
changedData();
}
}
public int compareTo(MatchScouting another) {
int compare = (this.isAlliance()?1:0) - (another.isAlliance()?1:0);
if(0==compare) {
compare = this.getPosition() - another.getPosition();
if(0==compare) {
compare = this.getTeamScouting().getTeam().compareTo(another.getTeamScouting().getTeam());
}
}
return compare;
}
public boolean copy(MatchScouting data) {
if(this.equals(data)) {
super.copy(data);
this.setNotes(data.getNotes());
return true;
}
return false;
}
public void saveMod() {
if (null == this.getId()) {
this.getMatch().saveMod();
if(-1==this.getMatch().getId()) {
this.replaceMatch(Match.load(this.getMatch().getEvent().getId(),this.getMatch().getCompLevel(),this.getMatch().getMatchNumber(),this.getMatch().getSetNumber()));
}
saveTeamScouting();
}
super.saveMod();
}
public void saveEvent() {
EventBus.getDefault().post(this.getMatch().getEvent());
EventBus.getDefault().post(this.getMatch());
EventBus.getDefault().post(this.getTeamScouting());
super.saveEvent();
}
public boolean equals(Object data) {
if (!(data instanceof MatchScouting)) {
return false;
}
try {
return getMatch().equals(((MatchScouting) data).getMatch()) &&
getTeamScouting().equals(((MatchScouting) data).getTeamScouting());
} catch (NullPointerException e) {
return false;
}
}
public void asyncSave() {
AsyncExecutor.create().execute(new AsyncExecutor.RunnableEx() {
@Override
public void run() throws Exception {
saveMod();
EventBus.getDefault().post(MatchScouting.this);
}
});
}
public void asyncDelete() {
AsyncExecutor.create().execute(new AsyncExecutor.RunnableEx() {
@Override
public void run() throws Exception {
delete();
EventBus.getDefault().post(MatchScouting.this);
}
});
}
}