org.wso2.carbon.registry.social.impl.people.userprofile.PersonManagerImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.wso2.carbon.registry.social.impl.people.userprofile.PersonManagerImpl.java

Source

/*
 * 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;
        }

    }
}