/* * 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.activity; import java.util.Collections; import java.util.List; import org.exoplatform.social.common.RealtimeListAccess; import org.exoplatform.social.common.jcr.Util; import org.exoplatform.social.core.activity.model.ExoSocialActivity; import org.exoplatform.social.core.identity.model.Identity; import org.exoplatform.social.core.storage.api.ActivityStorage; /** * The real time list access for activities. * * @author <a href="http://hoatle.net">hoatle (hoatlevan at gmail dot com)</a> * @since Apr 8, 2011 */ public class ActivitiesRealtimeListAccess implements RealtimeListAccess<ExoSocialActivity> { public static enum ActivityType { ACTIVITY_FEED, USER_ACTIVITIES, CONNECTIONS_ACTIVITIES, USER_SPACE_ACTIVITIES } /** * The activity activityStorage. */ private ActivityStorage activityStorage; /** * The chosen activity type. */ private ActivityType activityType; /** * The chosen identity. */ private Identity ownerIdentity; /** * Constructor. * * @param existingActivityStorage * @param chosenActivityType * @param chosenOwnerIdentity */ public ActivitiesRealtimeListAccess(final ActivityStorage existingActivityStorage, final ActivityType chosenActivityType, final Identity chosenOwnerIdentity) { this.activityStorage = existingActivityStorage; this.activityType = chosenActivityType; this.ownerIdentity = chosenOwnerIdentity; } /** * {@inheritDoc} */ public List<ExoSocialActivity> loadAsList(int index, int limit) { switch (activityType) { case ACTIVITY_FEED: { return activityStorage.getActivityFeed(ownerIdentity, index, limit); } case USER_ACTIVITIES: { return activityStorage.getUserActivities(ownerIdentity, index, limit); } case CONNECTIONS_ACTIVITIES: { return activityStorage.getActivitiesOfConnections(ownerIdentity, index, limit); } case USER_SPACE_ACTIVITIES: { return activityStorage.getUserSpacesActivities(ownerIdentity, index, limit); } } return Collections.emptyList(); } /** * {@inheritDoc} */ public ExoSocialActivity[] load(int index, int limit) { return Util.convertListToArray(loadAsList(index, limit), ExoSocialActivity.class); } /** * {@inheritDoc} */ public int getSize() { switch (activityType) { case ACTIVITY_FEED: { return activityStorage.getNumberOfActivitesOnActivityFeed(ownerIdentity); } case USER_ACTIVITIES: { return activityStorage.getNumberOfUserActivities(ownerIdentity); } case CONNECTIONS_ACTIVITIES: { return activityStorage.getNumberOfActivitiesOfConnections(ownerIdentity); } case USER_SPACE_ACTIVITIES: { return activityStorage.getNumberOfUserSpacesActivities(ownerIdentity); } } return 0; } /** * {@inheritDoc} */ public List<ExoSocialActivity> loadNewer(ExoSocialActivity baseActivity, int length) { switch (activityType) { case ACTIVITY_FEED: { return activityStorage.getNewerOnActivityFeed(ownerIdentity, baseActivity, length); } case USER_ACTIVITIES: { return activityStorage.getNewerOnUserActivities(ownerIdentity, baseActivity, length); } case CONNECTIONS_ACTIVITIES: { return activityStorage.getNewerOnActivitiesOfConnections(ownerIdentity, baseActivity, length); } case USER_SPACE_ACTIVITIES: { return activityStorage.getNewerOnUserSpacesActivities(ownerIdentity, baseActivity, length); } } return Collections.emptyList(); } /** * {@inheritDoc} */ public int getNumberOfNewer(ExoSocialActivity baseActivity) { switch (activityType) { case ACTIVITY_FEED: { return activityStorage.getNumberOfNewerOnActivityFeed(ownerIdentity, baseActivity); } case USER_ACTIVITIES: { return activityStorage.getNumberOfNewerOnUserActivities(ownerIdentity, baseActivity); } case CONNECTIONS_ACTIVITIES: { return activityStorage.getNumberOfNewerOnActivitiesOfConnections(ownerIdentity, baseActivity); } case USER_SPACE_ACTIVITIES: { return activityStorage.getNumberOfNewerOnUserSpacesActivities(ownerIdentity, baseActivity); } } return 0; } /** * {@inheritDoc} */ public List<ExoSocialActivity> loadOlder(ExoSocialActivity baseActivity, int length) { switch (activityType) { case ACTIVITY_FEED: { return activityStorage.getOlderOnActivityFeed(ownerIdentity, baseActivity, length); } case USER_ACTIVITIES: { return activityStorage.getOlderOnUserActivities(ownerIdentity, baseActivity, length); } case CONNECTIONS_ACTIVITIES: { return activityStorage.getOlderOnActivitiesOfConnections(ownerIdentity, baseActivity, length); } case USER_SPACE_ACTIVITIES: { return activityStorage.getOlderOnUserSpacesActivities(ownerIdentity, baseActivity, length); } } return Collections.emptyList(); } /** * {@inheritDoc} */ public int getNumberOfOlder(ExoSocialActivity baseActivity) { switch (activityType) { case ACTIVITY_FEED: { return activityStorage.getNumberOfOlderOnActivityFeed(ownerIdentity, baseActivity); } case USER_ACTIVITIES: { return activityStorage.getNumberOfOlderOnUserActivities(ownerIdentity, baseActivity); } case CONNECTIONS_ACTIVITIES: { return activityStorage.getNumberOfOlderOnActivitiesOfConnections(ownerIdentity, baseActivity); } case USER_SPACE_ACTIVITIES: { return activityStorage.getNumberOfOlderOnUserSpacesActivities(ownerIdentity, baseActivity); } } return 0; } }