package com.takefive.plugins.jira.wechat.listener; import org.apache.log4j.Logger; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import com.atlassian.event.api.EventListener; import com.atlassian.event.api.EventPublisher; import com.atlassian.jira.event.issue.IssueEvent; import com.atlassian.jira.event.type.EventType; import com.atlassian.jira.issue.Issue; import com.atlassian.sal.api.message.I18nResolver; import com.atlassian.sal.api.pluginsettings.PluginSettingsFactory; import com.atlassian.sal.api.user.UserManager; import com.takefive.plugins.jira.wechat.api.ConnectionException; import com.takefive.plugins.jira.wechat.api.WeChatActiveConnection; import com.takefive.plugins.jira.wechat.api.template.Article; import com.takefive.plugins.jira.wechat.api.template.NewsMessage; import com.takefive.plugins.jira.wechat.configuration.UserInfoAccess; import com.takefive.plugins.jira.wechat.configuration.template.UserInfo; import com.takefive.plugins.jira.wechat.util.URLAssembler; public class IssueCreatedUpdatedListener implements InitializingBean, DisposableBean { private final Logger logger = Logger.getLogger(IssueCreatedUpdatedListener.class); private final EventPublisher eventPublisher; private final PluginSettingsFactory pluginSettingsFactory; private final UserManager userManager; private final I18nResolver i18nResolver; private final WeChatActiveConnection activeConnection; private final UserInfoAccess userInfoAccess; private final String username; public IssueCreatedUpdatedListener(EventPublisher eventPublisher, PluginSettingsFactory pluginSettingsFactory, UserManager userManager, I18nResolver i18nResolver) { this.eventPublisher = eventPublisher; this.pluginSettingsFactory = pluginSettingsFactory; this.userManager = userManager; this.i18nResolver = i18nResolver; this.activeConnection = new WeChatActiveConnection(this.pluginSettingsFactory); this.username = this.userManager.getRemoteUsername(); this.userInfoAccess = new UserInfoAccess(this.pluginSettingsFactory); } @EventListener public void onIssueEvent(IssueEvent event) { logger.debug("Issue event called"); /* Check whether WeChat ID is set. * If yes, continue. * If not, return. */ if (!userInfoAccess.hasUserInfo(username)) return; long eventTypeId = event.getEventTypeId(); String title = ""; String description = ""; if (eventTypeId == EventType.ISSUE_CREATED_ID) { logger.debug("Issue created"); title = i18nResolver.getText("issue-created.title"); description = i18nResolver.getText("issue-created.description"); } else if (eventTypeId == EventType.ISSUE_UPDATED_ID) { logger.debug("Issue updated"); title = i18nResolver.getText("issue-updated.title"); description = i18nResolver.getText("issue-updated.description"); } else if (eventTypeId == EventType.ISSUE_CLOSED_ID) { logger.debug("Issue closed"); title = i18nResolver.getText("issue-closed.title"); description = i18nResolver.getText("issue-closed.description"); } Issue issue = event.getIssue(); NewsMessage message = new NewsMessage(); message.addArticle(new Article(title, description, URLAssembler.toIssueURL(issue.getKey()))); UserInfo userInfo = userInfoAccess.getUserInfo(username); message.addRecipient(userInfo.getUserId()); try { activeConnection.sendMessage(message); } catch (ConnectionException e) { logger.error("Connection error: " + e.getMessage()); e.printStackTrace(); } } @Override public void afterPropertiesSet() throws Exception { eventPublisher.register(this); } @Override public void destroy() throws Exception { eventPublisher.unregister(this); } }