001package de.deepamehta.plugins.mail;
002
003import java.io.IOException;
004import java.net.URL;
005import java.util.logging.Logger;
006
007import org.apache.commons.mail.EmailException;
008import org.apache.commons.mail.HtmlEmail;
009import org.jsoup.Jsoup;
010import org.jsoup.nodes.Document;
011import org.jsoup.nodes.Element;
012
013import de.deepamehta.plugins.files.service.FilesService;
014
015class ImageCidEmbedment {
016
017    private static Logger log = Logger.getLogger(MailPlugin.class.getName());
018
019    private final FilesService fileService;
020
021    public ImageCidEmbedment(FilesService fileService) {
022        this.fileService = fileService;
023    }
024
025    /**
026     * Embed all images of body.
027     * 
028     * @return Document with CID replaced image source attributes.
029     */
030    public Document embedImages(HtmlEmail email, String body) throws EmailException, IOException {
031        int count = 0;
032        Document document = Jsoup.parse(body);
033        for (Element image : document.getElementsByTag("img")) {
034            URL url = new URL(image.attr("src"));
035            image.attr("src", "cid:" + embedImage(email, url, ++count + url.getPath()));
036        }
037        return document;
038    }
039
040    /**
041     * Embed any image type (external URL, file repository and plugin resource).
042     * 
043     * @return CID of embedded image.
044     * @throws EmailException
045     */
046    public String embedImage(HtmlEmail email, URL url, String name) throws EmailException {
047        String path = fileService.getRepositoryPath(url);
048        if (path != null) { // repository link
049            log.fine("embed repository image " + path);
050            return email.embed(fileService.getFile(path));
051        } else { // external URL
052            log.fine("embed external image " + url);
053            return email.embed(url, name);
054        }
055    }
056
057}