package com.atlassian.labs.speakeasy.product; import com.atlassian.confluence.mail.template.ConfluenceMailQueueItem; import com.atlassian.crowd.embedded.atlassianuser.EmbeddedCrowdUser; import com.atlassian.labs.speakeasy.util.PomProperties; import com.atlassian.mail.Email; import com.atlassian.mail.MailException; import com.atlassian.mail.MailFactory; import com.atlassian.mail.server.SMTPMailServer; import com.atlassian.sal.api.user.UserProfile; import com.atlassian.templaterenderer.TemplateRenderer; import com.atlassian.user.EntityException; import com.atlassian.user.User; import com.atlassian.user.UserManager; import org.netbeans.lib.cvsclient.commandLine.command.log; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.io.StringWriter; import java.util.Map; import static com.google.common.collect.Maps.newHashMap; /** * */ public class ConfluenceProductAccessor implements ProductAccessor { private final PomProperties pomProperties; private static final Logger log = LoggerFactory.getLogger(ConfluenceProductAccessor.class); private final UserManager userManager; private final TemplateRenderer templateRenderer; public ConfluenceProductAccessor(PomProperties pomProperties, UserManager userManager, TemplateRenderer templateRenderer) { this.pomProperties = pomProperties; this.userManager = userManager; this.templateRenderer = templateRenderer; } public String getSdkName() { return "confluence"; } public String getVersion() { return pomProperties.get("confluence.version"); } public String getDataVersion() { return pomProperties.get("confluence.data.version"); } public String getUserFullName(String username) { try { return userManager.getUser(username).getFullName(); } catch (EntityException e) { log.error("Unable to lookup user", e); return username; } } public void sendEmail(EmailOptions options) { try { String toName = options.getToName(); String toEmail = options.getToEmail(); if (options.getToUsername() != null) { User to = userManager.getUser(options.getToUsername()); if (to != null) { toName = to.getFullName(); toEmail = to.getEmail(); } else { log.warn("Cannot find profile for user '" + options.getToUsername()); return; } } Map<String,Object> context = newHashMap(options.getContext()); context.put("toFullName", toName); SMTPMailServer server = MailFactory.getServerManager().getDefaultSMTPMailServer(); Email email = new Email(toEmail); email.setFrom(options.getFromEmail()); email.setFromName(options.getFromName()); email.setSubject(render(options.getSubjectTemplate(), context)); email.setBody(render(options.getBodyTemplate(), context)); if (options.getReplyToEmail() != null) { email.setReplyTo(options.getReplyToEmail()); } server.send(email); } catch (MailException e) { log.error("Unable to send mail", e); } catch (EntityException e) { log.error("Unable to look up user for sending mail", e); } catch (IOException e) { log.error("Unable to send mail", e); } } public String getProfilePath() { return "/plugins/servlet/speakeasy/user"; } public String getTargetUsernameFromCondition(Map<String, Object> context) { Object user = context.get("targetUser"); if (user != null && user instanceof User) { return ((User)user).getName(); } return null; } private String render(String templateName, Map<String,Object> context) throws IOException { StringWriter writer = new StringWriter(); templateRenderer.render(templateName, context, writer); return writer.toString(); } }