package in.partake.model.dto; import in.partake.base.DateTime; import org.apache.commons.lang.ObjectUtils; import org.codehaus.jackson.node.JsonNodeFactory; import org.codehaus.jackson.node.ObjectNode; public class User extends PartakeModel<User> { private String id; private String screenName; private String profileImageURL; private DateTime createdAt; private DateTime modifiedAt; /** * true if system administrator banned this account */ private boolean isBanned; public User(String id, String screenName, String profileImageURL, DateTime createdAt, DateTime modifiedAt, boolean isBanned) { this.id = id; this.screenName = screenName; this.profileImageURL = profileImageURL; this.createdAt = createdAt; this.modifiedAt = modifiedAt; this.isBanned = isBanned; } public User(User user) { this(user.id, user.screenName, user.profileImageURL, user.createdAt, user.modifiedAt, user.isBanned); } public User(ObjectNode obj) { this.id = obj.get("id").asText(); this.screenName = obj.get("screenName").asText(); this.profileImageURL = obj.get("profileImageURL").asText(); this.createdAt = new DateTime(obj.get("createdAt").asLong()); if (obj.has("modifiedAt")) this.modifiedAt = new DateTime(obj.get("modifiedAt").asLong()); if (obj.has("isBanned")) { this.isBanned = obj.get("isBanned").asBoolean(); } } @Override public Object getPrimaryKey() { return id; } /** * sensitive な情報を含まないような user を取得します。 * * @return */ public ObjectNode toSafeJSON() { ObjectNode obj = new ObjectNode(JsonNodeFactory.instance); obj.put("id", id); obj.put("screenName", screenName); obj.put("profileImageURL", profileImageURL); return obj; } public ObjectNode toJSON() { ObjectNode obj = new ObjectNode(JsonNodeFactory.instance); obj.put("id", id); obj.put("screenName", screenName); obj.put("profileImageURL", profileImageURL); obj.put("createdAt", createdAt.getTime()); if (modifiedAt != null) obj.put("modifiedAt", modifiedAt.getTime()); obj.put("isBanned", isBanned); return obj; } // ---------------------------------------------------------------------- // equal methods @Override public boolean equals(Object obj) { if (!(obj instanceof User)) { return false; } User lhs = this; User rhs = (User) obj; if (!ObjectUtils.equals(lhs.id, rhs.id)) { return false; } if (!ObjectUtils.equals(lhs.screenName, rhs.screenName)) { return false; } if (!ObjectUtils.equals(lhs.profileImageURL, rhs.profileImageURL)) { return false; } if (!ObjectUtils.equals(lhs.createdAt, rhs.createdAt)) { return false; } if (!ObjectUtils.equals(lhs.modifiedAt, rhs.modifiedAt)) { return false; } if (!ObjectUtils.equals(lhs.isBanned, rhs.isBanned)) { return false; } return true; } @Override public int hashCode() { return ObjectUtils.hashCode(id); } // ---------------------------------------------------------------------- // accessors public String getId() { return id; } public String getScreenName() { return screenName; } public String getProfileImageURL() { return profileImageURL; } public DateTime getCreatedAt() { return createdAt; } public DateTime getModifiedAt() { return modifiedAt; } public boolean isBanned() { return isBanned; } public void setId(String id) { checkFrozen(); this.id = id; } public void setScreenName(String screenName) { checkFrozen(); this.screenName = screenName; } public void setProfileImageURL(String profileImageURL) { checkFrozen(); this.profileImageURL = profileImageURL; } public void setCreatedAt(DateTime createdAt) { checkFrozen(); this.createdAt = createdAt; } public void setModifiedAt(DateTime modifiedAt) { checkFrozen(); this.modifiedAt = modifiedAt; } public void setBanned(boolean isBanned) { checkFrozen(); this.isBanned = isBanned; } }