| 1 | package fr.sii.ogham.email.sender.impl.javamail; | |
| 2 | ||
| 3 | import java.util.ArrayList; | |
| 4 | import java.util.List; | |
| 5 | import java.util.function.Predicate; | |
| 6 | ||
| 7 | import javax.mail.Multipart; | |
| 8 | import javax.mail.internet.MimePart; | |
| 9 | ||
| 10 | import fr.sii.ogham.core.message.content.Content; | |
| 11 | import fr.sii.ogham.core.util.PriorityComparator; | |
| 12 | import fr.sii.ogham.core.util.PriorizedMatchingHandler; | |
| 13 | import fr.sii.ogham.email.exception.handler.ContentHandlerException; | |
| 14 | import fr.sii.ogham.email.exception.handler.NoContentHandlerException; | |
| 15 | import fr.sii.ogham.email.message.Email; | |
| 16 | ||
| 17 | /** | |
| 18 |  * Provides a content handler based on the class of the content. | |
| 19 |  *  | |
| 20 |  * @author Aurélien Baudet | |
| 21 |  * | |
| 22 |  */ | |
| 23 | public class PriorizedContentHandler implements JavaMailContentHandler { | |
| 24 | ||
| 25 | 	/** | |
| 26 | 	 * The list of content handlers with corresponding matcher and priority | |
| 27 | 	 */ | |
| 28 | 	private List<PriorizedMatchingHandler<JavaMailContentHandler>> matchingHandlers; | |
| 29 | ||
| 30 | 	/** | |
| 31 | 	 * Initialize with the list of content handlers with matching predicate and | |
| 32 | 	 * priority. | |
| 33 | 	 *  | |
| 34 | 	 * Higher priority means that handler will be used first. | |
| 35 | 	 *  | |
| 36 | 	 * @param matchingHandlers | |
| 37 | 	 *            the list of content handlers with the associated content | |
| 38 | 	 *            matcher and priority | |
| 39 | 	 */ | |
| 40 | 	public PriorizedContentHandler(List<PriorizedMatchingHandler<JavaMailContentHandler>> matchingHandlers) { | |
| 41 | 		super(); | |
| 42 | 		this.matchingHandlers = matchingHandlers; | |
| 43 | 	} | |
| 44 | ||
| 45 | 	/** | |
| 46 | 	 * Initialize with an empty list | |
| 47 | 	 */ | |
| 48 | 	public PriorizedContentHandler() { | |
| 49 | 		this(new ArrayList<>()); | |
| 50 | 	} | |
| 51 | ||
| 52 | 	@Override | |
| 53 | 	public void setContent(MimePart message, Multipart multipart, Email email, Content content) throws ContentHandlerException { | |
| 54 | 		JavaMailContentHandler contentHandler = getContentHandler(content); | |
| 55 | 3
1. setContent : negated conditional → TIMED_OUT 2. setContent : negated conditional → KILLED 3. setContent : negated conditional → KILLED | 		if (contentHandler == null) { | 
| 56 | 			throw new NoContentHandlerException("there is no content handler defined for managing " + content.getClass().getSimpleName() + " content class", content); | |
| 57 | 		} | |
| 58 | 3
1. setContent : removed call to fr/sii/ogham/email/sender/impl/javamail/JavaMailContentHandler::setContent → TIMED_OUT 2. setContent : removed call to fr/sii/ogham/email/sender/impl/javamail/JavaMailContentHandler::setContent → KILLED 3. setContent : removed call to fr/sii/ogham/email/sender/impl/javamail/JavaMailContentHandler::setContent → KILLED | 		contentHandler.setContent(message, multipart, email, content); | 
| 59 | 	} | |
| 60 | ||
| 61 | 	/** | |
| 62 | 	 * Register a new content handler using the provided content matcher. | |
| 63 | 	 *  | |
| 64 | 	 * @param contentMatcher | |
| 65 | 	 *            the class of the content to match | |
| 66 | 	 * @param handler | |
| 67 | 	 *            the content handler to use if the class matches | |
| 68 | 	 * @param priority | |
| 69 | 	 *            the priority order (means that matching handler with higher | |
| 70 | 	 *            priority is used) | |
| 71 | 	 */ | |
| 72 | 	public void register(Predicate<Content> contentMatcher, JavaMailContentHandler handler, int priority) { | |
| 73 | 		matchingHandlers.add(new PriorizedMatchingHandler<>(contentMatcher, handler, priority)); | |
| 74 | 	} | |
| 75 | ||
| 76 | 	/** | |
| 77 | 	 * Register a new content handler using the provided content matcher. | |
| 78 | 	 *  | |
| 79 | 	 * The priority is the registration order (first registered has higher | |
| 80 | 	 * priority). | |
| 81 | 	 *  | |
| 82 | 	 * @param contentMatcher | |
| 83 | 	 *            the class of the content | |
| 84 | 	 * @param handler | |
| 85 | 	 *            the content handler | |
| 86 | 	 */ | |
| 87 | 	public void register(Predicate<Content> contentMatcher, JavaMailContentHandler handler) { | |
| 88 | 2
1. register : removed negation → NO_COVERAGE 2. register : removed call to fr/sii/ogham/email/sender/impl/javamail/PriorizedContentHandler::register → NO_COVERAGE | 		register(contentMatcher, handler, -matchingHandlers.size()); | 
| 89 | 	} | |
| 90 | ||
| 91 | 	/** | |
| 92 | 	 * Register a new content handler. The matching predicate is only based on | |
| 93 | 	 * the class. It means that if the class of the content is a sub-class of | |
| 94 | 	 * clazz parameter, then the associated handler is used. | |
| 95 | 	 *  | |
| 96 | 	 * @param clazz | |
| 97 | 	 *            the class of the content to match | |
| 98 | 	 * @param handler | |
| 99 | 	 *            the content handler to use if the class matches | |
| 100 | 	 * @param priority | |
| 101 | 	 *            the priority order (means that matching handler with higher | |
| 102 | 	 *            priority is used) | |
| 103 | 	 */ | |
| 104 | 	public void register(Class<? extends Content> clazz, JavaMailContentHandler handler, int priority) { | |
| 105 | 11
1. lambda$register$0 : replaced boolean return with false for fr/sii/ogham/email/sender/impl/javamail/PriorizedContentHandler::lambda$register$0 → TIMED_OUT 2. lambda$register$0 : replaced boolean return with true for fr/sii/ogham/email/sender/impl/javamail/PriorizedContentHandler::lambda$register$0 → TIMED_OUT 3. lambda$register$0 : replaced boolean return with false for fr/sii/ogham/email/sender/impl/javamail/PriorizedContentHandler::lambda$register$0 → KILLED 4. lambda$register$0 : replaced boolean return with false for fr/sii/ogham/email/sender/impl/javamail/PriorizedContentHandler::lambda$register$0 → KILLED 5. lambda$register$0 : replaced boolean return with false for fr/sii/ogham/email/sender/impl/javamail/PriorizedContentHandler::lambda$register$0 → KILLED 6. lambda$register$0 : replaced boolean return with true for fr/sii/ogham/email/sender/impl/javamail/PriorizedContentHandler::lambda$register$0 → KILLED 7. lambda$register$0 : replaced boolean return with true for fr/sii/ogham/email/sender/impl/javamail/PriorizedContentHandler::lambda$register$0 → KILLED 8. register : removed call to fr/sii/ogham/email/sender/impl/javamail/PriorizedContentHandler::register → KILLED 9. register : removed call to fr/sii/ogham/email/sender/impl/javamail/PriorizedContentHandler::register → KILLED 10. register : removed call to fr/sii/ogham/email/sender/impl/javamail/PriorizedContentHandler::register → KILLED 11. register : removed call to fr/sii/ogham/email/sender/impl/javamail/PriorizedContentHandler::register → KILLED | 		register(c -> clazz.isAssignableFrom(c.getClass()), handler, priority); | 
| 106 | 	} | |
| 107 | ||
| 108 | 	/** | |
| 109 | 	 * Register a new content handler. The matching predicate is only based on | |
| 110 | 	 * the class. It means that if the class of the content is a sub-class of | |
| 111 | 	 * clazz parameter, then the associated handler is used. | |
| 112 | 	 *  | |
| 113 | 	 * The priority is the registration order (first registered has higher | |
| 114 | 	 * priority). | |
| 115 | 	 *  | |
| 116 | 	 * @param clazz | |
| 117 | 	 *            the class of the content | |
| 118 | 	 * @param handler | |
| 119 | 	 *            the content handler | |
| 120 | 	 */ | |
| 121 | 	public void register(Class<? extends Content> clazz, JavaMailContentHandler handler) { | |
| 122 | 7
1. register : removed negation → SURVIVED 2. register : removed negation → TIMED_OUT 3. register : removed negation → KILLED 4. register : removed call to fr/sii/ogham/email/sender/impl/javamail/PriorizedContentHandler::register → KILLED 5. register : removed call to fr/sii/ogham/email/sender/impl/javamail/PriorizedContentHandler::register → KILLED 6. register : removed call to fr/sii/ogham/email/sender/impl/javamail/PriorizedContentHandler::register → KILLED 7. register : removed call to fr/sii/ogham/email/sender/impl/javamail/PriorizedContentHandler::register → KILLED | 		register(clazz, handler, -matchingHandlers.size()); | 
| 123 | 	} | |
| 124 | ||
| 125 | 	private JavaMailContentHandler getContentHandler(Content content) { | |
| 126 | 2
1. getContentHandler : removed call to java/util/List::sort → SURVIVED 2. getContentHandler : removed call to java/util/List::sort → TIMED_OUT | 		matchingHandlers.sort(new PriorityComparator<>(PriorizedMatchingHandler::getPriority)); | 
| 127 | 		for (PriorizedMatchingHandler<JavaMailContentHandler> entry : matchingHandlers) { | |
| 128 | 3
1. getContentHandler : negated conditional → TIMED_OUT 2. getContentHandler : negated conditional → KILLED 3. getContentHandler : negated conditional → KILLED | 			if (entry.matches(content)) { | 
| 129 | 3
1. getContentHandler : replaced return value with null for fr/sii/ogham/email/sender/impl/javamail/PriorizedContentHandler::getContentHandler → TIMED_OUT 2. getContentHandler : replaced return value with null for fr/sii/ogham/email/sender/impl/javamail/PriorizedContentHandler::getContentHandler → KILLED 3. getContentHandler : replaced return value with null for fr/sii/ogham/email/sender/impl/javamail/PriorizedContentHandler::getContentHandler → KILLED | 				return entry.getHandler(); | 
| 130 | 			} | |
| 131 | 		} | |
| 132 | 		return null; | |
| 133 | 	} | |
| 134 | } | |
| Mutations | ||
| 55 | 1.1 2.2 3.3 | |
| 58 | 1.1 2.2 3.3 | |
| 88 | 1.1 2.2 | |
| 105 | 1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8 9.9 10.10 11.11 | |
| 122 | 1.1 2.2 3.3 4.4 5.5 6.6 7.7 | |
| 126 | 1.1 2.2 | |
| 128 | 1.1 2.2 3.3 | |
| 129 | 1.1 2.2 3.3 |