/* * 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; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.registry.core.exceptions.RegistryException; import org.wso2.carbon.registry.social.api.SocialDataException; import org.wso2.carbon.registry.social.api.people.PersonManager; import org.wso2.carbon.registry.social.api.people.relationship.RelationshipManager; 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.api.utils.FilterOptions; import org.wso2.carbon.registry.social.impl.SocialImplConstants; import org.wso2.carbon.registry.social.impl.internal.SocialDSComponent; import org.wso2.carbon.registry.social.impl.people.relationship.RelationshipManagerImpl; import org.wso2.carbon.registry.social.impl.people.userprofile.model.PersonImpl; import org.wso2.carbon.registry.social.impl.people.userprofile.model.impl.*; import org.wso2.carbon.user.core.UserStoreException; import org.wso2.carbon.user.core.UserStoreManager; import org.wso2.carbon.user.core.claim.Claim; import org.wso2.carbon.user.core.claim.ClaimManager; import org.wso2.carbon.user.api.ClaimMapping; import java.io.Serializable; import java.util.*; /** * An implementation of the {@link org.wso2.carbon.registry.social.api.people.PersonManager} interface * <p> * This implementation uses the {@link org.wso2.carbon.user.core.UserStoreManager} to store {@link org.wso2.carbon.registry.social.api.people.userprofile.Person} data * </p> * <p> * Complex attributes of {@link org.wso2.carbon.registry.social.api.people.userprofile.Person} are converted to name-value pairs and stored when possible * </p> */ public class PersonManagerImpl implements PersonManager { private static Log log = LogFactory.getLog(PersonManagerImpl.class); private UserStoreManager userStoreManager = null; private ClaimManager claimManager = null; public void setUserStoreManager(UserStoreManager userStoreManager) { this.userStoreManager = userStoreManager; } public UserStoreManager getUserStoreManager() throws RegistryException, UserStoreException { if (this.userStoreManager != null) { return this.userStoreManager; } else { return SocialDSComponent.getUserStoreManager(); } } public void setClaimManager(ClaimManager claimManager) { this.claimManager = claimManager; } public ClaimManager getClaimManager() throws RegistryException, UserStoreException { if (this.claimManager != null) { return this.claimManager; } else { return SocialDSComponent.getClaimManager(); } } /** * Persists the details of the person * * @param userId The userId of the person whose details to be stored * @param person The person details to be stored * @return True - if successfully save else False * @throws SocialDataException */ public boolean savePerson(String userId, Person person) throws SocialDataException { try { userStoreManager = getUserStoreManager(); if (!userStoreManager.isExistingUser(userId)) { //TODO: Creating new user //TODO: Below addUser function has to be done properly,until that it //TODO: has been commented out. //userStoreManager.addUser(userId, "abcd123", new String[]{"admin"}, null, null); } userStoreManager.setUserClaimValues(userId, retrieveClaimValues(person), null); } catch (UserStoreException e) { log.error(e.getMessage(), e); throw new SocialDataException("Error while saving person with id " + userId, e); } catch (RegistryException e) { log.error(e.getMessage(), e); throw new SocialDataException("Error while saving person with id " + userId, e); } return true; } public void saveUserClaims(String userId, Map<String, String> claims) throws SocialDataException { try { userStoreManager = getUserStoreManager(); if (userStoreManager.isExistingUser(userId)) { userStoreManager.setUserClaimValues(userId, claims, null); } else { throw new SocialDataException("No user existing with id " + userId); } } catch (UserStoreException e) { log.error(e.getMessage(), e); throw new SocialDataException("Error while saving person with id " + userId, e); } catch (RegistryException e) { log.error(e.getMessage(), e); throw new SocialDataException("Error while saving person with id " + userId, e); } } /** * Updates/Modify person details * * @param userId The userId of the person whose details to be modified * @param person The person details to be modified * @return True - if the data updated successfully esle False * @throws SocialDataException */ public boolean updatePerson(String userId, Person person) throws SocialDataException { return savePerson(userId, person); } /** * Removes the person from the storage * * @param userId The userId of the person to be deleted * @return True- if the removal was successful else False * @throws SocialDataException */ public boolean removePerson(String userId) throws SocialDataException { try { userStoreManager = getUserStoreManager(); userStoreManager.deleteUser(userId); } catch (UserStoreException e) { log.error(e.getMessage(), e); throw new SocialDataException("Error while removing person with id " + userId, e); } catch (RegistryException e) { log.error(e.getMessage(), e); throw new SocialDataException("Error while removing person with id " + userId, e); } return true; } /** * Fetches the person details for the given userId * * @param userId The id of ther person to fetch * @return A Person object for the given userId * @throws SocialDataException */ public Person getPerson(String userId) throws SocialDataException { Person personObj; try { userStoreManager = getUserStoreManager(); claimManager = getClaimManager(); if (!userStoreManager.isExistingUser(userId)) { log.error("No user found for the id " + userId); return null; } String[] claims = claimManager.getAllClaimUris(); Map<String, String> userClaims = userStoreManager.getUserClaimValues(userId, claims, null); personObj = getPersonWithClaims(userClaims, userId); } catch (org.wso2.carbon.user.api.UserStoreException e) { log.error(e.getMessage(), e); throw new SocialDataException("Error while retrieving data for person " + userId, e); } catch (RegistryException e) { log.error(e.getMessage(), e); throw new SocialDataException("Error while retrieving data for person " + userId, e); } return personObj; } /** * Returns an array of persons that correspond to the passed in useIds * * @param userIds Array of userIds * @param groupId The group * @param filterOptions How to filter, sort and paginate the collection being fetched * @param fields The profile details to fetch. Empty set implies all * @return An array of Person objects correspond tot the passed in userIds * @throws SocialDataException */ public Person[] getPeople(String[] userIds, String groupId, FilterOptions filterOptions, String[] fields) throws SocialDataException { //TODO: filter options List<String> userIdsToFetch = new ArrayList<String>(); RelationshipManager relationshipManager; if (groupId.equalsIgnoreCase(SocialImplConstants.GROUP_ID_SELF)) { userIdsToFetch = new ArrayList(Arrays.asList(userIds)); } else if (groupId.equalsIgnoreCase(SocialImplConstants.GROUP_ID_FRIENDS)) { relationshipManager = new RelationshipManagerImpl(); for (String userId : userIds) { for (String id : relationshipManager.getRelationshipList(userId)) { userIdsToFetch.add(id); } } } else if (groupId.equalsIgnoreCase(GroupId.Type.all.toString())) { try { userStoreManager = getUserStoreManager(); // get all users using the filter * String[] userList = userStoreManager.listUsers( SocialImplConstants.DEFAULT_USER_FILTER_STRING, SocialImplConstants.DEFAULT_RETURN_ARRAY_SIZE); userIdsToFetch = new ArrayList(Arrays.asList(userList)); } catch (Exception e) { log.error(e.getMessage(), e); throw new SocialDataException("Error while retrieving user list", e); } } Person[] peopleArray = new Person[userIdsToFetch.size()]; int index = 0; for (String id : userIdsToFetch) { peopleArray[index++] = getPerson(id, fields); } return peopleArray; } /** * Returns a person that corresponds to the passed in userIds * * @param userId The userId of the persons whose details to be fetched * @param fields The fields to be fetched * @return A Person object for passes in details * @throws SocialDataException */ public Person getPerson(String userId, String[] fields) throws SocialDataException { Person personObj; String[] socialFields; try { userStoreManager = getUserStoreManager(); if (!userStoreManager.isExistingUser(userId)) { return null; } socialFields = getPersonSocialFields(fields); Map<String, String> userClaims = userStoreManager.getUserClaimValues(userId, socialFields, null); personObj = getPersonWithClaims(userClaims, userId); // Check for necessary fields if (personObj != null && personObj.getDisplayName() == null) { personObj.setDisplayName(userId); } } catch (UserStoreException e) { log.error(e.getMessage(), e); throw new SocialDataException("Error while retrieving data for person " + userId, e); } catch (RegistryException e) { log.error(e.getMessage(), e); throw new SocialDataException("Error while retrieving data for person " + userId, e); } return personObj; } /** * Maps each person attribue to claim-uri * * @param person The Person object to retrieve attributes * @return A Map of claim-value pairs */ private Map<String, String> retrieveClaimValues(Person person) { Map<String, String> claimValues = new HashMap<String, String>(); // map each person attribute to claim-url if (person.getDisplayName() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_DISPLAY_NAME, person.getDisplayName()); } if (person.getName() != null && person.getName().getGivenName() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_GIVEN_NAME, person.getName().getGivenName()); } if (person.getName() != null && person.getName().getFamilyName() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_FAMILY_NAME, person.getName().getFamilyName()); } if (person.getNickname() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_NICK_NAME, person.getNickname()); } if (person.getOrganizations() != null && person.getOrganizations().get(0) != null && person.getOrganizations().get(0).getName() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_ORGANIZATION, person.getOrganizations().get(0).getName()); } if (person.getAddresses() != null && person.getAddresses().get(0) != null) { if (person.getAddresses().get(0).getStreetAddress() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_STREET_ADDRESS, person.getAddresses().get(0).getStreetAddress()); } if (person.getAddresses().get(0).getRegion() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_REGION, person.getAddresses().get(0).getRegion()); } if (person.getAddresses().get(0).getCountry() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_COUNTRY, person.getAddresses().get(0).getCountry()); } if (person.getAddresses().get(0).getLatitude() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_LATITUDE, person.getAddresses().get(0).getLatitude().toString()); } if (person.getAddresses().get(0).getLongitude() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_LONGITUDE, person.getAddresses().get(0).getLongitude().toString()); } if (person.getAddresses().get(0).getPostalCode() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_POSTAL_CODE, person.getAddresses().get(0).getPostalCode()); } } if (person.getEmails() != null && person.getEmails().get(0) != null && person.getEmails().get(0).getValue() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_EMAIL, person.getEmails().get(0).getValue()); } if (person.getPhoneNumbers() != null && person.getPhoneNumbers().get(0) != null && person.getPhoneNumbers().get(0).getValue() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_PHONE_NUMBER, person.getPhoneNumbers().get(0).getValue()); } if (person.getIms() != null && person.getIms().get(0) != null && person.getIms().get(0).getValue() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_IM, person.getIms().get(0).getValue()); } if (person.getUrls() != null && person.getUrls().get(0) != null && person.getUrls().get(0).getValue() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_URL, person.getUrls().get(0).getValue()); } if (person.getAboutMe() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_ABOUT_ME, person.getAboutMe()); } if (person.getBirthday() != null && person.getBirthday().getTime() > 0) { claimValues.put(SocialImplConstants.CLAIM_URI_BIRTHDAY, person.getBirthday().getTime() + ""); } if (person.getRelationshipStatus() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_RELATIONSHIP_STATUS, person.getRelationshipStatus()); } if (person.getReligion() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_RELIGIOUS_VIEW, person.getReligion()); } if (person.getEthnicity() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_ETHNICITY, person.getEthnicity()); } if (person.getGender() != null && person.getGender().name() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_GENDER, person.getGender().name()); } if (person.getPoliticalViews() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_POLITICAL_VIEW, person.getPoliticalViews()); } if (person.getInterests() != null && person.getInterests().get(0) != null) { claimValues.put(SocialImplConstants.CLAIM_URI_INTERESTS, person.getInterests().get(0)); } if (person.getBooks() != null && person.getBooks().get(0) != null) { claimValues.put(SocialImplConstants.CLAIM_URI_BOOKS, person.getBooks().get(0)); } if (person.getJobInterests() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_JOB_INTERESTS, person.getJobInterests()); } if (person.getLanguagesSpoken() != null && person.getLanguagesSpoken().get(0) != null) { claimValues.put(SocialImplConstants.CLAIM_URI_LANGUAGE_SPOKEN, person.getLanguagesSpoken().get(0)); } if (person.getLookingFor() != null && person.getLookingFor().get(0) != null && person.getLookingFor().get(0).name() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_LOOKING_FOR, person.getLookingFor().get(0).name()); } if (person.getMovies() != null && person.getMovies().get(0) != null) { claimValues.put(SocialImplConstants.CLAIM_URI_MOVIES, person.getMovies().get(0)); } if (person.getMusic() != null && person.getMusic().get(0) != null) { claimValues.put(SocialImplConstants.CLAIM_URI_MUSIC, person.getMusic().get(0)); } if (person.getQuotes() != null && person.getQuotes().get(0) != null) { claimValues.put(SocialImplConstants.CLAIM_URI_QUOTES, person.getQuotes().get(0)); } if (person.getHappiestWhen() != null) { claimValues.put(SocialImplConstants.CLAIM_URI_HAPPIEST_WHEN, person.getHappiestWhen()); } return claimValues; } /** * Add the claim values to the Person object as attributes * * @param claimValues The claim values of the person * @param userId id of the person * @return The Person object with attribute values added */ private Person getPersonWithClaims(Map<String, String> claimValues, String userId) { Person person; String displayName = claimValues.get(SocialImplConstants.CLAIM_URI_DISPLAY_NAME); Name userName = new NameImpl(); userName.setGivenName(claimValues.get(SocialImplConstants.CLAIM_URI_GIVEN_NAME)); userName.setFamilyName(claimValues.get(SocialImplConstants.CLAIM_URI_FAMILY_NAME)); person = new PersonImpl(userId, displayName, userName); String value; if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_NICK_NAME)) != null) { person.setNickname(value); } Organization org = new OrganizationImpl(); if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_ORGANIZATION)) != null) { org.setName(value); } List<Organization> orgsList = new ArrayList<Organization>(); orgsList.add(org); person.setOrganizations(orgsList); Address address = new AddressImpl(); if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_STREET_ADDRESS)) != null) { address.setStreetAddress(value); } if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_REGION)) != null) { address.setRegion(value); } if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_COUNTRY)) != null) { address.setCountry(value); } if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_LATITUDE)) != null) { address.setLatitude(Float.valueOf(value)); } if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_LONGITUDE)) != null) { address.setLongitude(Float.valueOf(value)); } if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_POSTAL_CODE)) != null) { address.setPostalCode(value); } List<Address> addressList = new ArrayList<Address>(); addressList.add(address); person.setAddresses(addressList); List<ListField> emailList = new ArrayList<ListField>(); ListField email = new ListFieldImpl(); if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_EMAIL)) != null) { email.setValue(value); } emailList.add(email); person.setEmails(emailList); List<ListField> phoneNumberList = new ArrayList<ListField>(); ListField phoneNumber = new ListFieldImpl(); if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_PHONE_NUMBER)) != null) { phoneNumber.setValue(value); } phoneNumberList.add(phoneNumber); person.setPhoneNumbers(phoneNumberList); List<ListField> imList = new ArrayList<ListField>(); ListField im = new ListFieldImpl(); if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_IM)) != null) { im.setValue(value); } imList.add(im); person.setIms(imList); List<Url> urlList = new ArrayList<Url>(); Url url = new UrlImpl(); if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_URL)) != null) { url.setValue(value); } urlList.add(url); person.setUrls(urlList); if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_ABOUT_ME)) != null) { person.setAboutMe(value); } Date birthday = new Date(); if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_BIRTHDAY)) != null) { birthday.setTime(Long.valueOf(value)); } person.setBirthday(birthday); if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_RELATIONSHIP_STATUS)) != null) { person.setRelationshipStatus(value); } if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_RELIGIOUS_VIEW)) != null) { person.setReligion(value); } if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_ETHNICITY)) != null) { person.setEthnicity(value); } if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_GENDER)) != null) { person.setGender(Person.Gender.valueOf(value)); } if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_POLITICAL_VIEW)) != null) { person.setPoliticalViews(value); } List<String> interest = new ArrayList<String>(); if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_INTERESTS)) != null) { interest.add(value); } person.setInterests(interest); List<String> books = new ArrayList<String>(); if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_BOOKS)) != null) { books.add(value); } person.setBooks(books); person.setJobInterests(claimValues.get(SocialImplConstants.CLAIM_URI_JOB_INTERESTS)); List<String> languageSpoken = new ArrayList<String>(); if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_LANGUAGE_SPOKEN)) != null) { languageSpoken.add(value); } person.setLanguagesSpoken(languageSpoken); List<String> movieList = new ArrayList<String>(); if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_MOVIES)) != null) { movieList.add(value); } person.setMovies(movieList); List<String> musicList = new ArrayList<String>(); if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_MUSIC)) != null) { musicList.add(value); } person.setMusic(musicList); List<String> quotesList = new ArrayList<String>(); if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_QUOTES)) != null) { quotesList.add(value); } person.setQuotes(quotesList); person.setHappiestWhen(claimValues.get(SocialImplConstants.CLAIM_URI_HAPPIEST_WHEN)); List<Enum<LookingFor>> lookingFor = new ArrayList<Enum<LookingFor>>(); if ((value = claimValues.get(SocialImplConstants.CLAIM_URI_LOOKING_FOR)) != null) { lookingFor.add(LookingFor.valueOf(value)); } person.setLookingFor(lookingFor); return person; } /** * Converts the fields in to related claim-uri * * @param fields The Person fields * @return An array of String with the claim-uris of the given fields */ private String[] getPersonSocialFields(String[] fields) { List<String> socialFields = new ArrayList<String>(); for (String field : fields) { field = field.trim(); if (SocialImplConstants.FIELD_DISPLAY_NAME.equalsIgnoreCase(field)) { socialFields.add(SocialImplConstants.CLAIM_URI_DISPLAY_NAME); } else if (SocialImplConstants.FIELD_NAME.equalsIgnoreCase(field)) { socialFields.add(SocialImplConstants.CLAIM_URI_GIVEN_NAME); socialFields.add(SocialImplConstants.CLAIM_URI_FAMILY_NAME); } else if (SocialImplConstants.FIELD_NICKNAME.equalsIgnoreCase(field)) { socialFields.add(SocialImplConstants.CLAIM_URI_NICK_NAME); } else if (SocialImplConstants.FIELD_ADDRESSES.equalsIgnoreCase(field)) { socialFields.add(SocialImplConstants.CLAIM_URI_STREET_ADDRESS); socialFields.add(SocialImplConstants.CLAIM_URI_REGION); socialFields.add(SocialImplConstants.CLAIM_URI_COUNTRY); socialFields.add(SocialImplConstants.CLAIM_URI_LONGITUDE); socialFields.add(SocialImplConstants.CLAIM_URI_LATITUDE); socialFields.add(SocialImplConstants.CLAIM_URI_POSTAL_CODE); } else if (SocialImplConstants.FIELD_ABOUT_ME.equalsIgnoreCase(field)) { socialFields.add(SocialImplConstants.CLAIM_URI_ABOUT_ME); } else if (SocialImplConstants.FIELD_BIRTHDAY.equalsIgnoreCase(field)) { socialFields.add(SocialImplConstants.CLAIM_URI_BIRTHDAY); } else if (SocialImplConstants.FIELD_EMAILS.equalsIgnoreCase(field)) { socialFields.add(SocialImplConstants.CLAIM_URI_EMAIL); } else if (SocialImplConstants.FIELD_ETHNICITY.equalsIgnoreCase(field)) { socialFields.add(SocialImplConstants.CLAIM_URI_ETHNICITY); } else if (SocialImplConstants.FIELD_HAPPIEST_WHEN.equalsIgnoreCase(field)) { socialFields.add(SocialImplConstants.CLAIM_URI_HAPPIEST_WHEN); } else if (SocialImplConstants.FIELD_IM.equalsIgnoreCase(field)) { socialFields.add(SocialImplConstants.CLAIM_URI_IM); } else if (SocialImplConstants.FIELD_INTERESTS.equalsIgnoreCase(field)) { socialFields.add(SocialImplConstants.CLAIM_URI_INTERESTS); } else if (SocialImplConstants.FIELD_JOB_INTERESTS.equalsIgnoreCase(field)) { socialFields.add(SocialImplConstants.CLAIM_URI_JOB_INTERESTS); } else if (SocialImplConstants.FIELD_LANGUAGE_SPOKEN.equalsIgnoreCase(field)) { socialFields.add(SocialImplConstants.CLAIM_URI_LANGUAGE_SPOKEN); } else if (SocialImplConstants.FIELD_LOOKING_FOR.equalsIgnoreCase(field)) { socialFields.add(SocialImplConstants.CLAIM_URI_LOOKING_FOR); } else if (SocialImplConstants.FIELD_MUSIC.equalsIgnoreCase(field)) { socialFields.add(SocialImplConstants.CLAIM_URI_MUSIC); } else if (SocialImplConstants.FIELD_MOVIES.equalsIgnoreCase(field)) { socialFields.add(SocialImplConstants.CLAIM_URI_MOVIES); } else if (SocialImplConstants.FIELD_QUOTES.equalsIgnoreCase(field)) { socialFields.add(SocialImplConstants.CLAIM_URI_QUOTES); } else if (SocialImplConstants.FIELD_POLITICAL_VIEW.equalsIgnoreCase(field)) { socialFields.add(SocialImplConstants.CLAIM_URI_POLITICAL_VIEW); } else if (SocialImplConstants.FIELD_GENDER.equalsIgnoreCase(field)) { socialFields.add(SocialImplConstants.CLAIM_URI_GENDER); } else if (SocialImplConstants.FIELD_RELATIONSHIP_STATUS.equalsIgnoreCase( field)) { socialFields.add(SocialImplConstants.CLAIM_URI_RELATIONSHIP_STATUS); } else if (SocialImplConstants.FIELD_RELIGION.equals(field)) { socialFields.add(SocialImplConstants.CLAIM_URI_RELIGIOUS_VIEW); } else if (SocialImplConstants.FIELD_PHONE_NUMBERS.equals(field)) { socialFields.add(SocialImplConstants.CLAIM_URI_PHONE_NUMBER); } else if (SocialImplConstants.FIELD_BOOKS.equals(field)) { socialFields.add(SocialImplConstants.CLAIM_URI_BOOKS); } socialFields.add(SocialImplConstants.CLAIM_URI_DISPLAY_NAME); } return socialFields.toArray(new String[socialFields.size()]); } /** * Returns the claim url & display name sorted according to the display order * * @return A two-dimensional array of String containing claim url and display names * The first row contains the claim-url values * The second row contains the display names * @throws SocialDataException */ public ClaimMapping[] getOrderedUserClaimInfo() throws SocialDataException { ClaimMapping[] userClaims; // String[][] claimInfo; try { claimManager = getClaimManager(); userClaims = claimManager.getAllSupportClaimMappingsByDefault(); /* // Commented out and use the claim mapping instead here with the new changes userClaims = (Claim[]) claimManager.getAllSupportClaimsByDefault(); // sort the claims in display order Arrays.sort(userClaims, new UserClaimComparator()); claimInfo = new String[2][userClaims.length]; int index = 0; // retrieve claims uris in sorted order for (Claim claim : userClaims) { claimInfo[0][index] = claim.getClaimUri(); claimInfo[1][index++] = claim.getDisplayTag(); } */ } catch (RegistryException e) { log.error(e.getMessage(), e); throw new SocialDataException("Error while retrieving claims", e); } catch (org.wso2.carbon.user.api.UserStoreException e) { log.error(e.getMessage(), e); throw new SocialDataException("Error while retrieving claims", e); } return userClaims; } /** * Retrieves the display name of the given person id * * @param userId id of the person * @return the displayname * @throws SocialDataException */ public String getDisplayName(String userId) throws SocialDataException { if (userId == null || userId.trim().equals("")) { return null; } Person person = getPerson(userId); return person.getDisplayName(); } public String[][] getUserList(String filter,int maxItemLimit) throws SocialDataException { String[][] userList = new String[0][0]; try { userStoreManager = getUserStoreManager(); String[] userIdList = userStoreManager.listUsers(filter,maxItemLimit); if (userIdList != null) { userList = new String[2][userIdList.length]; int index = 0; for (String userId : userIdList) { userList[0][index]=userId; userList[1][index++] = (getDisplayName(userId) != null) ? getDisplayName(userId) : userId; } } } catch (RegistryException e) { log.error(e.getMessage(), e); throw new SocialDataException("Error while retrieving user-list", e); } catch (UserStoreException e) { log.error(e.getMessage(), e); throw new SocialDataException("Error while retrieving user-list", e); } return userList; } /** * A Comparator to sort claim urls according to display order */ static class UserClaimComparator implements Comparator<Claim>, Serializable { public int compare(Claim claim1, Claim claim2) { if (claim1.getDisplayOrder() == 0) { claim1.setDisplayOrder(Integer.MAX_VALUE); } if (claim2.getDisplayOrder() == 0) { claim2.setDisplayOrder(Integer.MAX_VALUE); } if (claim1.getDisplayOrder() < claim2.getDisplayOrder()) { return -1; } if (claim1.getDisplayOrder() == claim2.getDisplayOrder()) { return 0; } if (claim1.getDisplayOrder() > claim2.getDisplayOrder()) { return 1; } return 0; } } }