package com.atlassian.labs.speakeasy.product;
import com.atlassian.jira.ManagerFactory;
import com.atlassian.jira.mail.Email;
import com.atlassian.labs.speakeasy.util.PomProperties;
import com.atlassian.mail.queue.SingleMailQueueItem;
import com.atlassian.sal.api.user.UserManager;
import com.atlassian.sal.api.user.UserProfile;
import com.atlassian.templaterenderer.TemplateRenderer;
import com.atlassian.user.User;
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 JiraProductAccessor implements ProductAccessor
{
private final PomProperties pomProperties;
private final Logger log = LoggerFactory.getLogger(JiraProductAccessor.class);
private final TemplateRenderer templateRenderer;
private final UserManager userManager;
public JiraProductAccessor(PomProperties pomProperties, TemplateRenderer templateRenderer, UserManager userManager)
{
this.pomProperties = pomProperties;
this.templateRenderer = templateRenderer;
this.userManager = userManager;
}
public String getSdkName()
{
return "jira";
}
public String getVersion()
{
return pomProperties.get("jira.version");
}
public String getDataVersion()
{
return pomProperties.get("jira.data.version");
}
public void sendEmail(EmailOptions options)
{
try
{
String toName = options.getToName();
String toEmail = options.getToEmail();
if (options.getToUsername() != null)
{
UserProfile toUser = userManager.getUserProfile(options.getToUsername());
if (toUser != null)
{
toName = toUser.getFullName();
toEmail = toUser.getEmail();
}
else
{
log.warn("Cannot find profile for user '" + options.getToUsername());
return;
}
}
Map<String,Object> context = newHashMap(options.getContext());
context.put("toFullName", toName);
Email email = new Email(toEmail);
email.setFromName(options.getFromName());
email.setFrom(options.getFromEmail());
email.setSubject(render(options.getSubjectTemplate(), context));
email.setBody(render(options.getBodyTemplate(), context));
if (options.getReplyToEmail() != null)
{
email.setReplyTo(options.getReplyToEmail());
}
SingleMailQueueItem item = new SingleMailQueueItem(email);
item.setMailThreader(null);
ManagerFactory.getMailQueue().addItem(item);
if (Boolean.getBoolean("atlassian.dev.mode"))
{
ManagerFactory.getMailQueue().sendBuffer();
}
}
catch (IOException e)
{
log.error("Unable to send email", e);
}
}
public String getProfilePath()
{
return "/secure/ViewProfile.jspa#selectedTab=com.atlassian.labs.speakeasy-plugin:speakeasy-plugins";
}
public String getTargetUsernameFromCondition(Map<String, Object> context)
{
// JIRA doesn't pass the user of the profile you are looking at in the context
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();
}
}