package com.boardgamegeek.model; import android.text.TextUtils; import com.boardgamegeek.model.Game.Rank; import com.boardgamegeek.provider.BggContract; import com.boardgamegeek.util.DateTimeUtils; import com.boardgamegeek.util.StringUtils; import org.simpleframework.xml.Attribute; import org.simpleframework.xml.Element; import org.simpleframework.xml.ElementList; import org.simpleframework.xml.Path; import org.simpleframework.xml.Root; import org.simpleframework.xml.Text; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.List; import java.util.Locale; @Root(name = "item") public class CollectionItem { private static final DateFormat FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); private long lastModifiedDate = DateTimeUtils.UNPARSED_DATE; public static class Statistics { @Attribute(required = false) public int minplayers; @Attribute(required = false) public int maxplayers; @Attribute(required = false) public int playingtime; @Attribute private String numowned; public int numberOwned() { return StringUtils.parseInt(numowned); } @Path("rating") @Attribute(name = "value") private String rating; public double getRating() { return StringUtils.parseDouble(rating); } @Path("rating/usersrated") @Attribute(name = "value") private String usersRated; @Path("rating/average") @Attribute(name = "value") private String average; @Path("rating/bayesaverage") @Attribute(name = "value") private String bayesAverage; @Path("rating/stddev") @Attribute(name = "value") private String standardDeviation; @Path("rating/median") @Attribute(name = "value") private String median; @Path("rating") @ElementList(required = false) private List<Rank> ranks; } // "thing" @Attribute private String objecttype; @Attribute(name = "objectid") public int gameId; /** * Includes boardgame, boardgameexpansion, videogame, rpg, rpgitem */ @Attribute private String subtype; @Attribute private String collid; public int collectionId() { return StringUtils.parseInt(collid, BggContract.INVALID_ID); } @Path("name") @Text private String name; @Element(required = false) private String originalname; @Path("name") @Attribute private int sortindex; @Element(required = false) public int yearpublished; @Path("status") @Attribute public String own; @Path("status") @Attribute public String prevowned; @Path("status") @Attribute public String fortrade; @Path("status") @Attribute public String want; @Path("status") @Attribute public String wanttoplay; @Path("status") @Attribute public String wanttobuy; @Path("status") @Attribute public String wishlist; @Path("status") @Attribute(required = false) public int wishlistpriority; @Path("status") @Attribute public String preordered; @Path("status") @Attribute private String lastmodified; @Element(required = false) public String image; @Element(required = false) public String thumbnail; @Element(name = "stats", required = false) public Statistics statistics; @Element(required = false) public int numplays; @Path("privateinfo") @Attribute(name = "pp_currency", required = false) public String pricePaidCurrency; @Path("privateinfo") @Attribute(required = false, empty = "0.0") private String pricepaid; public double pricePaid() { try { return Double.parseDouble(pricepaid); } catch (NumberFormatException | NullPointerException e) { return 0.0; } } @Path("privateinfo") @Attribute(name = "cv_currency", required = false) public String currentValueCurrency; @Path("privateinfo") @Attribute(required = false, empty = "0.0") private String currvalue; public double currentValue() { try { return Double.parseDouble(currvalue); } catch (NumberFormatException | NullPointerException e) { return 0.0; } } @Path("privateinfo") @Attribute(required = false) private String quantity; public int getQuantity() { return StringUtils.parseInt(quantity, 1); } @Path("privateinfo") @Attribute(name = "acquisitiondate", required = false) public String acquisitionDate; // "2000-12-08" @Path("privateinfo") @Attribute(name = "acquiredfrom", required = false) public String acquiredFrom; @Path("privateinfo") @Element(required = false) public String privatecomment; @Element(required = false) public String comment; @Element(required = false) public String conditiontext; @Element(required = false) public String wantpartslist; @Element(required = false) public String haspartslist; @Element(required = false) public String wishlistcomment; public String collectionName() { return name; } public String collectionSortName() { if (TextUtils.isEmpty(originalname)) { return StringUtils.createSortName(name, sortindex); } else { return name; } } public String gameName() { if (TextUtils.isEmpty(originalname)) { return name; } else { return originalname; } } public String gameSortName() { // the sort index is only accurate if the original name is missing if (TextUtils.isEmpty(originalname)) { return StringUtils.createSortName(name, sortindex); } else { return name; } } public long lastModifiedDate() { lastModifiedDate = DateTimeUtils.tryParseDate(lastModifiedDate, lastmodified, FORMAT); return lastModifiedDate; } }