package com.boardgamegeek.model; import android.content.Context; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; import com.boardgamegeek.R; import com.boardgamegeek.util.StringUtils; import org.simpleframework.xml.Attribute; import org.simpleframework.xml.Root; @Root(name = "player") public class Player implements Parcelable { public static final double DEFAULT_RATING = 0.0; public static final int SEAT_UNKNOWN = -1; public static final int SEAT_UNPARSED = -2; public Player() { name = ""; username = ""; color = ""; setStartingPosition(""); score = ""; } public Player(Player player) { name = player.name; userid = player.userid; username = player.username; color = player.color; setStartingPosition(player.startposition); score = player.score; rating = player.rating; new_ = player.new_; win = player.win; } @Attribute public String username; @Attribute public int userid; @Attribute public String name; @Attribute public String startposition; @Attribute public String color; @Attribute public String score; @Attribute(name = "new") public int new_; @Attribute public double rating; @Attribute public int win; public boolean Win() { return win == 1; } public void Win(boolean value) { win = value ? 1 : 0; } public boolean New() { return new_ == 1; } public void New(boolean value) { new_ = value ? 1 : 0; } private int seat = SEAT_UNPARSED; public String getStartingPosition() { return startposition; } public void setStartingPosition(String value) { seat = SEAT_UNPARSED; startposition = value; } public int getSeat() { if (seat == SEAT_UNPARSED) { seat = StringUtils.parseInt(startposition, SEAT_UNKNOWN); } return seat; } public void setSeat(int value) { setStartingPosition(String.valueOf(value)); } public String getDescription() { String description = ""; if (TextUtils.isEmpty(name)) { if (TextUtils.isEmpty(username)) { if (!TextUtils.isEmpty(color)) { description = color; } } else { description = username; } } else { description = name; if (!TextUtils.isEmpty(username)) { description += " (" + username + ")"; } } return description; } @Override public boolean equals(Object o) { if (o == this) { return true; } if (o == null || o.getClass() != this.getClass()) { return false; } Player p = (Player) o; return ((name == null && p.name == null) || (name != null && name.equals(p.name))) && (userid == p.userid) && ((username == null && p.username == null) || (username != null && username.equals(p.username))) && ((color == null && p.color == null) || (color != null && color.equals(p.color))) && ((startposition == null && p.startposition == null) || (startposition != null && startposition.equals(p.startposition))) && ((score == null && p.score == null) || (score != null && score.equals(p.score))) && (rating == p.rating) && (new_ == p.new_) && (win == p.win); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + userid; result = prime * result + ((username == null) ? 0 : username.hashCode()); result = prime * result + ((color == null) ? 0 : color.hashCode()); result = prime * result + ((startposition == null) ? 0 : startposition.hashCode()); result = prime * result + ((score == null) ? 0 : score.hashCode()); long r = Double.doubleToLongBits(rating); result = prime * result + (int) (r ^ (r >>> 32)); result = prime * result + (New() ? 1231 : 1237); result = prime * result + (Win() ? 1231 : 1237); return result; } @Override public String toString() { return String.format("%1$s (%2$s) - %3$s", name, username, color); } public String toLongDescription(Context context) { StringBuilder sb = new StringBuilder(); if (getSeat() != SEAT_UNKNOWN) { sb.append(context.getString(R.string.player_description_starting_position_segment, getSeat())); } sb.append(name); if (!TextUtils.isEmpty(username)) { sb.append(context.getString(R.string.player_description_username_segment, username)); } if (New()) { sb.append(context.getString(R.string.player_description_new_segment)); } if (!TextUtils.isEmpty(color)) { sb.append(context.getString(R.string.player_description_color_segment, color)); } if (!TextUtils.isEmpty(score)) { sb.append(context.getString(R.string.player_description_score_segment, score)); } if (Win()) { sb.append(context.getString(R.string.player_description_win_segment)); } return sb.toString(); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel out, int flags) { out.writeString(name); out.writeInt(userid); out.writeString(username); out.writeString(color); out.writeString(startposition); out.writeString(score); out.writeDouble(rating); out.writeInt(new_); out.writeInt(win); } public static final Parcelable.Creator<Player> CREATOR = new Parcelable.Creator<Player>() { public Player createFromParcel(Parcel in) { return new Player(in); } public Player[] newArray(int size) { return new Player[size]; } }; private Player(Parcel in) { name = in.readString(); userid = in.readInt(); username = in.readString(); color = in.readString(); setStartingPosition(in.readString()); score = in.readString(); rating = in.readDouble(); new_ = in.readInt(); win = in.readInt(); } }