package org.agnitas.emm.core.binding.service.impl; import java.util.List; import javax.annotation.Resource; import org.agnitas.beans.BindingEntry; import org.agnitas.dao.BindingEntryDao; import org.agnitas.dao.MailingDao; import org.agnitas.dao.MailinglistDao; import org.agnitas.dao.RecipientDao; import org.agnitas.emm.core.binding.service.BindingModel; import org.agnitas.emm.core.binding.service.BindingNotExistException; import org.agnitas.emm.core.binding.service.BindingService; import org.agnitas.emm.core.mailing.service.MailingNotExistException; import org.agnitas.emm.core.mailinglist.service.MailinglistNotExistException; import org.agnitas.emm.core.recipient.service.RecipientNotExistException; import org.agnitas.emm.core.validator.annotation.Validate; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.transaction.annotation.Transactional; public class BindingServiceImpl implements BindingService, ApplicationContextAware { @Resource(name="BindingEntryDao") private BindingEntryDao bindingEntryDao; @Resource(name="MailinglistDao") private MailinglistDao mailinglistDao; @Resource(name="RecipientDao") private RecipientDao recipientDao; @Resource(name="MailingDao") protected MailingDao mailingDao; private ApplicationContext applicationContext; @Override @Transactional(readOnly = true) @Validate("getBinding") public BindingEntry getBinding(BindingModel model) { BindingEntry bindingEntry = bindingEntryDao.get(model.getCustomerId(), model.getCompanyId(), model.getMailinglistId(), model.getMediatype()); if (bindingEntry == null) { throw new BindingNotExistException(); } return bindingEntry; } @Override @Transactional @Validate("setBinding") public void setBinding(BindingModel model) { if (!mailinglistDao.exist(model.getMailinglistId(), model.getCompanyId())) { throw new MailinglistNotExistException(); } if (!recipientDao.exist(model.getCustomerId(), model.getCompanyId())) { throw new RecipientNotExistException(); } if (model.getExitMailingId() != 0 && !mailingDao.exist(model.getExitMailingId(), model.getCompanyId())) { throw new MailingNotExistException(); } BindingEntry binding = bindingEntryDao.get(model.getCustomerId(), model.getCompanyId(), model.getMailinglistId(), model.getMediatype()); if(binding == null) { binding = (BindingEntry) applicationContext.getBean("BindingEntry"); binding.setCustomerID(model.getCustomerId()); binding.setMailinglistID(model.getMailinglistId()); binding.setMediaType(model.getMediatype()); } binding.setUserStatus(model.getStatus()); binding.setUserType(model.getUserType()); binding.setExitMailingID(model.getExitMailingId()); binding.setUserRemark(model.getRemark()); bindingEntryDao.save(model.getCompanyId(), binding); } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } @Override @Transactional @Validate("getBinding") public void deleteBinding(BindingModel model) { if (!bindingEntryDao.exist(model.getCustomerId(), model.getCompanyId(), model.getMailinglistId(), model.getMediatype())) { throw new BindingNotExistException(); } bindingEntryDao.delete(model.getCustomerId(), model.getCompanyId(), model.getMailinglistId(), model.getMediatype()); } @Override @Transactional(readOnly = true) @Validate("listBinding") public List<BindingEntry> getBindings(BindingModel model) { if (!recipientDao.exist(model.getCustomerId(), model.getCompanyId())) { throw new RecipientNotExistException(); } return bindingEntryDao.getBindings(model.getCompanyId(), model.getCustomerId()); } }