/** * Copyright 2011 the original author or authors. * * 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 org.bricket.plugin.contact.service.impl; import java.util.List; import javax.annotation.Resource; import org.bricket.plugin.contact.domain.ContactMessage; import org.bricket.plugin.contact.repository.ContactMessageDao; import org.bricket.plugin.contact.service.ContactMessageService; import org.bricket.plugin.contact.web.ContactFormConfig; import org.bricket.plugin.mail.domain.MailPlugin; import org.bricket.plugin.mail.service.MailPluginService; import org.bricket.plugin.mail.service.MailServiceException; import org.bricket.service.BricketServiceException; import org.bricket.service.BricketServiceImpl; import org.bricket.service.UncheckedRuntimeException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.SimpleMailMessage; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * @author Ingo Renner * @author Henning Teek * */ @Service(value = "contactMessageService") @Transactional(readOnly = true) public class ContactMessageServiceImpl extends BricketServiceImpl implements ContactMessageService { private final Logger log = LoggerFactory.getLogger(ContactMessageServiceImpl.class); private boolean testmode = false; public boolean isTestmode() { return testmode; } public void setTestmode(boolean testmode) { this.testmode = testmode; } @Autowired private MailPluginService mailPluginService; @Resource private ContactMessageDao contactMessageDao; @Override protected void onInit() { log.info("contactMessage service initialized"); } // MailService @Override @Transactional(noRollbackFor = MailServiceException.class) public ContactMessage saveContactMessage(ContactFormConfig config, ContactMessage contactMessage) { contactMessage.setId(null); // Make sure an new message is saved. sendMail(config, contactMessage); return contactMessageDao.save(contactMessage); } // MailService @Override @Transactional(noRollbackFor = MailServiceException.class) public ContactMessage updateContactMessage(ContactFormConfig config, ContactMessage contactMessage) { if (contactMessage.isNew()) { throw new UncheckedRuntimeException( "contactMessage is new, can't update. Please use saveContactMessage(...)."); } sendMail(config, contactMessage); return contactMessageDao.save(contactMessage); } private void sendMail(ContactFormConfig config, ContactMessage contactMessage) { SimpleMailMessage mailMsg = new SimpleMailMessage(); mailMsg.setTo(config.getTo()); if (config.getCc() != null && !"".equals(config.getCc())) { mailMsg.setCc(config.getCc()); } mailMsg.setFrom(config.getFrom()); mailMsg.setSubject(config.getSubject()); mailMsg.setText(contactMessage.getMessage()); try { if (!isTestmode()) { mailPluginService.send(mailMsg); } contactMessage.setStatus(ContactMessageStatus.OK); } catch (BricketServiceException e) { log.error(e.getMessage(), e); contactMessage.setStatus(ContactMessageStatus.ERROR); final MailPlugin m = mailPluginService.loadMailPlugin(); final StringBuilder sb = new StringBuilder(); sb.append("Mailserver: ").append(m == null ? "null" : m.getDefaultMailserver().getName()).append("\n") .append("Error: ").append(e.getCause().getMessage()); contactMessage.setErrorMsg(sb.toString()); } } @Override @Transactional public void deleteContactMessage(ContactMessage contactMessage) { contactMessageDao.delete(contactMessageDao.readByPrimaryKey(contactMessage.getId())); } @Override public ContactMessage loadContactMessage(Long id) { return contactMessageDao.readByPrimaryKey(id); } @Override public List<ContactMessage> loadAllContactMessage() { return contactMessageDao.readAll(); } @Override public ContactMessage createDomainObject() { return new ContactMessage(); } @Override public List<ContactMessage> saveContactMessages(List<ContactMessage> contactMessages) { throw new UncheckedRuntimeException("not implemented"); } }