/*
* Copyright (C) 2003-2010 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.application;
import org.exoplatform.container.xml.InitParams;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.exoplatform.social.core.identity.model.Identity;
import org.exoplatform.social.core.identity.provider.SpaceIdentityProvider;
import org.exoplatform.social.core.manager.ActivityManager;
import org.exoplatform.social.core.manager.IdentityManager;
import org.exoplatform.social.core.space.SpaceListenerPlugin;
import org.exoplatform.social.core.space.model.Space;
import org.exoplatform.social.core.space.spi.SpaceLifeCycleEvent;
import org.exoplatform.social.core.space.spi.SpaceService;
/**
* This listener is responsible for initializing and notifying activity stream for the space. We create a special
* opensocial user (with a group provider) ready to receive new activities.
*
* @author <a href="mailto:patrice.lamarque@exoplatform.com">Patrice Lamarque</a>
* @version $Revision$
*/
public class SpaceActivityPublisher extends SpaceListenerPlugin {
/**
* The Logger.
*/
private static final Log LOG = ExoLogger.getExoLogger(SpaceActivityPublisher.class);
/**
* activity manager for posting activities.
*/
private ActivityManager activityManager;
/**
* identity manager for getting identities.
*/
private IdentityManager identityManager;
/**
* Constructor.
*
* @param params the initial params
* @param activityManager the activity manager
* @param identityManager the identity manager
*/
public SpaceActivityPublisher(final InitParams params,
final ActivityManager activityManager,
final IdentityManager identityManager) {
this.activityManager = activityManager;
this.identityManager = identityManager;
}
/**
* {@inheritDoc}
*/
@Override
public void spaceCreated(SpaceLifeCycleEvent event) {
Space space = event.getSpace();
final String activityMessage = space.getDisplayName() + " was created by @" + event.getTarget() + " .";
recordActivity(event, activityMessage);
}
/**
* {@inheritDoc}
*/
@Override
public void spaceRemoved(SpaceLifeCycleEvent event) {
LOG.debug("space " + event.getSpace().getDisplayName() + " was removed!");
}
/**
* {@inheritDoc}
*/
@Override
public void applicationActivated(SpaceLifeCycleEvent event) {
LOG.debug("application <b>" + event.getTarget() + "</b> was activated in space "
+ event.getSpace().getDisplayName());
}
/**
* {@inheritDoc}
*/
@Override
public void applicationAdded(SpaceLifeCycleEvent event) {
LOG.debug("application <b>" + event.getTarget() + "</b> was added in space "
+ event.getSpace().getDisplayName());
}
/**
* {@inheritDoc}
*/
@Override
public void applicationDeactivated(SpaceLifeCycleEvent event) {
LOG.debug("application " + event.getTarget() + " was deactivated in space "
+ event.getSpace().getDisplayName());
}
/**
* {@inheritDoc}
*/
@Override
public void applicationRemoved(SpaceLifeCycleEvent event) {
LOG.debug("application " + event.getTarget() + " was removed in space "
+ event.getSpace().getDisplayName());
}
/**
* {@inheritDoc}
*/
@Override
public void grantedLead(SpaceLifeCycleEvent event) {
Space space = event.getSpace();
final String activityMessage = "@" + event.getTarget() + " was granted manager role.";
recordActivity(event, activityMessage);
LOG.debug("user " + event.getTarget() + " was granted manager role of space " + space.getDisplayName());
}
/**
* {@inheritDoc}
*/
@Override
public void joined(SpaceLifeCycleEvent event) {
final String activityMessage = "@" + event.getTarget() + " has joined the space.";
recordActivity(event, activityMessage);
LOG.debug("user " + event.getTarget() + " joined space " + event.getSpace().getDisplayName());
}
/**
* {@inheritDoc}
*/
@Override
public void left(SpaceLifeCycleEvent event) {
final String activityMessage = "@" + event.getTarget() + " has left the space.";
recordActivity(event, activityMessage);
LOG.debug("user " + event.getTarget() + " has left of space " + event.getSpace().getDisplayName());
}
/**
* {@inheritDoc}
*/
@Override
public void revokedLead(SpaceLifeCycleEvent event) {
LOG.debug("user " + event.getTarget() + " was revoked lead privileges of space "
+ event.getSpace().getDisplayName());
}
/**
* Records an activity based on space lifecycle event and the activity message.
*
* @param event the space lifecycle event
* @param activityMessage the activity message
*/
private void recordActivity(SpaceLifeCycleEvent event, String activityMessage) {
Space space = event.getSpace();
try {
Identity spaceIdentity = identityManager.getOrCreateIdentity(SpaceIdentityProvider.NAME,
space.getPrettyName(),
false);
activityManager.recordActivity(spaceIdentity, SpaceService.SPACES_APP_ID, activityMessage);
} catch (Exception e) {
LOG.error("Failed to record activity: " + activityMessage, e);
}
}
}