package hudson.plugins.emailext.plugins; import hudson.DescriptorExtensionList; import hudson.EnvVars; import hudson.ExtensionPoint; import hudson.model.AbstractDescribableImpl; import hudson.model.Job; import hudson.plugins.emailext.ExtendedEmailPublisherContext; import jenkins.model.Jenkins; import org.jsoup.helper.StringUtil; import javax.annotation.Nonnull; import javax.mail.internet.InternetAddress; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.TreeSet; import java.util.logging.Level; import java.util.logging.Logger; /** * Created by acearl on 12/24/13. */ public abstract class RecipientProvider extends AbstractDescribableImpl<RecipientProvider> implements ExtensionPoint { private static final Logger LOG = Logger.getLogger(RecipientProvider.class.getName()); public static DescriptorExtensionList<RecipientProvider, RecipientProviderDescriptor> all() { return Jenkins.getActiveInstance().getDescriptorList(RecipientProvider.class); } public static List<RecipientProviderDescriptor> allSupporting(Class<? extends Job> clazz) { List<RecipientProviderDescriptor> rt = new ArrayList<>(); for (RecipientProviderDescriptor recipientProviderDescriptor : all()) { try { if (recipientProviderDescriptor.isApplicable(clazz)) { rt.add(recipientProviderDescriptor); } } catch (Exception ex) { LOG.log(Level.WARNING, MessageFormat.format("Exception checking if {0} supports {1}, skipping", recipientProviderDescriptor.getDisplayName(), clazz.getName()), ex); } } return rt; } public static void checkAllSupport(@Nonnull List<? extends RecipientProvider> providers, Class<? extends Job> clazz) { Set<String> notSupported = new TreeSet<>(); for (RecipientProvider provider : providers) { if (!provider.getDescriptor().isApplicable(clazz)) { notSupported.add(provider.getClass().getName()); } } if (!notSupported.isEmpty()) { throw new IllegalArgumentException(MessageFormat. format("The following recipient providers do not support {0} {1}", clazz.getName(), StringUtil.join(notSupported, ", "))); } } @Override public RecipientProviderDescriptor getDescriptor() { return (RecipientProviderDescriptor) super.getDescriptor(); } public abstract void addRecipients(ExtendedEmailPublisherContext context, EnvVars env, Set<InternetAddress> to, Set<InternetAddress> cc, Set<InternetAddress> bcc); }