package com.linkedin.thirdeye.datalayer.bao.jdbc;
import com.google.inject.Singleton;
import java.util.ArrayList;
import java.util.List;
import com.linkedin.thirdeye.datalayer.bao.EmailConfigurationManager;
import com.linkedin.thirdeye.datalayer.dto.AnomalyFunctionDTO;
import com.linkedin.thirdeye.datalayer.dto.EmailConfigurationDTO;
import com.linkedin.thirdeye.datalayer.pojo.AnomalyFunctionBean;
import com.linkedin.thirdeye.datalayer.pojo.EmailConfigurationBean;
import com.linkedin.thirdeye.datalayer.util.Predicate;
@Deprecated
@Singleton
public class EmailConfigurationManagerImpl extends AbstractManagerImpl<EmailConfigurationDTO>
implements EmailConfigurationManager {
public EmailConfigurationManagerImpl() {
super(EmailConfigurationDTO.class, EmailConfigurationBean.class);
}
@Override
public Long save(EmailConfigurationDTO emailConfigurationDTO) {
if (emailConfigurationDTO.getId() != null) {
//TODO: throw exception and force the caller to call update instead
update(emailConfigurationDTO);
return emailConfigurationDTO.getId();
}
EmailConfigurationBean bean =
(EmailConfigurationBean) convertEmailConfigurationDTO2Bean(emailConfigurationDTO);
Long id = genericPojoDao.put(bean);
emailConfigurationDTO.setId(id);
return id;
}
private EmailConfigurationBean convertEmailConfigurationDTO2Bean(
EmailConfigurationDTO emailConfigurationDTO) {
EmailConfigurationBean emailConfigurationBean =
convertDTO2Bean(emailConfigurationDTO, EmailConfigurationBean.class);
List<Long> functionIds = new ArrayList<>();
for (AnomalyFunctionDTO function : emailConfigurationDTO.getFunctions()) {
functionIds.add(function.getId());
}
emailConfigurationBean.setFunctionIds(functionIds);
return emailConfigurationBean;
}
@Override
public int update(EmailConfigurationDTO emailConfigurationDTO) {
EmailConfigurationBean emailConfigurationBean =
(EmailConfigurationBean) convertEmailConfigurationDTO2Bean(emailConfigurationDTO);
return genericPojoDao.update(emailConfigurationBean);
}
@Override
public EmailConfigurationDTO findById(Long id) {
EmailConfigurationBean emailConfigurationBean =
genericPojoDao.get(id, EmailConfigurationBean.class);
if (emailConfigurationBean != null) {
EmailConfigurationDTO emailConfigurationDTO =
convertEmailConfigurationBean2DTO(emailConfigurationBean);
return emailConfigurationDTO;
}
return null;
}
private EmailConfigurationDTO convertEmailConfigurationBean2DTO(
EmailConfigurationBean emailConfigurationBean) {
EmailConfigurationDTO emailConfigurationDTO =
convertBean2DTO(emailConfigurationBean, EmailConfigurationDTO.class);
List<Long> functionIds = emailConfigurationBean.getFunctionIds();
if (functionIds != null && !functionIds.isEmpty()) {
List<AnomalyFunctionBean> list = genericPojoDao.get(functionIds, AnomalyFunctionBean.class);
List<AnomalyFunctionDTO> functions = new ArrayList<>();
for (AnomalyFunctionBean bean : list) {
AnomalyFunctionDTO dto = convertBean2DTO(bean, AnomalyFunctionDTO.class);
functions.add(dto);
}
emailConfigurationDTO.setFunctions(functions);
}
return emailConfigurationDTO;
}
@Override
public List<EmailConfigurationDTO> findByFunctionId(Long functionId) {
List<EmailConfigurationBean> list = genericPojoDao.getAll(EmailConfigurationBean.class);
List<EmailConfigurationDTO> result = new ArrayList<>();
for (EmailConfigurationBean bean : list) {
if (bean.getFunctionIds() != null && bean.getFunctionIds().contains(functionId)) {
EmailConfigurationDTO dto = convertEmailConfigurationBean2DTO(bean);
result.add(dto);
}
}
return result;
}
@Override
public List<EmailConfigurationDTO> findByCollectionMetric(String collection, String metric) {
Predicate predicate =
Predicate.AND(Predicate.EQ("collection", collection), Predicate.EQ("metric", metric));
List<EmailConfigurationBean> list = genericPojoDao.get(predicate, EmailConfigurationBean.class);
List<EmailConfigurationDTO> result = new ArrayList<>();
for (EmailConfigurationBean bean : list) {
EmailConfigurationDTO dto = convertEmailConfigurationBean2DTO(bean);
result.add(dto);
}
return result;
}
@Override
public List<EmailConfigurationDTO> findByCollection(String collection) {
Predicate predicate = Predicate.EQ("collection", collection);
List<EmailConfigurationBean> list = genericPojoDao.get(predicate, EmailConfigurationBean.class);
List<EmailConfigurationDTO> result = new ArrayList<>();
for (EmailConfigurationBean bean : list) {
EmailConfigurationDTO dto = convertEmailConfigurationBean2DTO(bean);
result.add(dto);
}
return result;
}
@Override
public List<EmailConfigurationDTO> findAll() {
List<EmailConfigurationDTO> beanList = super.findAll();
List<EmailConfigurationDTO> result = new ArrayList<>();
for (EmailConfigurationBean bean : beanList) {
EmailConfigurationDTO dto = convertEmailConfigurationBean2DTO(bean);
result.add(dto);
}
return result;
}
}