/**
* 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");
}
}