ContentIdPredicate.java
package fr.sii.ogham.testing.assertion.filter;
import static java.util.Collections.list;
import java.util.function.Predicate;
import javax.mail.Header;
import javax.mail.MessagingException;
import javax.mail.Part;
/**
 * Predicate that matches the {@link Part} only if {@link Part#getAllHeaders()}
 * contains a {@code Content-ID} header that exactly matches the provided
 * Content-ID.
 * 
 * @author Aurélien Baudet
 *
 */
public class ContentIdPredicate implements Predicate<Part> {
	private final String contentId;
	public ContentIdPredicate(String contentId) {
		super();
		this.contentId = contentId;
	}
	@Override
	public boolean test(Part input) {
		try {
			// @formatter:off
			return list(input.getMatchingHeaders(new String[] { "Content-ID" }))
					.stream()
					.map(Header::getValue)
					.anyMatch(contentId::equals);
			// @formatter:on
		} catch (MessagingException e) {
			throw new AssertionError("Failed to access message", e);
		}
	}
	@Override
	public String toString() {
		return "having Content-ID header '" + contentId + "'";
	}
}