package com.kth.baasio.entity.user; import static org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion.NON_NULL; import com.kth.baasio.utils.JsonUtils; import com.kth.baasio.utils.MapUtils; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.annotate.JsonAnyGetter; import org.codehaus.jackson.annotate.JsonAnySetter; import org.codehaus.jackson.annotate.JsonCreator; import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.annotate.JsonProperty; import org.codehaus.jackson.map.annotate.JsonSerialize; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class BaasioFacebook { public final static String PROPERTY_ID = "id"; public final static String PROPERTY_NAME = "name"; public final static String PROPERTY_FIRSTNAME = "first_name"; public final static String PROPERTY_MIDDLENAME = "middle_name"; public final static String PROPERTY_LASTNAME = "last_name"; public final static String PROPERTY_LINK = "link"; public final static String PROPERTY_USERNAME = "username"; public final static String PROPERTY_GENDER = "gender"; public final static String PROPERTY_EMAIL = "email"; public final static String PROPERTY_TIMEZONE = "timezone"; public final static String PROPERTY_LOCALE = "locale"; public final static String PROPERTY_VERIFIED = "verified"; public final static String PROPERTY_UPDATEDTIME = "updated_time"; protected Map<String, JsonNode> properties = new HashMap<String, JsonNode>(); public BaasioFacebook() { } @JsonCreator public static BaasioFacebook createObject(String jsonString) { BaasioFacebook facebook = JsonUtils.fromJsonString(jsonString, BaasioFacebook.class); return facebook; } /** * Get predefined property names. * * @return List of predefined property names */ @JsonIgnore public List<String> getPropertyNames() { List<String> properties = new ArrayList<String>(); properties.add(PROPERTY_ID); properties.add(PROPERTY_NAME); properties.add(PROPERTY_FIRSTNAME); properties.add(PROPERTY_MIDDLENAME); properties.add(PROPERTY_LASTNAME); properties.add(PROPERTY_LINK); properties.add(PROPERTY_USERNAME); properties.add(PROPERTY_GENDER); properties.add(PROPERTY_EMAIL); properties.add(PROPERTY_TIMEZONE); properties.add(PROPERTY_LOCALE); properties.add(PROPERTY_VERIFIED); properties.add(PROPERTY_UPDATEDTIME); return properties; } /** * Get id. * * @return Id */ @JsonSerialize(include = NON_NULL) @JsonProperty(PROPERTY_ID) public String getId() { return JsonUtils.getStringProperty(properties, PROPERTY_ID); } /** * Set id. * * @param id Id */ public void setId(String id) { JsonUtils.setStringProperty(properties, PROPERTY_ID, id); } /** * Get name. * * @return Name */ @JsonSerialize(include = NON_NULL) @JsonProperty(PROPERTY_NAME) public String getName() { return JsonUtils.getStringProperty(properties, PROPERTY_NAME); } /** * Set name. * * @param name Name */ public void setName(String name) { JsonUtils.setStringProperty(properties, PROPERTY_NAME, name); } /** * Get first name. * * @return First name */ @JsonSerialize(include = NON_NULL) @JsonProperty(PROPERTY_FIRSTNAME) public String getFirstname() { return JsonUtils.getStringProperty(properties, PROPERTY_FIRSTNAME); } /** * Set first name. * * @param firstname First name */ public void setFirstname(String firstname) { JsonUtils.setStringProperty(properties, PROPERTY_FIRSTNAME, firstname); } /** * Get middle name. * * @return Middle name */ @JsonSerialize(include = NON_NULL) @JsonProperty(PROPERTY_MIDDLENAME) public String getMiddlename() { return JsonUtils.getStringProperty(properties, PROPERTY_MIDDLENAME); } /** * Set middle name. * * @param middlename Middle name */ public void setMiddlename(String middlename) { JsonUtils.setStringProperty(properties, PROPERTY_MIDDLENAME, middlename); } /** * Get last name. * * @return Last name */ @JsonSerialize(include = NON_NULL) @JsonProperty(PROPERTY_LASTNAME) public String getLastname() { return JsonUtils.getStringProperty(properties, PROPERTY_LASTNAME); } /** * Set last name. * * @param lastname Last name */ public void setLastname(String lastname) { JsonUtils.setStringProperty(properties, PROPERTY_LASTNAME, lastname); } /** * Get link. * * @return Link */ @JsonSerialize(include = NON_NULL) @JsonProperty(PROPERTY_LINK) public String getLink() { return JsonUtils.getStringProperty(properties, PROPERTY_LINK); } /** * Set link. * * @param link Link */ public void setLink(String link) { JsonUtils.setStringProperty(properties, PROPERTY_LINK, link); } /** * Get user name. * * @return User name */ @JsonSerialize(include = NON_NULL) @JsonProperty(PROPERTY_USERNAME) public String getUsername() { return JsonUtils.getStringProperty(properties, PROPERTY_USERNAME); } /** * Set user name. * * @param username User name */ public void setUsername(String username) { JsonUtils.setStringProperty(properties, PROPERTY_USERNAME, username); } /** * Get gender. * * @return Gender */ @JsonSerialize(include = NON_NULL) @JsonProperty(PROPERTY_GENDER) public String getGender() { return JsonUtils.getStringProperty(properties, PROPERTY_GENDER); } /** * Set gender. * * @param gender Gender */ public void setGender(String gender) { JsonUtils.setStringProperty(properties, PROPERTY_GENDER, gender); } /** * Get email. * * @return Email */ @JsonSerialize(include = NON_NULL) @JsonProperty(PROPERTY_EMAIL) public String getEmail() { return JsonUtils.getStringProperty(properties, PROPERTY_EMAIL); } /** * Set email. * * @param email email */ public void setEmail(String email) { JsonUtils.setStringProperty(properties, PROPERTY_EMAIL, email); } /** * Get time zone. * * @return Time zone */ @JsonSerialize(include = NON_NULL) @JsonProperty(PROPERTY_TIMEZONE) public Long getTimezone() { return JsonUtils.getLongProperty(properties, PROPERTY_TIMEZONE); } /** * Set time zone. * * @param timezone Time zone */ public void setTimeZone(Long timezone) { JsonUtils.setLongProperty(properties, PROPERTY_TIMEZONE, timezone); } /** * Get locale. * * @return Locale */ @JsonSerialize(include = NON_NULL) @JsonProperty(PROPERTY_LOCALE) public String getLocale() { return JsonUtils.getStringProperty(properties, PROPERTY_LOCALE); } /** * Set locale. * * @param locale Locale */ public void setLocale(String locale) { JsonUtils.setStringProperty(properties, PROPERTY_LOCALE, locale); } /** * Get verified. * * @return Verified */ @JsonSerialize(include = NON_NULL) @JsonProperty(PROPERTY_VERIFIED) public Boolean getVerified() { return JsonUtils.getBooleanProperty(properties, PROPERTY_VERIFIED); } /** * Set verified. * * @param verified Verified */ public void setVerified(boolean verified) { JsonUtils.setBooleanProperty(properties, PROPERTY_VERIFIED, true); } /** * Get updated time. * * @return Updated time */ @JsonSerialize(include = NON_NULL) @JsonProperty(PROPERTY_UPDATEDTIME) public String getUpdatedTime() { return JsonUtils.getStringProperty(properties, PROPERTY_UPDATEDTIME); } /** * Set updated time. * * @param updatedTime Updated time */ public void setUpdatedTime(String updatedTime) { JsonUtils.setStringProperty(properties, PROPERTY_UPDATEDTIME, updatedTime); } /** * Get custom properties list. * * @return Custom properties list */ @JsonAnyGetter public Map<String, JsonNode> getProperties() { return MapUtils.newMapWithoutKeys(properties, getPropertyNames()); } /** * Set a custom property * * @param name Property name * @param value Property value */ @JsonAnySetter public void setProperty(String name, JsonNode value) { if (value == null) { properties.remove(name); } else { properties.put(name, value); } } @Override public String toString() { return JsonUtils.toJsonString(this); } }