package com.mechinn.android.ouralliance.data; import android.database.Cursor; import android.provider.BaseColumns; import com.activeandroid.annotation.Column; import com.activeandroid.annotation.Table; import com.activeandroid.query.Select; import java.util.Date; import de.greenrobot.event.EventBus; import de.greenrobot.event.util.AsyncExecutor; @Table(name = Event.TAG, id = Event.ID) public class Event extends com.mechinn.android.ouralliance.data.OurAllianceObject implements Comparable<Event>, java.io.Serializable { public final static String TAG = "Event"; public final static String NAME = "name"; public final static String SHORT_NAME = "shortName"; public final static String EVENT_CODE = "eventCode"; public final static String EVENT_TYPE = "eventType"; public final static String EVENT_DISTRICT = "eventDistrict"; public final static String YEAR = "year"; public final static String VENUE_ADDRESS = "venueAddress"; public final static String WEBSITE = "website"; public final static String START_DATE = "startDate"; public final static String END_DATE = "endDate"; public final static String OFFICIAL = "official"; @Column(name=NAME) private String name; @Column(name=SHORT_NAME) private String shortName; @Column(name=EVENT_CODE, notNull = true, onNullConflict = Column.ConflictAction.FAIL, uniqueGroups = {TAG}, onUniqueConflicts = {Column.ConflictAction.FAIL}) private String eventCode; @Column(name=EVENT_TYPE, notNull = true, onNullConflict = Column.ConflictAction.FAIL) private int eventType; @Column(name=EVENT_DISTRICT, notNull = true, onNullConflict = Column.ConflictAction.FAIL) private int eventDistrict; @Column(name=YEAR, notNull = true, onNullConflict = Column.ConflictAction.FAIL, uniqueGroups = {TAG}, onUniqueConflicts = {Column.ConflictAction.FAIL}) private int year; @Column(name=VENUE_ADDRESS) private String venueAddress; @Column(name=WEBSITE) private String website; @Column(name=START_DATE) private Date startDate; @Column(name=END_DATE) private Date endDate; @Column(name=OFFICIAL, notNull = true, onNullConflict = Column.ConflictAction.FAIL) private boolean official; public Event() {} public Event(Cursor cursor) { this.loadFromCursor(cursor); } 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 getShortName() { return shortName; } public void setShortName(String shortName) { if(null==shortName && null!=this.shortName || null!=shortName && !shortName.equals(this.shortName)) { this.shortName = shortName; changedData(); } } public String getDisplayName() { if(null!=getShortName()) { return getShortName(); } else if(null!=getName()) { return getName(); } else { return getEventCode(); } } public String getEventCode() { return eventCode; } public void setEventCode(String eventCode) { if(null==eventCode && null!=this.eventCode || null!=eventCode && !eventCode.equals(this.eventCode)) { this.eventCode = eventCode; changedData(); } } public int getEventType() { return eventType; } public void setEventType(int eventType) { if(eventType!=this.eventType) { this.eventType = eventType; changedData(); } } public int getEventDistrict() { return eventDistrict; } public void setEventDistrict(int eventDistrict) { if(eventDistrict!=this.eventDistrict) { this.eventDistrict = eventDistrict; changedData(); } } public int getYear() { return year; } public void setYear(int year) { if(year!=this.year) { this.year = year; changedData(); } } public String getVenueAddress() { return venueAddress; } public void setVenueAddress(String venueAddress) { if(null==venueAddress && null!=this.venueAddress || null!=venueAddress && !venueAddress.equals(this.venueAddress)) { this.venueAddress = venueAddress; changedData(); } } 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 Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { if(null==startDate && null!=this.startDate || null!=startDate && !startDate.equals(this.startDate)) { this.startDate = startDate; changedData(); } } public Date getEndDate() { return endDate; } public void setEndDate(Date endDate) { if(null==endDate && null!=this.endDate || null!=endDate && !endDate.equals(this.endDate)) { this.endDate = endDate; changedData(); } } public boolean isOfficial() { return official; } public void setOfficial(boolean official) { if(official!=this.official) { this.official = official; changedData(); } } public String toString() { return (isOfficial()?"Official":"Unofficial")+" | "+this.getShortName(); } public static Event load(String eventCode, int year) { return new Select().from(Event.class).where(Event.EVENT_CODE+"=?",eventCode).and(Event.YEAR+"=?",year).executeSingle(); } public boolean copy(Event data) { if(this.equals(data)) { super.copy(data); this.setName(data.getName()); this.setShortName(data.getShortName()); this.setEventCode(data.getEventCode()); this.setEventDistrict(data.getEventDistrict()); this.setVenueAddress(data.getVenueAddress()); this.setWebsite(data.getWebsite()); this.setStartDate(data.getStartDate()); this.setEndDate(data.getEndDate()); this.setOfficial(data.isOfficial()); return true; } return false; } public boolean equals(Event data) { try { return getYear() == data.getYear() && getEventCode().equals(data.getEventCode()); } catch (NullPointerException e) { return false; } } public int compareTo(Event another) { int compare = (this.isOfficial()?0:1)-(another.isOfficial()?0:1); if(0==compare) { compare = this.getDisplayName().compareTo(another.getDisplayName()); } return compare; } public void asyncSave() { AsyncExecutor.create().execute(new AsyncExecutor.RunnableEx() { @Override public void run() throws Exception { saveMod(); EventBus.getDefault().post(Event.this); } }); } public void asyncDelete() { AsyncExecutor.create().execute(new AsyncExecutor.RunnableEx() { @Override public void run() throws Exception { delete(); EventBus.getDefault().post(Event.this); } }); } }