package org.yestech.rpx.objectmodel;
import org.joda.time.DateTime;
import org.json.JSONArray;
import org.json.JSONObject;
import static org.yestech.rpx.objectmodel.RPXUtil.*;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;
import java.util.ArrayList;
import static java.util.Collections.emptyList;
import java.util.List;
/**
* @author A.J. Wright
*/
@XmlRootElement(name = "merged_poco")
public class MergedPortableContact implements Serializable {
private Gender gender;
private List<TypeValue> urls = emptyList();
private String preferredUsername;
private String displayname;
private DateTime birthday;
private List<TypeValue> emails = emptyList();
private Name name;
private List<String> languageSpoken = emptyList();
private List<String> movies = emptyList();
private Address currentLocation;
private List<String> tvShows = emptyList();
private List<String> music = emptyList();
private List<Organization> organizations = emptyList();
private String relationshipStatus;
private List<String> interests = emptyList();
private String utcOffset;
private List<TypeValue> photos;
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
public List<TypeValue> getUrls() {
return urls;
}
public void setUrls(List<TypeValue> urls) {
this.urls = urls;
}
public String getPreferredUsername() {
return preferredUsername;
}
public void setPreferredUsername(String preferredUsername) {
this.preferredUsername = preferredUsername;
}
public String getDisplayname() {
return displayname;
}
public void setDisplayname(String displayname) {
this.displayname = displayname;
}
public DateTime getBirthday() {
return birthday;
}
public void setBirthday(DateTime birthday) {
this.birthday = birthday;
}
public List<TypeValue> getEmails() {
return emails;
}
public void setEmails(List<TypeValue> emails) {
this.emails = emails;
}
public Name getName() {
return name;
}
public void setName(Name name) {
this.name = name;
}
public List<String> getLanguageSpoken() {
return languageSpoken;
}
public void setLanguageSpoken(List<String> languageSpoken) {
this.languageSpoken = languageSpoken;
}
public List<String> getMovies() {
return movies;
}
public void setMovies(List<String> movies) {
this.movies = movies;
}
public Address getCurrentLocation() {
return currentLocation;
}
public void setCurrentLocation(Address currentLocation) {
this.currentLocation = currentLocation;
}
public List<String> getTvShows() {
return tvShows;
}
public void setTvShows(List<String> tvShows) {
this.tvShows = tvShows;
}
public List<String> getMusic() {
return music;
}
public void setMusic(List<String> music) {
this.music = music;
}
public List<Organization> getOrganizations() {
return organizations;
}
public void setOrganizations(List<Organization> organizations) {
this.organizations = organizations;
}
public String getRelationshipStatus() {
return relationshipStatus;
}
public void setRelationshipStatus(String relationshipStatus) {
this.relationshipStatus = relationshipStatus;
}
public List<String> getInterests() {
return interests;
}
public void setInterests(List<String> interests) {
this.interests = interests;
}
public String getUtcOffset() {
return utcOffset;
}
public void setUtcOffset(String utcOffset) {
this.utcOffset = utcOffset;
}
public List<TypeValue> getPhotos() {
return photos;
}
public void setPhotos(List<TypeValue> photos) {
this.photos = photos;
}
public static MergedPortableContact fromJson(JSONObject json) {
MergedPortableContact mp = new MergedPortableContact();
mp.gender = Gender.fromString(jsonString(json, "gender"));
JSONArray array = jsonArray(json, "urls");
if (array != null) {
mp.urls = new ArrayList<TypeValue>(array.length());
for (int i = 0, size = array.length(); i < size; i++) {
JSONObject jo = jsonObject(array, i);
TypeValue url = TypeValue.fromJson(jo);
mp.urls.add(url);
}
}
mp.preferredUsername = jsonString(json, "preferredUsername");
mp.displayname = jsonString(json, "displayName");
JSONObject jo = jsonObject(json, "name");
mp.name = Name.fromJson(jo);
mp.birthday = fromRPXDateString(jsonString(json, "birthday"));
array = jsonArray(json, "emails");
if (array != null) {
mp.emails = new ArrayList<TypeValue>(array.length());
for (int i = 0, size = array.length(); i < size; i++) {
jo = jsonObject(array, i);
TypeValue email = TypeValue.fromJson(jo);
mp.emails.add(email);
}
}
array = jsonArray(json, "languagesSpoken");
if (array != null) {
mp.languageSpoken = new ArrayList<String>(array.length());
for (int i = 0, size = array.length(); i < size; i++) {
mp.languageSpoken.add(jsonString(array, i));
}
}
array = jsonArray(json, "music");
if (array != null) {
mp.music = new ArrayList<String>(array.length());
for (int i = 0, size = array.length(); i < size; i++) {
mp.music.add(jsonString(array, i));
}
}
array = jsonArray(json, "movies");
if (array != null) {
mp.movies = new ArrayList<String>(array.length());
for (int i = 0, size = array.length(); i < size; i++) {
mp.movies.add(jsonString(array, i));
}
}
array = jsonArray(json, "tvShows");
if (array != null) {
mp.tvShows = new ArrayList<String>(array.length());
for (int i = 0, size = array.length(); i < size; i++) {
mp.tvShows.add(jsonString(array, i));
}
}
array = jsonArray(json, "interests");
if (array != null) {
mp.interests = new ArrayList<String>(array.length());
for (int i = 0, size = array.length(); i < size; i++) {
mp.interests.add(jsonString(array, i));
}
}
jo = jsonObject(json, "currentLocation");
mp.currentLocation = Address.fromJson(jo);
array = jsonArray(json, "organizations");
if (array != null) {
mp.organizations = new ArrayList<Organization>(array.length());
for (int i = 0, size = array.length(); i < size; i++) {
jo = jsonObject(array, i);
mp.organizations.add(Organization.fromJson(jo));
}
}
mp.relationshipStatus = jsonString(json, "relationshipStatus");
mp.utcOffset = jsonString(json, "utcOffset");
array = jsonArray(json, "photos");
if (array != null) {
mp.photos = new ArrayList<TypeValue>(array.length());
for (int i = 0, size = array.length(); i < size; i++) {
jo = jsonObject(array, i);
mp.photos.add(TypeValue.fromJson(jo));
}
}
return mp;
}
}