package com.linkedin.thirdeye.datalayer.bao.jdbc;
import com.google.inject.Singleton;
import com.linkedin.thirdeye.datalayer.bao.RawAnomalyResultManager;
import com.linkedin.thirdeye.datalayer.dto.RawAnomalyResultDTO;
import com.linkedin.thirdeye.datalayer.pojo.AnomalyFeedbackBean;
import com.linkedin.thirdeye.datalayer.pojo.RawAnomalyResultBean;
import com.linkedin.thirdeye.datalayer.util.Predicate;
import java.util.List;
@Singleton
public class RawAnomalyResultManagerImpl extends AbstractManagerImpl<RawAnomalyResultDTO>
implements RawAnomalyResultManager {
public RawAnomalyResultManagerImpl() {
super(RawAnomalyResultDTO.class, RawAnomalyResultBean.class);
}
public Long save(RawAnomalyResultDTO entity) {
if (entity.getId() != null) {
//TODO: throw exception and force the caller to call update instead
update(entity);
return entity.getId();
}
RawAnomalyResultBean bean =
(RawAnomalyResultBean) convertDTO2Bean(entity, RawAnomalyResultBean.class);
if (entity.getFeedback() != null) {
if (entity.getFeedback().getId() == null) {
AnomalyFeedbackBean feedbackBean =
(AnomalyFeedbackBean) convertDTO2Bean(entity.getFeedback(), AnomalyFeedbackBean.class);
Long feedbackId = genericPojoDao.put(feedbackBean);
entity.getFeedback().setId(feedbackId);
}
bean.setAnomalyFeedbackId(entity.getFeedback().getId());
}
if (entity.getFunction() != null) {
bean.setFunctionId(entity.getFunction().getId());
}
Long id = genericPojoDao.put(bean);
entity.setId(id);
return id;
}
public int update(RawAnomalyResultDTO entity) {
RawAnomalyResultBean bean =
(RawAnomalyResultBean) convertDTO2Bean(entity, RawAnomalyResultBean.class);
if (entity.getFeedback() != null) {
if (entity.getFeedback().getId() == null) {
AnomalyFeedbackBean feedbackBean =
(AnomalyFeedbackBean) convertDTO2Bean(entity.getFeedback(), AnomalyFeedbackBean.class);
Long feedbackId = genericPojoDao.put(feedbackBean);
entity.getFeedback().setId(feedbackId);
}
bean.setAnomalyFeedbackId(entity.getFeedback().getId());
}
if (entity.getFunction() != null) {
bean.setFunctionId(entity.getFunction().getId());
}
return genericPojoDao.update(bean);
}
public RawAnomalyResultDTO findById(Long id) {
RawAnomalyResultBean rawAnomalyResultBean = genericPojoDao.get(id, RawAnomalyResultBean.class);
if (rawAnomalyResultBean != null) {
RawAnomalyResultDTO rawAnomalyResultDTO;
rawAnomalyResultDTO = createRawAnomalyDTOFromBean(rawAnomalyResultBean);
return rawAnomalyResultDTO;
} else {
return null;
}
}
public List<RawAnomalyResultDTO> findAllByTimeAndFunctionId(long startTime, long endTime,
long functionId) {
Predicate startTimePredicate;
startTimePredicate =
Predicate.AND(Predicate.GE("startTime", startTime), Predicate.LE("startTime", endTime));
Predicate endTimeTimePredicate;
endTimeTimePredicate =
Predicate.AND(Predicate.GE("endTime", startTime), Predicate.LE("endTime", endTime));;
Predicate functionIdPredicate = Predicate.EQ("functionId", functionId);
Predicate finalPredicate =
Predicate.AND(functionIdPredicate, Predicate.OR(endTimeTimePredicate, startTimePredicate));
return findByPredicate(finalPredicate);
}
public List<RawAnomalyResultDTO> findUnmergedByFunctionId(Long functionId) {
// "select r from RawAnomalyResultDTO r where r.function.id = :functionId and r.merged=false "
// + "and r.dataMissing=:dataMissing";
Predicate predicate = Predicate.AND(//
Predicate.EQ("functionId", functionId), //
Predicate.EQ("merged", false), //
Predicate.EQ("dataMissing", false) //
);
return findByPredicate(predicate);
}
public List<RawAnomalyResultDTO> findByFunctionId(Long functionId) {
Predicate predicate = Predicate.EQ("functionId", functionId);
return findByPredicate(predicate);
}
}