IdentityStorage.java
/*
* 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.exoplatform.social.core.storage.api;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Set;
import org.exoplatform.social.core.identity.SpaceMemberFilterListAccess.Type;
import org.exoplatform.social.core.identity.model.ActiveIdentityFilter;
import org.exoplatform.social.core.identity.model.Identity;
import org.exoplatform.social.core.identity.model.IdentityWithRelationship;
import org.exoplatform.social.core.identity.model.Profile;
import org.exoplatform.social.core.identity.model.Profile.AttachedActivityType;
import org.exoplatform.social.core.profile.ProfileFilter;
import org.exoplatform.social.core.space.model.Space;
import org.exoplatform.social.core.storage.IdentityStorageException;
/**
* @author <a href="mailto:alain.defrance@exoplatform.com">Alain Defrance</a>
* @version $Revision$
*/
public interface IdentityStorage {
/**
* Saves identity.
*
* @param identity the identity
* @throws IdentityStorageException
*/
public void saveIdentity(final Identity identity) throws IdentityStorageException;
/**
* Updates existing identity's properties.
*
* @param identity the identity to be updated.
* @return the updated identity.
* @throws IdentityStorageException
* @since 1.2.0-GA
*/
public Identity updateIdentity(final Identity identity) throws IdentityStorageException;
/**
* Updates existing identity's membership in OrganizationService.
*
* @param remoteId the remoteId to be updated membership.
* @throws IdentityStorageException
* @since 4.0.0
*/
public void updateIdentityMembership(final String remoteId) throws IdentityStorageException;
/**
* Gets the identity by his id.
*
* @param nodeId the id of identity
* @return the identity
* @throws IdentityStorageException
*/
public Identity findIdentityById(final String nodeId) throws IdentityStorageException;
/**
* Deletes an identity
*
* @param identity
* @throws IdentityStorageException
*/
public void deleteIdentity(final Identity identity) throws IdentityStorageException;
/**
* Hard delete an identity
*
* @param identity
* @throws IdentityStorageException
*/
public void hardDeleteIdentity(final Identity identity) throws IdentityStorageException;
/**
* Load profile.
*
* @param profile the profile
* @throws IdentityStorageException
*/
public Profile loadProfile(Profile profile) throws IdentityStorageException;
/**
* Gets the identity by remote id.
*
* @param providerId the identity provider
* @param remoteId the id
* @return the identity by remote id
* @throws IdentityStorageException
*/
public Identity findIdentity(final String providerId, final String remoteId) throws IdentityStorageException;
/**
* Saves profile.
*
* @param profile the profile
* @throws IdentityStorageException
*/
public void saveProfile(final Profile profile) throws IdentityStorageException;
/**
* Updates profile.
*
* @param profile the profile
* @throws IdentityStorageException
* @since 1.2.0-GA
*/
public void updateProfile(final Profile profile) throws IdentityStorageException;
/**
* Gets total number of identities in storage depend on providerId.
* @throws IdentityStorageException
*/
public int getIdentitiesCount (final String providerId) throws IdentityStorageException;
/**
* Gets the identities by profile filter.
*
* @param providerId Id of provider.
* @param profileFilter Information of profile that used in filtering.
* @param offset Start index of list to be get.
* @param limit End index of list to be get.
* @param forceLoadOrReloadProfile Load profile or not.
* @return the identities by profile filter.
* @throws IdentityStorageException
* @since 1.2.0-GA
*/
public List<Identity> getIdentitiesByProfileFilter(
final String providerId, final ProfileFilter profileFilter, long offset, long limit,
boolean forceLoadOrReloadProfile)
throws IdentityStorageException;
/**
* Gets the identities by profile filter.
*
* @param providerId Id of provider.
* @param profileFilter Information of profile that used in filtering.
* @param offset Start index of list to be get.
* @param limit End index of list to be get.
* @param forceLoadOrReloadProfile Load profile or not.
* @return the identities by profile filter.
* @throws IdentityStorageException
* @since 4.0.0-Alpha1
*/
public List<Identity> getIdentitiesForMentions(final String providerId,
final ProfileFilter profileFilter,
org.exoplatform.social.core.relationship.model.Relationship.Type type,
long offset,
long limit,
boolean forceLoadOrReloadProfile) throws IdentityStorageException;
/**
* Gets the count identities by profile filter.
*
* @param providerId Id of provider.
* @param profileFilter Information of profile that used in filtering.
* @return the number of filtered identities
* @throws IdentityStorageException
* @since 4.4.0
*/
public int getIdentitiesForMentionsCount(final String providerId,
final ProfileFilter profileFilter,
org.exoplatform.social.core.relationship.model.Relationship.Type type) throws IdentityStorageException;
/**
* Gets the identities for Unified Search.
*
* @param providerId Id of provider.
* @param profileFilter Information of profile that used in filtering.
* @param offset Start index of list to be get.
* @param limit End index of list to be get.
* @return the identities
* @throws IdentityStorageException
* @since 4.0.x
*/
public List<Identity> getIdentitiesForUnifiedSearch(final String providerId,
final ProfileFilter profileFilter,
long offset, long limit) throws IdentityStorageException;
/**
* Counts the number of identity by profile filter.
*
* @param providerId Id of Provider.
* @param profileFilter Information of profile are used in filtering.
* @return Number of identities that are filtered by profile.
* @throws IdentityStorageException
* @since 1.2.0-GA
*/
public int getIdentitiesByProfileFilterCount(final String providerId, final ProfileFilter profileFilter)
throws IdentityStorageException;
/**
* Counts the number of identities that match the first character of name.
*
* @param providerId
* @param profileFilter Profile filter object.
* @return Number of identities that start with the first character of name.
* @throws IdentityStorageException
* @since 1.2.0-GA
*/
public int getIdentitiesByFirstCharacterOfNameCount(final String providerId, final ProfileFilter profileFilter)
throws IdentityStorageException;
/**
* Gets the identities that match the first character of name.
*
* @param providerId Id of provider.
* @param profileFilter Profile filter object.
* @param offset Start index of list to be get.
* @param limit End index of list to be get.
* @param forceLoadOrReloadProfile Load profile or not.
* @return Identities that have name start with the first character.
* @throws IdentityStorageException
* @deprecated use method getIdentities or getIdentitiesForUnifiedSearch instead
* @since 1.2.0-GA
*/
@Deprecated
public List<Identity> getIdentitiesByFirstCharacterOfName(final String providerId, final ProfileFilter profileFilter,
long offset, long limit, boolean forceLoadOrReloadProfile) throws IdentityStorageException;
/**
* Gets the type.
*
* @param nodetype the nodetype
* @param property the property
* @return the type
* @throws IdentityStorageException
*/
public String getType(final String nodetype, final String property);
/**
* Add or modify properties of profile and persist to JCR. Profile parameter is a lightweight that
* contains only the property that you want to add or modify. NOTE: The method will
* not delete the properties on old profile when the param profile have not those keys.
*
* @param profile
* @throws IdentityStorageException
*/
public void addOrModifyProfileProperties(final Profile profile) throws IdentityStorageException;
/**
* get Space's member Identity and filter it by Profile Filter
* @param space
* @param profileFilter
* @param offset
* @param limit
* @return
* @throws IdentityStorageException
*/
public List<Identity> getSpaceMemberIdentitiesByProfileFilter(final Space space,
final ProfileFilter profileFilter,
Type type,
long offset, long limit)
throws IdentityStorageException;
/**
* Updates profile activity id by type.
*
* @param identity
* @param activityId
* @param type Type of activity id to get.
* @since 4.0.0.Alpha1
*/
public void updateProfileActivityId(Identity identity, String activityId, AttachedActivityType type);
/**
* Gets profile activity id by type.
*
* @param profile
* @param type Type of activity id to get.
* @return Profile activity id.
* @since 4.0.0.Alpha1
*/
public String getProfileActivityId(Profile profile, AttachedActivityType type);
/**
* Gets the active user list base on the given ActiveIdentityFilter.
* 1. N days who last login less than N days.
* 2. UserGroup who belongs to this group.
*
* @param filter
* @return
* @since 4.1.0
*/
public Set<String> getActiveUsers(ActiveIdentityFilter filter);
/**
* Process enable/disable Identity
*
* @param identity The Identity enable
* @param isEnable true if the user is enable, false if not
* @since 4.2.x
*/
public void processEnabledIdentity(Identity identity, boolean isEnable);
/**
* Gets all identities from the store with the relationship that they have with current user identity.
*
* @param identityId user viewer identity id.
* @param offset Start index of list to be get.
* @param limit End index of list to be get.
* @return Identities that have name start with the first character.
* @since 4.4.0
*/
List<IdentityWithRelationship> getIdentitiesWithRelationships(String identityId, int offset, int limit);
/**
* Gets all identities from the store with the relationship that they have with current user identity.
* The firstChar parameter will be used to filter on identities full names first character.
*
* @param identityId
* @param firstChar
* @param offset
* @param limit
* @return
*/
default List<IdentityWithRelationship> getIdentitiesWithRelationships(String identityId, char firstChar, int offset, int limit) {
throw new UnsupportedOperationException("This operation is not supported using current implementation of service IdentityStorage");
}
/**
* Counts the number of identities
*
* @param identityId Id of Identity.
* @return Number of identities.
* @throws Exception
* @since 4.4.0
*/
int countIdentitiesWithRelationships(String identityId) throws Exception;
/**
* Gets a the avatar stream for a given identity
*
* @param identity
* @return
*/
InputStream getAvatarInputStreamById(Identity identity) throws IOException;
/**
* Gets a the avatar stream for a given identity
*
* @param identity
* @return
*/
InputStream getBannerInputStreamById(Identity identity) throws IOException;
/**
* count Space's members by status and filter it by Profile Filter
*
* @param space
* @param profileFilter
* @param type
* @return
*/
public int countSpaceMemberIdentitiesByProfileFilter(Space space, ProfileFilter profileFilter, Type type);
/**
* Get list of identities by providerId
*
* @param providerId
* @param offset
* @param limit
* @return
*/
default public List<Identity> getIdentities(String providerId, long offset, long limit) {
throw new UnsupportedOperationException("This operation is not supported using current implementation of service IdentityStorage");
}
/**
* Get list of identities by providerId
* The firstChar parameter will be used to filter on identities full names first character.
*
* @param providerId
* @param firstCharacterOfName
* @param offset
* @param limit
* @return
*/
default public List<Identity> getIdentities(String providerId, char firstCharacterOfName, long offset, long limit) {
throw new UnsupportedOperationException("This operation is not supported using current implementation of service IdentityStorage");
}
/**
* Sorts a list of user identities using a field
*
* @param identityRemoteIds
* @param sortField
* @return
*/
public List<String> sortIdentities(List<String> identityRemoteIds, String sortField);
}