/*
* Copyright (C) 2003-2009 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.space;
import java.util.ArrayList;
import java.util.List;
import org.exoplatform.commons.utils.ListAccess;
import org.exoplatform.social.common.ListAccessValidator;
import org.exoplatform.social.core.space.model.Space;
import org.exoplatform.social.core.storage.api.SpaceStorage;
/**
* SpaceListAccess for LazyPageList usage
*
* Created by The eXo Platform SAS
* Author : hoatle
* hoatlevan@gmail.com
* Aug 28, 2009
*/
public class SpaceListAccess implements ListAccess<Space> {
/** The space activityStorage. */
private SpaceStorage spaceStorage;
/** The user id. */
private String userId;
/** The space filter */
private SpaceFilter spaceFilter;
/** The type. */
Type type;
/**
* The space list access Type Enum.
*/
public enum Type {
/** Gets the all spaces (for super user). */
ALL,
/** Gets the all spaces by filter. */
ALL_FILTER,
/** Gets the accessible spaces of the user. */
ACCESSIBLE,
/** Gets the accessible spaces of the user by filter. */
ACCESSIBLE_FILTER,
/** Gets the invited spaces of the user. */
INVITED,
/** Gets the invited spaces of the user by filter. */
INVITED_FILTER,
/** Gets the pending spaces of the user. */
PENDING,
/** Gets the pending spaces of the user by filter. */
PENDING_FILTER,
/** Gets the public spaces of the user. */
PUBLIC,
/** Gets the public spaces of the user by filter. */
PUBLIC_FILTER,
/** Gets the public spaces of the super user. */
PUBLIC_SUPER_USER,
/** Gets the spaces which the user has setting permission. */
SETTING,
/** Gets the spaces which the user has setting permission by filter. */
SETTING_FILTER,
/** Gets the spaces which the user has the "member" role. */
MEMBER,
/** Gets the spaces which the user has the "member" role by filter. */
MEMBER_FILTER,
}
/**
* The constructor.
*
* @since 1.2.0-GA
*/
public SpaceListAccess() {
this.spaceStorage = null;
this.userId = null;
this.spaceFilter = null;
this.type = null;
}
/**
* The constructor.
*
* @param spaceStorage
* @param spaceFilter
* @param type
* @since 1.2.0-GA
*/
public SpaceListAccess(SpaceStorage spaceStorage, String userId, SpaceFilter spaceFilter, Type type) {
this.spaceStorage = spaceStorage;
this.userId = userId;
this.spaceFilter = spaceFilter;
this.type = type;
}
/**
* The constructor.
*
* @param spaceStorage
* @param type
* @since 1.2.0-GA
*/
public SpaceListAccess(SpaceStorage spaceStorage, Type type) {
this.spaceStorage = spaceStorage;
this.type = type;
}
/**
* The constructor.
*
* @param spaceStorage
* @param userId
* @param type
* @since 1.2.0-GA
*/
public SpaceListAccess(SpaceStorage spaceStorage, String userId, Type type) {
this.spaceStorage = spaceStorage;
this.userId = userId;
this.type = type;
}
/**
* The constructor.
*
* @param spaceStorage
* @param spaceFilter
* @param type
* @since 1.2.0-GA
*/
public SpaceListAccess(SpaceStorage spaceStorage, SpaceFilter spaceFilter, Type type) {
this.spaceStorage = spaceStorage;
this.spaceFilter = spaceFilter;
this.type = type;
}
/**
* {@inheritDoc}
*/
public int getSize() throws Exception {
switch (type) {
case ALL: return spaceStorage.getAllSpacesCount();
case ALL_FILTER: return spaceStorage.getAllSpacesByFilterCount(this.spaceFilter);
case ACCESSIBLE: return spaceStorage.getAccessibleSpacesCount(this.userId);
case ACCESSIBLE_FILTER: return spaceStorage.getAccessibleSpacesByFilterCount(this.userId, this.spaceFilter);
case INVITED: return spaceStorage.getInvitedSpacesCount(userId);
case INVITED_FILTER: return spaceStorage.getInvitedSpacesByFilterCount(userId, spaceFilter);
case PENDING: return spaceStorage.getPendingSpacesCount(this.userId);
case PENDING_FILTER: return spaceStorage.getPendingSpacesByFilterCount(this.userId, this.spaceFilter);
case PUBLIC: return spaceStorage.getPublicSpacesCount(this.userId);
case PUBLIC_FILTER: return spaceStorage.getPublicSpacesByFilterCount(this.userId, this.spaceFilter);
case PUBLIC_SUPER_USER: return 0;
case SETTING: return spaceStorage.getEditableSpacesCount(this.userId);
case SETTING_FILTER: return spaceStorage.getEditableSpacesByFilterCount(this.userId, this.spaceFilter);
case MEMBER: return spaceStorage.getMemberSpacesCount(this.userId);
case MEMBER_FILTER: return spaceStorage.getMemberSpacesByFilterCount(this.userId, this.spaceFilter);
default: return 0;
}
}
/**
* {@inheritDoc}
*/
public Space[] load(int offset, int limit) throws Exception, IllegalArgumentException {
ListAccessValidator.validateIndex(offset, limit, this.getSize());
List<Space> listSpaces = null;
switch (type) {
case ALL: listSpaces = spaceStorage.getSpaces(offset, limit);
break;
case ALL_FILTER: listSpaces = spaceStorage.getSpacesByFilter(this.spaceFilter, offset, limit);
break;
case ACCESSIBLE: listSpaces = spaceStorage.getAccessibleSpaces(this.userId, offset, limit);
break;
case ACCESSIBLE_FILTER: listSpaces = spaceStorage.getAccessibleSpacesByFilter(this.userId, this.spaceFilter, offset, limit);
break;
case INVITED: listSpaces = spaceStorage.getInvitedSpaces(this.userId, offset, limit);
break;
case INVITED_FILTER: listSpaces = spaceStorage.getInvitedSpacesByFilter(this.userId, this.spaceFilter, offset, limit);
break;
case PENDING: listSpaces = spaceStorage.getPendingSpaces(this.userId, offset, limit);
break;
case PENDING_FILTER: listSpaces = spaceStorage.getPendingSpacesByFilter(this.userId, this.spaceFilter, offset, limit);
break;
case PUBLIC: listSpaces = spaceStorage.getPublicSpaces(this.userId, offset, limit);
break;
case PUBLIC_FILTER: listSpaces = spaceStorage.getPublicSpacesByFilter(this.userId, this.spaceFilter, offset, limit);
break;
case PUBLIC_SUPER_USER: listSpaces = new ArrayList<Space> ();
break;
case SETTING: listSpaces = spaceStorage.getEditableSpaces(this.userId, offset, limit);
break;
case SETTING_FILTER: listSpaces = spaceStorage.getEditableSpacesByFilter(this.userId, this.spaceFilter, offset, limit);
break;
case MEMBER: listSpaces = spaceStorage.getMemberSpaces(this.userId, offset, limit);
break;
case MEMBER_FILTER: listSpaces = spaceStorage.getMemberSpacesByFilter(this.userId, this.spaceFilter, offset, limit);
break;
}
return listSpaces.toArray(new Space[listSpaces.size()]);
}
/**
* Gets the type.
*
* @return
* @since 1.2.0-GA
*/
public Type gettype() {
return type;
}
/**
* Sets the type.
*
* @param type
* @since 1.2.0-GA
*/
public void settype(Type type) {
this.type = type;
}
/**
* Gets the user id.
*
* @return
* @since 1.2.0-GA
*/
public String getUserId() {
return userId;
}
/**
* Sets the user id.
*
* @param userId
* @since 1.2.0-GA
*/
public void setUserId(String userId) {
this.userId = userId;
}
}