package com.linkedin.thirdeye.datalayer.bao.jdbc;
import com.google.inject.Singleton;
import java.util.List;
import org.apache.commons.collections.CollectionUtils;
import com.linkedin.thirdeye.datalayer.bao.DataCompletenessConfigManager;
import com.linkedin.thirdeye.datalayer.dto.DataCompletenessConfigDTO;
import com.linkedin.thirdeye.datalayer.pojo.DataCompletenessConfigBean;
import com.linkedin.thirdeye.datalayer.util.Predicate;
@Singleton
public class DataCompletenessConfigManagerImpl extends AbstractManagerImpl<DataCompletenessConfigDTO> implements DataCompletenessConfigManager {
public DataCompletenessConfigManagerImpl() {
super(DataCompletenessConfigDTO.class, DataCompletenessConfigBean.class);
}
@Override
public List<DataCompletenessConfigDTO> findAllByDataset(String dataset) {
Predicate predicate = Predicate.EQ("dataset", dataset);
return findByPredicate(predicate);
}
@Override
public DataCompletenessConfigDTO findByDatasetAndDateSDF(String dataset, String dateToCheckInSDF) {
Predicate predicate =
Predicate.AND(Predicate.EQ("dataset", dataset), Predicate.EQ("dateToCheckInSDF", dateToCheckInSDF));
List<DataCompletenessConfigBean> list = genericPojoDao.get(predicate, DataCompletenessConfigBean.class);
DataCompletenessConfigDTO result = null;
if (CollectionUtils.isNotEmpty(list)) {
result = MODEL_MAPPER.map(list.get(0), DataCompletenessConfigDTO.class);
}
return result;
}
@Override
public DataCompletenessConfigDTO findByDatasetAndDateMS(String dataset, Long dateToCheckInMS) {
Predicate predicate =
Predicate.AND(Predicate.EQ("dataset", dataset), Predicate.EQ("dateToCheckInMS", dateToCheckInMS));
List<DataCompletenessConfigBean> list = genericPojoDao.get(predicate, DataCompletenessConfigBean.class);
DataCompletenessConfigDTO result = null;
if (CollectionUtils.isNotEmpty(list)) {
result = MODEL_MAPPER.map(list.get(0), DataCompletenessConfigDTO.class);
}
return result;
}
@Override
public List<DataCompletenessConfigDTO> findAllInTimeRange(long startTime, long endTime) {
Predicate timePredicate = Predicate.AND(Predicate.GE("dateToCheckInMS", startTime), Predicate.LT("dateToCheckInMS", endTime));
return findByPredicate(timePredicate);
}
@Override
public List<DataCompletenessConfigDTO> findAllByDatasetAndInTimeRange(String dataset, long startTime, long endTime) {
Predicate timePredicate = Predicate.AND(Predicate.GE("dateToCheckInMS", startTime), Predicate.LT("dateToCheckInMS", endTime));
Predicate datasetPredicate = Predicate.EQ("dataset", dataset);
Predicate predicate = Predicate.AND(datasetPredicate, timePredicate);
return findByPredicate(predicate);
}
@Override
public List<DataCompletenessConfigDTO> findAllByDatasetAndInTimeRangeAndPercentCompleteGT(String dataset,
long startTime, long endTime, double percentComplete) {
Predicate timePredicate = Predicate.AND(Predicate.GE("dateToCheckInMS", startTime), Predicate.LT("dateToCheckInMS", endTime));
Predicate datasetPredicate = Predicate.EQ("dataset", dataset);
Predicate percentCompletePrediate = Predicate.GT("percentComplete", percentComplete);
Predicate predicate = Predicate.AND(datasetPredicate, timePredicate, percentCompletePrediate);
return findByPredicate(predicate);
}
@Override
public List<DataCompletenessConfigDTO> findAllByTimeOlderThan(long time) {
Predicate predicate = Predicate.LT("dateToCheckInMS", time);
return findByPredicate(predicate);
}
@Override
public List<DataCompletenessConfigDTO> findAllByTimeOlderThanAndStatus(long time, boolean dataComplete) {
Predicate datePredicate = Predicate.LT("dateToCheckInMS", time);
Predicate dataCompletePredicate = Predicate.EQ("dataComplete", dataComplete);
Predicate predicate = Predicate.AND(datePredicate, dataCompletePredicate);
return findByPredicate(predicate);
}
@Override
public List<DataCompletenessConfigDTO> findAllByDatasetAndInTimeRangeAndStatus(String dataset, long startTime,
long endTime, boolean dataComplete) {
Predicate timePredicate = Predicate.AND(Predicate.GE("dateToCheckInMS", startTime), Predicate.LT("dateToCheckInMS", endTime));
Predicate datasetPredicate = Predicate.EQ("dataset", dataset);
Predicate statusPredicate = Predicate.EQ("dataComplete", dataComplete);
Predicate finalPredicate = Predicate.AND(datasetPredicate, timePredicate, statusPredicate);
return findByPredicate(finalPredicate);
}
}