/* * 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.ks.ext.impl; import java.util.HashMap; import java.util.Map; import org.exoplatform.container.ExoContainer; import org.exoplatform.container.ExoContainerContext; import org.exoplatform.faq.service.Answer; import org.exoplatform.faq.service.Comment; import org.exoplatform.faq.service.FAQService; import org.exoplatform.faq.service.Question; import org.exoplatform.faq.service.Utils; import org.exoplatform.faq.service.impl.AnswerEventListener; 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; /** * @author <a href="mailto:patrice.lamarque@exoplatform.com">Patrice * Lamarque</a> * @version $Revision$ */ public class AnswersSpaceActivityPublisher extends AnswerEventListener { public static final String SPACE_APP_ID = "ks-answer:spaces"; public static final String QUESTION_ID_KEY = "QuestionId"; public static final String ANSWER_ID_KEY = "AnswerId"; public static final String COMMENT_ID_KEY = "CommentId"; public static final String ACTIVITY_TYPE_KEY = "ActivityType"; public static final String AUTHOR_KEY = "Author"; public static final String LINK_KEY = "Link"; public static final String QUESTION_NAME_KEY = "Name"; public static final String LANGUAGE_KEY = "Language"; public static final String ANSWER = "Answer"; public static final String QUESTION = "Question"; public static final String COMMENT = "Comment"; public static final String ANSWER_ADD = ANSWER + "Add"; public static final String QUESTION_ADD = QUESTION + "Add"; public static final String COMMENT_ADD = COMMENT + "Add"; public static final String ANSWER_UPDATE = ANSWER + "Update"; public static final String QUESTION_UPDATE = QUESTION + "Update"; public static final String COMMENT_UPDATE = COMMENT + "Update"; private static Log LOG = ExoLogger.getExoLogger(AnswerEventListener.class); @Override public void saveAnswer(String questionId, Answer answer, boolean isNew) { try { Class.forName("org.exoplatform.social.core.manager.IdentityManager"); FAQService faqS = (FAQService) ExoContainerContext.getCurrentContainer() .getComponentInstanceOfType(FAQService.class); Question q = faqS.getQuestionById(questionId); String catId = q.getCategoryId(); if (catId == null || catId.indexOf(Utils.CATE_SPACE_ID_PREFIX) < 0) { return; } if (!q.isActivated() || !q.isApproved() || !answer.getApprovedAnswers() || !answer.getActivateAnswers()) { // Do not make activity if the question is not activated or approved or the answer is that also. return; } //TODO resource bundle needed String msg = "@"+answer.getResponseBy(); String body = answer.getResponses(); String spaceId = catId.split(Utils.CATE_SPACE_ID_PREFIX)[1]; ExoContainer exoContainer = ExoContainerContext.getCurrentContainer(); IdentityManager identityM = (IdentityManager) exoContainer.getComponentInstanceOfType(IdentityManager.class); ActivityManager activityM = (ActivityManager) exoContainer.getComponentInstanceOfType(ActivityManager.class); SpaceService spaceService = (SpaceService)exoContainer.getComponentInstanceOfType(SpaceService.class); Space space = spaceService.getSpaceById(spaceId); Identity spaceIdentity = identityM.getOrCreateIdentity(SpaceIdentityProvider.NAME, space.getPrettyName(), false); Identity userIdentity = identityM.getOrCreateIdentity(OrganizationIdentityProvider.NAME, answer.getResponseBy(), false); ExoSocialActivity activity = new ExoSocialActivityImpl(); activity.setUserId(userIdentity.getId()); activity.setTitle(msg); activity.setBody(body); activity.setType(SPACE_APP_ID); Map<String, String> params = new HashMap<String, String>(); params.put(QUESTION_ID_KEY, questionId); params.put(ACTIVITY_TYPE_KEY, isNew ? ANSWER_ADD : ANSWER_UPDATE); params.put(ANSWER_ID_KEY, answer.getId()); params.put(AUTHOR_KEY, answer.getResponseBy()); params.put(QUESTION_NAME_KEY, q.getQuestion()); params.put(LINK_KEY, q.getLink()); params.put(LANGUAGE_KEY, q.getLanguage()); activity.setTemplateParams(params); activityM.saveActivityNoReturn(spaceIdentity, activity); } catch (ClassNotFoundException e) { if (LOG.isDebugEnabled()) LOG.debug("Please check the integrated project does the social deploy? " + e.getMessage()); } catch (Exception e) { LOG.error("Can not record Activity for space when post answer " + e.getMessage()); } } @Override public void saveComment(String questionId, Comment comment, boolean isNew) { /*try { Class.forName("org.exoplatform.social.core.manager.IdentityManager"); FAQService faqS = (FAQService) ExoContainerContext.getCurrentContainer() .getComponentInstanceOfType(FAQService.class); Question q = faqS.getQuestionById(questionId); String catId = q.getCategoryId(); if (catId == null || catId.indexOf(Utils.CATE_SPACE_ID_PREFIX) < 0) { return; } //TODO resource bundle needed // String msg = "@"+comment.getCommentBy() + " has commented: <a href=" + q.getLink() + ">" // + q.getQuestion() + "</a>"; String msg = "@" + comment.getCommentBy(); String body = comment.getComments(); String spaceId = catId.split(Utils.CATE_SPACE_ID_PREFIX)[1]; IdentityManager indentityM = (IdentityManager) ExoContainerContext.getCurrentContainer() .getComponentInstanceOfType(IdentityManager.class); ActivityManager activityM = (ActivityManager) ExoContainerContext.getCurrentContainer() .getComponentInstanceOfType(ActivityManager.class); // SpaceService spaceS = (SpaceService) // ExoContainerContext.getCurrentContainer().getComponentInstanceOfType(SpaceService.class); // Space space = spaceS.getSpaceById(spaceId) ; Identity spaceIdentity = indentityM.getOrCreateIdentity(SpaceIdentityProvider.NAME, spaceId, false); Activity activity = new Activity(); activity.setTitle(msg); activity.setBody(body); activity.setType(SPACE_APP_ID); Map<String, String> params = new HashMap<String, String>(); params.put(QUESTION_ID_KEY, questionId); params.put(ACTIVITY_TYPE_KEY, isNew ? COMMENT_ADD : COMMENT_UPDATE); params.put(COMMENT_ID_KEY, comment.getId()); params.put(AUTHOR_KEY, comment.getCommentBy()); params.put(QUESTION_NAME_KEY, q.getQuestion()); params.put(LINK_KEY, q.getLink()); params.put(LANGUAGE_KEY, q.getLanguage()); activity.setTemplateParams(params); activityM.recordActivity(spaceIdentity, activity); } catch (ClassNotFoundException e) { if (LOG.isDebugEnabled()) LOG.debug("Please check the integrated project does the social deploy? " + e.getMessage()); } catch (Exception e) { LOG.error("Can not record Activity for space when add comment " + e.getMessage()); }*/ } @Override public void saveQuestion(Question question, boolean isNew) { try { Class.forName("org.exoplatform.social.core.manager.IdentityManager"); String catId = question.getCategoryId(); if (catId == null || catId.indexOf(Utils.CATE_SPACE_ID_PREFIX) < 0) { return; } if (!question.isActivated() || !question.isApproved()) { // filter the question if it is not approved or not activated. return; } //TODO resource bundle needed String msg = "@"+question.getAuthor(); String body = question.getDetail(); String spaceId = catId.split(Utils.CATE_SPACE_ID_PREFIX)[1]; if(spaceId.indexOf("/") > 0) spaceId = spaceId.substring(0, spaceId.indexOf("/")); ExoContainer exoContainer = ExoContainerContext.getCurrentContainer(); IdentityManager identityM = (IdentityManager) exoContainer.getComponentInstanceOfType(IdentityManager.class); ActivityManager activityM = (ActivityManager) exoContainer.getComponentInstanceOfType(ActivityManager.class); SpaceService spaceService = (SpaceService)exoContainer.getComponentInstanceOfType(SpaceService.class); Space space = spaceService.getSpaceById(spaceId); Identity spaceIdentity = identityM.getOrCreateIdentity(SpaceIdentityProvider.NAME,space.getPrettyName(), false); Identity userIdentity = identityM.getOrCreateIdentity(OrganizationIdentityProvider.NAME, question.getAuthor(), false); ExoSocialActivity activity = new ExoSocialActivityImpl(); activity.setUserId(userIdentity.getId()); activity.setTitle(msg); activity.setBody(body); activity.setType(SPACE_APP_ID); Map<String, String> params = new HashMap<String, String>(); params.put(QUESTION_ID_KEY, question.getId()); params.put(ACTIVITY_TYPE_KEY, isNew ? QUESTION_ADD : QUESTION_UPDATE); params.put(QUESTION_NAME_KEY, question.getQuestion()); params.put(LINK_KEY, question.getLink()); params.put(LANGUAGE_KEY, question.getLanguage()); activity.setTemplateParams(params); activityM.saveActivityNoReturn(spaceIdentity, activity); } catch (ClassNotFoundException e) { if (LOG.isDebugEnabled()) LOG.debug("Please check the integrated project does the social deploy? " + e.getMessage()); } catch (Exception e) { e.printStackTrace(); LOG.error("Can not record Activity for space when add new questin " + e.getMessage()); } } @Override public void saveAnswer(String questionId, Answer[] answers, boolean isNew) { try { Class.forName("org.exoplatform.social.core.manager.IdentityManager"); FAQService faqS = (FAQService) ExoContainerContext.getCurrentContainer() .getComponentInstanceOfType(FAQService.class); Question q = faqS.getQuestionById(questionId); String catId = q.getCategoryId(); if (catId == null || catId.indexOf(Utils.CATE_SPACE_ID_PREFIX) < 0) { return; } if (answers != null) { for (Answer a : answers) { saveAnswer(questionId, a, isNew); } } } catch (ClassNotFoundException e) { if (LOG.isDebugEnabled()) LOG.debug("Please check the integrated project does the social deploy? " + e.getMessage()); } catch (Exception e) { LOG.error("Can not record Activity for space when post answer " + e.getMessage()); } } }