/*
* Copyright (C) 2003-2011 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.social.core.identity;
import java.util.ArrayList;
import java.util.List;
import org.exoplatform.commons.utils.ListAccess;
import org.exoplatform.social.common.ListAccessValidator;
import org.exoplatform.social.common.jcr.Util;
import org.exoplatform.social.core.identity.model.Identity;
import org.exoplatform.social.core.profile.ProfileFilter;
import org.exoplatform.social.core.storage.api.IdentityStorage;
/**
* ListAccess is used in loading identity with the input profile filter.
* With this list we can manage the size of returned list by offset and limit.
*
* @author <a href="http://hanhvq@gmail.com">hanhvq (gmail dot com)</a>
* @since 1.2.0-GA
*/
public class ProfileFilterListAccess implements ListAccess<Identity> {
private static final char EMPTY_CHARACTER = '\u0000';
private IdentityStorage identityStorage;
private ProfileFilter profileFilter;
/**
* The id of provider.
*/
String providerId;
/**
* Force to load profile or not.
*/
boolean forceLoadProfile;
/**
* Constructor.
*
* @param identityStorage
* @param providerId Id of provider.
* @param profileFilter Filter object as extract's condition.
* @param forceLoadProfile True then force to load profile.
*/
public ProfileFilterListAccess(IdentityStorage identityStorage, String providerId, ProfileFilter profileFilter,
boolean forceLoadProfile) {
this.identityStorage = identityStorage;
this.profileFilter = profileFilter;
this.providerId = providerId;
this.forceLoadProfile = forceLoadProfile;
}
/**
* Gets provider id.
* @return
*/
public String getProviderId() {
return providerId;
}
/**
* Sets provider id.
* @param providerId
*/
public void setProviderId(String providerId) {
this.providerId = providerId;
}
/**
* {@inheritDoc}
*/
public Identity[] load(int offset, int limit) throws Exception, IllegalArgumentException {
ListAccessValidator.validateIndex(offset, limit, getSize());
List<Identity> identities = new ArrayList<Identity>();
if (profileFilter.getFirstCharacterOfName() != EMPTY_CHARACTER) {
identities = identityStorage.getIdentitiesByFirstCharacterOfName(providerId, profileFilter, offset,
limit, forceLoadProfile);
} else {
identities = identityStorage.getIdentitiesByProfileFilter(providerId, profileFilter, offset,
limit, forceLoadProfile);
}
return Util.convertListToArray(identities, Identity.class);
}
/**
* {@inheritDoc}
*/
public int getSize() throws Exception {
int size = 0;
if (profileFilter.getFirstCharacterOfName() != EMPTY_CHARACTER) {
size = identityStorage.getIdentitiesByFirstCharacterOfNameCount(providerId, profileFilter);
} else {
size = identityStorage.getIdentitiesByProfileFilterCount(providerId, profileFilter);
}
return size;
}
}