package be.digitalia.fosdem.model; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; import android.text.format.DateUtils; import java.util.Date; import java.util.List; import be.digitalia.fosdem.api.FosdemUrls; import be.digitalia.fosdem.db.DatabaseManager; public class Event implements Parcelable { private long id; private Day day; private Date startTime; private Date endTime; private String roomName; private String slug; private String title; private String subTitle; private Track track; private String abstractText; private String description; private String personsSummary; private List<Person> persons; // Optional private List<Link> links; // Optional public Event() { } public long getId() { return id; } public void setId(long id) { this.id = id; } public Day getDay() { return day; } public void setDay(Day day) { this.day = day; } public Date getStartTime() { return startTime; } public void setStartTime(Date startTime) { this.startTime = startTime; } public Date getEndTime() { return endTime; } public void setEndTime(Date endTime) { this.endTime = endTime; } public boolean isRunningAtTime(long time) { return (startTime != null) && (endTime != null) && (startTime.getTime() < time) && (time < endTime.getTime()); } /** * @return The event duration in minutes */ public int getDuration() { if ((startTime == null) || (endTime == null)) { return 0; } return (int) ((this.endTime.getTime() - this.startTime.getTime()) / DateUtils.MINUTE_IN_MILLIS); } public String getRoomName() { return (roomName == null) ? "" : roomName; } public void setRoomName(String roomName) { this.roomName = roomName; } public String getSlug() { return slug; } public void setSlug(String slug) { this.slug = slug; } public String getUrl() { return FosdemUrls.getEvent(slug, DatabaseManager.getInstance().getYear()); } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getSubTitle() { return subTitle; } public void setSubTitle(String subTitle) { this.subTitle = subTitle; } public Track getTrack() { return track; } public void setTrack(Track track) { this.track = track; } public String getAbstractText() { return abstractText; } public void setAbstractText(String abstractText) { this.abstractText = abstractText; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getPersonsSummary() { if (personsSummary != null) { return personsSummary; } if (persons != null) { return TextUtils.join(", ", persons); } return ""; } public void setPersonsSummary(String personsSummary) { this.personsSummary = personsSummary; } public List<Person> getPersons() { return persons; } public void setPersons(List<Person> persons) { this.persons = persons; } public List<Link> getLinks() { return links; } public void setLinks(List<Link> links) { this.links = links; } @Override public String toString() { return title; } @Override public int hashCode() { return (int) (id ^ (id >>> 32)); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; Event other = (Event) obj; return id == other.id; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel out, int flags) { out.writeLong(id); day.writeToParcel(out, flags); out.writeLong((startTime == null) ? 0L : startTime.getTime()); out.writeLong((endTime == null) ? 0L : endTime.getTime()); out.writeString(roomName); out.writeString(slug); out.writeString(title); out.writeString(subTitle); track.writeToParcel(out, flags); out.writeString(abstractText); out.writeString(description); out.writeString(personsSummary); out.writeTypedList(persons); out.writeTypedList(links); } public static final Parcelable.Creator<Event> CREATOR = new Parcelable.Creator<Event>() { public Event createFromParcel(Parcel in) { return new Event(in); } public Event[] newArray(int size) { return new Event[size]; } }; Event(Parcel in) { id = in.readLong(); day = Day.CREATOR.createFromParcel(in); long time = in.readLong(); if (time != 0L) { startTime = new Date(time); } time = in.readLong(); if (time != 0L) { endTime = new Date(time); } roomName = in.readString(); slug = in.readString(); title = in.readString(); subTitle = in.readString(); track = Track.CREATOR.createFromParcel(in); abstractText = in.readString(); description = in.readString(); personsSummary = in.readString(); persons = in.createTypedArrayList(Person.CREATOR); links = in.createTypedArrayList(Link.CREATOR); } }