package com.linkedin.thirdeye.datalayer.bao.jdbc;
import com.google.inject.Singleton;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections.CollectionUtils;
import com.linkedin.thirdeye.datalayer.bao.MetricConfigManager;
import com.linkedin.thirdeye.datalayer.dto.MetricConfigDTO;
import com.linkedin.thirdeye.datalayer.pojo.MetricConfigBean;
import com.linkedin.thirdeye.datalayer.util.Predicate;
@Singleton
public class MetricConfigManagerImpl extends AbstractManagerImpl<MetricConfigDTO>
implements MetricConfigManager {
private static final String FIND_BY_NAME_LIKE = " WHERE active = :active and name like :name";
public MetricConfigManagerImpl() {
super(MetricConfigDTO.class, MetricConfigBean.class);
}
@Override
public List<MetricConfigDTO> findByDataset(String dataset) {
Predicate predicate = Predicate.EQ("dataset", dataset);
return findByPredicate(predicate);
}
@Override
public List<MetricConfigDTO> findActiveByDataset(String dataset) {
Predicate datasetPredicate = Predicate.EQ("dataset", dataset);
Predicate activePredicate = Predicate.EQ("active", true);
Predicate predicate = Predicate.AND(datasetPredicate, activePredicate);
return findByPredicate(predicate);
}
@Override
public MetricConfigDTO findByMetricAndDataset(String metricName, String dataset) {
Predicate datasetPredicate = Predicate.EQ("dataset", dataset);
Predicate metricNamePredicate = Predicate.EQ("name", metricName);
List<MetricConfigBean> list = genericPojoDao.get(Predicate.AND(datasetPredicate, metricNamePredicate),
MetricConfigBean.class);
MetricConfigDTO result = null;
if (CollectionUtils.isNotEmpty(list)) {
result = MODEL_MAPPER.map(list.get(0), MetricConfigDTO.class);
}
return result;
}
public List<MetricConfigDTO> findByMetricName(String metricName) {
Predicate metricNamePredicate = Predicate.EQ("name", metricName);
return findByPredicate(metricNamePredicate);
}
@Override
public MetricConfigDTO findByAliasAndDataset(String alias, String dataset) {
Predicate datasetPredicate = Predicate.EQ("dataset", dataset);
Predicate aliasPredicate = Predicate.EQ("alias", alias);
List<MetricConfigBean> list = genericPojoDao.get(Predicate.AND(datasetPredicate, aliasPredicate),
MetricConfigBean.class);
MetricConfigDTO result = null;
if (CollectionUtils.isNotEmpty(list)) {
result = MODEL_MAPPER.map(list.get(0), MetricConfigDTO.class);
}
return result;
}
@Override
public List<MetricConfigDTO> findWhereNameLikeAndActive(String name) {
Map<String, Object> parameterMap = new HashMap<>();
parameterMap.put("name", name);
parameterMap.put("active", true);
List<MetricConfigBean> list =
genericPojoDao.executeParameterizedSQL(FIND_BY_NAME_LIKE, parameterMap, MetricConfigBean.class);
List<MetricConfigDTO> result = new ArrayList<>();
for (MetricConfigBean bean : list) {
result.add(MODEL_MAPPER.map(bean, MetricConfigDTO.class));
}
return result;
}
}