package org.exoplatform.ks.ext.impl;
import java.util.HashMap;
import java.util.Map;
import org.exoplatform.container.PortalContainer;
import org.exoplatform.container.xml.InitParams;
import org.exoplatform.portal.config.model.PortalConfig;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.exoplatform.social.core.activity.model.ExoSocialActivity;
import org.exoplatform.social.core.activity.model.ExoSocialActivityImpl;
import org.exoplatform.social.core.identity.model.Identity;
import org.exoplatform.social.core.identity.provider.OrganizationIdentityProvider;
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.model.Space;
import org.exoplatform.social.core.space.spi.SpaceService;
import org.exoplatform.social.core.storage.SpaceStorageException;
import org.exoplatform.wiki.mow.api.Page;
import org.exoplatform.wiki.service.WikiService;
import org.exoplatform.wiki.service.listener.PageWikiListener;
public class WikiSpaceActivityPublisher extends PageWikiListener {
public static final String WIKI_APP_ID = "ks-wiki:spaces";
public static final String ACTIVITY_TYPE_KEY = "act_key";
public static final String ADD_PAGE_TYPE = "add_page";
public static final String UPDATE_PAGE_TYPE = "update_page";
public static final String PAGE_ID_KEY = "page_id".intern();
public static final String PAGE_TYPE_KEY = "page_type".intern();
public static final String PAGE_OWNER_KEY = "page_owner".intern();
public static final String PAGE_TITLE_KEY = "page_name".intern();
public static final String URL_KEY = "page_url".intern();
private static Log LOG = ExoLogger.getExoLogger(WikiSpaceActivityPublisher.class);
private InitParams params;
public WikiSpaceActivityPublisher(InitParams params) {
this.params = params;
}
private void saveActivity(String wikiType, String wikiOwner, String pageId, Page page, String addType) throws Exception {
try {
Class.forName("org.exoplatform.social.core.space.spi.SpaceService");
} catch (ClassNotFoundException e) {
if (LOG.isDebugEnabled()) {
LOG.debug("eXo Social components not found!", e);
}
return;
}
if (!PortalConfig.GROUP_TYPE.equals(wikiType)) {
// this listener is only for group wiki page.
return;
}
WikiService wikiService = (WikiService) PortalContainer.getInstance().getComponentInstanceOfType(WikiService.class);
String groupId = "/" + wikiOwner;
SpaceService spaceService = (SpaceService) PortalContainer.getInstance().getComponentInstanceOfType(SpaceService.class);
Space space = null;
try {
space = spaceService.getSpaceByGroupId(groupId);
} catch (SpaceStorageException e) {
if (LOG.isDebugEnabled()) {
LOG.debug(String.format("Space %s not existed", groupId), e);
}
}
if (space == null)
return; // wiki group is not of a Social Space.
IdentityManager identityM = (IdentityManager) PortalContainer.getInstance().getComponentInstanceOfType(IdentityManager.class);
ActivityManager activityM = (ActivityManager) PortalContainer.getInstance().getComponentInstanceOfType(ActivityManager.class);
Identity spaceIdentity = identityM.getOrCreateIdentity(SpaceIdentityProvider.NAME, space.getPrettyName(), false);
Identity userIdentity = identityM.getOrCreateIdentity(OrganizationIdentityProvider.NAME, page.getAuthor(), false);
ExoSocialActivity activity = new ExoSocialActivityImpl();
activity.setUserId(userIdentity.getId());
activity.setTitle("title");
activity.setBody("body");
activity.setType(WIKI_APP_ID);
Map<String, String> templateParams = new HashMap<String, String>();
templateParams.put(PAGE_ID_KEY, pageId);
templateParams.put(ACTIVITY_TYPE_KEY, addType);
templateParams.put(PAGE_OWNER_KEY, wikiOwner);
templateParams.put(PAGE_TYPE_KEY, wikiType);
templateParams.put(PAGE_TITLE_KEY, page.getTitle());
templateParams.put(URL_KEY, page.getURL());
activity.setTemplateParams(templateParams);
activityM.saveActivity(spaceIdentity, activity);
}
@Override
public void postAddPage(String wikiType, String wikiOwner, String pageId, Page page) throws Exception {
saveActivity(wikiType, wikiOwner, pageId, page, ADD_PAGE_TYPE);
}
@Override
public void postDeletePage(String wikiType, String wikiOwner, String pageId, Page page) {
}
@Override
public void postUpdatePage(String wikiType, String wikiOwner, String pageId, Page page) throws Exception {
saveActivity(wikiType, wikiOwner, pageId, page, UPDATE_PAGE_TYPE);
}
}