package hudson.plugins.emailext;
import hudson.EnvVars;
import hudson.Extension;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.plugins.emailext.plugins.RecipientProvider;
import hudson.plugins.emailext.plugins.RecipientProviderDescriptor;
import org.jenkinsci.plugins.workflow.job.WorkflowJob;
import org.jenkinsci.plugins.workflow.steps.AbstractStepDescriptorImpl;
import org.jenkinsci.plugins.workflow.steps.AbstractStepImpl;
import org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution;
import org.jenkinsci.plugins.workflow.steps.StepContextParameter;
import org.kohsuke.stapler.DataBoundConstructor;
import javax.inject.Inject;
import javax.mail.internet.InternetAddress;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
public class EmailExtRecipientStep extends AbstractStepImpl {
private List<RecipientProvider> recipientProviders;
@DataBoundConstructor
public EmailExtRecipientStep(List<RecipientProvider> recipientProviders) {
this.recipientProviders = recipientProviders;
}
public List<RecipientProvider> getRecipientProviders() {
return recipientProviders;
}
@SuppressWarnings("WeakerAccess")
public static class Executor extends AbstractSynchronousNonBlockingStepExecution<String> {
private static final long serialVersionUID = 1L;
@Inject
private transient EmailExtRecipientStep step;
@StepContextParameter
private transient Run<?, ?> run;
@StepContextParameter
private transient TaskListener listener;
@StepContextParameter
private transient EnvVars env;
@Override
protected String run() throws Exception {
if (step.recipientProviders == null || step.recipientProviders.isEmpty()) {
throw new IllegalArgumentException("You must provide at least one recipient provider");
}
ExtendedEmailPublisher publisher = new ExtendedEmailPublisher();
ExtendedEmailPublisherContext context = new ExtendedEmailPublisherContext(publisher, run, null, null, listener);
Set<InternetAddress> to = new HashSet<>();
RecipientProvider.checkAllSupport(step.recipientProviders, run.getParent().getClass());
for (RecipientProvider provider : step.recipientProviders) {
provider.addRecipients(context, env, to, to, to);
}
StringBuilder rt = new StringBuilder();
Iterator<InternetAddress> iterator = to.iterator();
while (iterator.hasNext()) {
rt.append(iterator.next().toString());
if (iterator.hasNext()) {
rt.append(" ");
}
}
return rt.toString();
}
}
@Extension(optional = true)
public static final class DescriptorImpl extends AbstractStepDescriptorImpl {
public DescriptorImpl() {
super(Executor.class);
}
@Override
public String getFunctionName() {
return "emailextrecipients";
}
@Override
public String getDisplayName() {
return "Extended Email Recipients";
}
@SuppressWarnings("unused")
public List<RecipientProviderDescriptor> getRecipientProvidersDescriptors() {
return RecipientProvider.allSupporting(WorkflowJob.class);
}
}
}