/* * Copyright 2012 Research Studios Austria Forschungsges.m.b.H. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package won.bot.framework.component.needproducer.impl; import org.apache.commons.lang3.StringUtils; import org.apache.commons.mail.util.MimeMessageParser; import org.apache.jena.rdf.model.Model; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import won.bot.framework.component.needproducer.FileBasedNeedProducer; import won.protocol.model.NeedContentPropertyType; import won.protocol.model.NeedGraphType; import won.protocol.util.DefaultNeedModelWrapper; import javax.mail.internet.MimeMessage; import java.io.File; import java.io.FileInputStream; import java.io.IOException; /** * User: fkleedorfer * Date: 17.12.13 */ public class MailFileNeedProducer implements FileBasedNeedProducer { private final Logger logger = LoggerFactory.getLogger(getClass()); private NeedContentPropertyType needContentPropertyType = NeedContentPropertyType.IS_AND_SEEKS; public void setNeedContentPropertyType(NeedContentPropertyType needContentPropertyType) { this.needContentPropertyType = needContentPropertyType; } @Override public synchronized Model readNeedFromFile(final File file) throws IOException { logger.debug("processing as mail file: {} ", file); FileInputStream fis = new FileInputStream(file); DefaultNeedModelWrapper needModelWrapper = new DefaultNeedModelWrapper("no:uri"); try { MimeMessage emailMessage = new MimeMessage(null, fis); MimeMessageParser parser = new MimeMessageParser(emailMessage); parser.parse(); needModelWrapper.setTitle(needContentPropertyType, parser.getSubject()); String content = null; if (parser.hasPlainContent()){ content = parser.getPlainContent(); } else if (parser.hasHtmlContent()){ Document doc = Jsoup.parse(parser.getHtmlContent()); content = doc.text(); } if (content != null) { needModelWrapper.setDescription(needContentPropertyType, content); } logger.debug("mail subject : {}", parser.getSubject()); logger.debug("mail has plain content: {}", parser.hasPlainContent()); logger.debug("mail has html content : {}", parser.hasHtmlContent()); logger.debug("mail has attachments : {}", parser.hasAttachments()); logger.debug("mail plain content : {}", StringUtils.abbreviate(parser.getPlainContent(), 200)); logger.debug("mail html content : {}", StringUtils.abbreviate(parser.getHtmlContent(), 200)); return needModelWrapper.getNeedModel(NeedGraphType.NEED); } catch (Exception e) { logger.debug("could not parse email from file {} ", file, e); } finally { if (fis != null) fis.close(); } return null; } }