/*
* Copyright (c) 2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.wso2.carbon.registry.social.impl.people.userprofile.model;
import com.google.common.collect.Lists;
import org.wso2.carbon.registry.social.api.people.userprofile.Person;
import org.wso2.carbon.registry.social.api.people.userprofile.model.*;
import org.wso2.carbon.registry.social.impl.SocialImplConstants;
import org.wso2.carbon.registry.social.impl.people.userprofile.model.impl.ListFieldImpl;
import org.wso2.carbon.registry.social.impl.people.userprofile.model.impl.UrlImpl;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* Implementation of the {@link org.wso2.carbon.registry.social.api.people.userprofile.Person} interface
*/
public class PersonImpl implements Person {
private String aboutMe;
private List<Account> accounts;
private List<String> activities;
private List<Address> addresses;
private Integer age;
private Map<String, ? extends Object> appData;
private Date birthday;
private BodyType bodyType;
private List<String> books;
private List<String> cars;
private String children;
private Address currentLocation;
private String displayName;
private Enum<Drinker> drinker;
private List<ListField> emails;
private String ethnicity;
private String fashion;
private List<String> food;
private Gender gender;
private String happiestWhen;
private Boolean hasApp;
private List<String> heroes;
private String humor;
private String id;
private List<ListField> ims;
private List<String> interests;
private String jobInterests;
private List<String> languagesSpoken;
private String livingArrangement;
private List<Enum<LookingFor>> lookingFor;
private List<String> movies;
private List<String> music;
private Name name;
private Enum<NetworkPresence> networkPresence;
private String nickname;
private List<Organization> organizations;
private String pets;
private List<ListField> phoneNumbers;
private List<ListField> photos;
private String politicalViews;
private String preferredUsername;
private Url profileSong;
private Url profileVideo;
private List<String> quotes;
private String relationshipStatus;
private String religion;
private String romance;
private String scaredOf;
private String sexualOrientation;
private Enum<Smoker> smoker;
private List<String> sports;
private String status;
private List<String> tags;
private Long utcOffset;
private List<String> turnOffs;
private List<String> turnOns;
private List<String> tvShows;
private Date updated;
private List<Url> urls;
// Note: Not in the opensocial js person object directly
private boolean isOwner = false;
private boolean isViewer = false;
public PersonImpl() {
}
/**
* A constructor which contains all of the required fields on a person object
*
* @param id The id of the person
* @param displayName The displayName of the person
* @param name The person's name broken down into components
*/
public PersonImpl(String id, String displayName, Name name) {
this.id = id;
this.displayName = displayName;
this.name = name;
}
public String getAboutMe() {
return aboutMe;
}
public void setAboutMe(String aboutMe) {
this.aboutMe = aboutMe;
}
public List<Account> getAccounts() {
return accounts;
}
public void setAccounts(List<Account> accounts) {
this.accounts = accounts;
}
public List<String> getActivities() {
return activities;
}
public void setActivities(List<String> activities) {
this.activities = activities;
}
public List<Address> getAddresses() {
return addresses;
}
public void setAddresses(List<Address> addresses) {
this.addresses = addresses;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Map<String, ? extends Object> getAppData() {
return this.appData;
}
public void setAppData(Map<String, ? extends Object> appData) {
this.appData = appData;
}
public BodyType getBodyType() {
return bodyType;
}
public void setBodyType(BodyType bodyType) {
this.bodyType = bodyType;
}
public List<String> getBooks() {
return books;
}
public void setBooks(List<String> books) {
this.books = books;
}
public List<String> getCars() {
return cars;
}
public void setCars(List<String> cars) {
this.cars = cars;
}
public String getChildren() {
return children;
}
public void setChildren(String children) {
this.children = children;
}
public Address getCurrentLocation() {
return currentLocation;
}
public void setCurrentLocation(Address currentLocation) {
this.currentLocation = currentLocation;
}
public Date getBirthday() {
if (birthday == null) {
return null;
}
return new Date(birthday.getTime());
}
public void setBirthday(Date birthday) {
if (birthday == null) {
this.birthday = null;
} else {
this.birthday = new Date(birthday.getTime());
}
}
public String getDisplayName() {
if (displayName != null) {
return displayName;
} else {
return id;
}
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
public Enum<Drinker> getDrinker() {
return this.drinker;
}
public void setDrinker(Enum<Drinker> newDrinker) {
this.drinker = newDrinker;
}
public List<ListField> getEmails() {
return emails;
}
public void setEmails(List<ListField> emails) {
this.emails = emails;
}
public String getEthnicity() {
return ethnicity;
}
public void setEthnicity(String ethnicity) {
this.ethnicity = ethnicity;
}
public String getFashion() {
return fashion;
}
public void setFashion(String fashion) {
this.fashion = fashion;
}
public List<String> getFood() {
return food;
}
public void setFood(List<String> food) {
this.food = food;
}
public Gender getGender() {
return gender;
}
public void setGender(Gender newGender) {
this.gender = newGender;
}
public String getHappiestWhen() {
return happiestWhen;
}
public void setHappiestWhen(String happiestWhen) {
this.happiestWhen = happiestWhen;
}
public Boolean getHasApp() {
return hasApp;
}
public void setHasApp(Boolean hasApp) {
this.hasApp = hasApp;
}
public List<String> getHeroes() {
return heroes;
}
public void setHeroes(List<String> heroes) {
this.heroes = heroes;
}
public String getHumor() {
return humor;
}
public void setHumor(String humor) {
this.humor = humor;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public List<ListField> getIms() {
return ims;
}
public void setIms(List<ListField> ims) {
this.ims = ims;
}
public List<String> getInterests() {
return interests;
}
public void setInterests(List<String> interests) {
this.interests = interests;
}
public String getJobInterests() {
return jobInterests;
}
public void setJobInterests(String jobInterests) {
this.jobInterests = jobInterests;
}
public List<String> getLanguagesSpoken() {
return languagesSpoken;
}
public void setLanguagesSpoken(List<String> languagesSpoken) {
this.languagesSpoken = languagesSpoken;
}
public Date getUpdated() {
if (updated == null) {
return null;
}
return new Date(updated.getTime());
}
public void setUpdated(Date updated) {
if (updated == null) {
this.updated = null;
} else {
this.updated = new Date(updated.getTime());
}
}
public String getLivingArrangement() {
return livingArrangement;
}
public void setLivingArrangement(String livingArrangement) {
this.livingArrangement = livingArrangement;
}
public List<Enum<LookingFor>> getLookingFor() {
return lookingFor;
}
public void setLookingFor(List<Enum<LookingFor>> lookingFor) {
this.lookingFor = lookingFor;
}
public List<String> getMovies() {
return movies;
}
public void setMovies(List<String> movies) {
this.movies = movies;
}
public List<String> getMusic() {
return music;
}
public void setMusic(List<String> music) {
this.music = music;
}
public Name getName() {
return name;
}
public void setName(Name name) {
this.name = name;
}
public Enum<NetworkPresence> getNetworkPresence() {
return networkPresence;
}
public void setNetworkPresence(Enum<NetworkPresence> networkPresence) {
this.networkPresence = networkPresence;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public List<Organization> getOrganizations() {
return organizations;
}
public void setOrganizations(List<Organization> organizations) {
this.organizations = organizations;
}
public String getPets() {
return pets;
}
public void setPets(String pets) {
this.pets = pets;
}
public List<ListField> getPhoneNumbers() {
return phoneNumbers;
}
public void setPhoneNumbers(List<ListField> phoneNumbers) {
this.phoneNumbers = phoneNumbers;
}
public List<ListField> getPhotos() {
return photos;
}
public void setPhotos(List<ListField> photos) {
this.photos = photos;
}
public String getPoliticalViews() {
return politicalViews;
}
public void setPoliticalViews(String politicalViews) {
this.politicalViews = politicalViews;
}
public String getPreferredUsername() {
return preferredUsername;
}
public void setPreferredUsername(String preferredUsername) {
this.preferredUsername = preferredUsername;
}
public Url getProfileSong() {
return profileSong;
}
public void setProfileSong(Url profileSong) {
this.profileSong = profileSong;
}
public Url getProfileVideo() {
return profileVideo;
}
public void setProfileVideo(Url profileVideo) {
this.profileVideo = profileVideo;
}
public List<String> getQuotes() {
return quotes;
}
public void setQuotes(List<String> quotes) {
this.quotes = quotes;
}
public String getRelationshipStatus() {
return relationshipStatus;
}
public void setRelationshipStatus(String relationshipStatus) {
this.relationshipStatus = relationshipStatus;
}
public String getReligion() {
return religion;
}
public void setReligion(String religion) {
this.religion = religion;
}
public String getRomance() {
return romance;
}
public void setRomance(String romance) {
this.romance = romance;
}
public String getScaredOf() {
return scaredOf;
}
public void setScaredOf(String scaredOf) {
this.scaredOf = scaredOf;
}
public String getSexualOrientation() {
return sexualOrientation;
}
public void setSexualOrientation(String sexualOrientation) {
this.sexualOrientation = sexualOrientation;
}
public Enum<Smoker> getSmoker() {
return this.smoker;
}
public void setSmoker(Enum<Smoker> newSmoker) {
this.smoker = newSmoker;
}
public List<String> getSports() {
return sports;
}
public void setSports(List<String> sports) {
this.sports = sports;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public List<String> getTags() {
return tags;
}
public void setTags(List<String> tags) {
this.tags = tags;
}
public Long getUtcOffset() {
return utcOffset;
}
public void setUtcOffset(Long utcOffset) {
this.utcOffset = utcOffset;
}
public List<String> getTurnOffs() {
return turnOffs;
}
public void setTurnOffs(List<String> turnOffs) {
this.turnOffs = turnOffs;
}
public List<String> getTurnOns() {
return turnOns;
}
public void setTurnOns(List<String> turnOns) {
this.turnOns = turnOns;
}
public List<String> getTvShows() {
return tvShows;
}
public void setTvShows(List<String> tvShows) {
this.tvShows = tvShows;
}
public List<Url> getUrls() {
return urls;
}
public void setUrls(List<Url> urls) {
this.urls = urls;
}
public boolean getIsOwner() {
return isOwner;
}
public void setIsOwner(boolean isOwner) {
this.isOwner = isOwner;
}
public boolean getIsViewer() {
return isViewer;
}
public void setIsViewer(boolean isViewer) {
this.isViewer = isViewer;
}
// Proxied fields
public String getProfileUrl() {
Url url = getListFieldWithType(PROFILE_URL_TYPE, getUrls());
return url == null ? null : url.getValue();
}
public void setProfileUrl(String profileUrl) {
Url url = getListFieldWithType(PROFILE_URL_TYPE, getUrls());
if (url != null) {
url.setValue(profileUrl);
} else {
if (profileUrl != null) {
setUrls(addListField(new UrlImpl(profileUrl, null, PROFILE_URL_TYPE), getUrls()));
}
}
}
public String getThumbnailUrl() {
ListField photo = getListFieldWithType(THUMBNAIL_PHOTO_TYPE, getPhotos());
return photo == null ? null : photo.getValue();
}
public void setThumbnailUrl(String thumbnailUrl) {
ListField photo = getListFieldWithType(THUMBNAIL_PHOTO_TYPE, getPhotos());
if (photo != null) {
photo.setValue(thumbnailUrl);
} else {
if (thumbnailUrl != null) {
setPhotos(addListField(new ListFieldImpl(THUMBNAIL_PHOTO_TYPE, thumbnailUrl), getPhotos()));
}
}
}
private <T extends ListField> T getListFieldWithType(String type, List<T> list) {
if (list != null) {
for (T url : list) {
if (type.equalsIgnoreCase(url.getType())) {
return url;
}
}
}
return null;
}
private <T extends ListField> List<T> addListField(T field, List<T> list) {
if (list == null) {
list = Lists.newArrayList();
}
list.add(field);
return list;
}
public String getUserField(String claimUri) {
claimUri = claimUri.trim();
if (claimUri == null || claimUri.trim().equals("")) {
return null;
}
String userField = null;
if (SocialImplConstants.CLAIM_URI_DISPLAY_NAME.equals(claimUri)) {
return displayName;
} else if (SocialImplConstants.CLAIM_URI_GIVEN_NAME.equals(claimUri)) {
return name.getGivenName();
} else if (SocialImplConstants.CLAIM_URI_FAMILY_NAME.equals(claimUri)) {
return name.getFamilyName();
} else if (SocialImplConstants.CLAIM_URI_NICK_NAME.equals(claimUri)) {
return nickname;
} else if (SocialImplConstants.CLAIM_URI_ORGANIZATION.equals(claimUri)) {
return organizations.get(0).getName();
} else if (SocialImplConstants.CLAIM_URI_STREET_ADDRESS.equals(claimUri)) {
return addresses.get(0).getStreetAddress();
} else if (SocialImplConstants.CLAIM_URI_COUNTRY.equals(claimUri)) {
return addresses.get(0).getCountry();
} else if (SocialImplConstants.CLAIM_URI_EMAIL.equals(claimUri)) {
return emails.get(0).getValue();
} else if (SocialImplConstants.CLAIM_URI_PHONE_NUMBER.equals(claimUri)) {
return phoneNumbers.get(0).getValue();
} else if (SocialImplConstants.CLAIM_URI_IM.equals(claimUri)) {
return ims.get(0).getValue();
} else if (SocialImplConstants.CLAIM_URI_URL.equals(claimUri)) {
return urls.get(0).getValue();
} else {
return null;
}
//TODO: Add other fields
}
}