package com.griddynamics.jagger.jaas.storage.impl;
import com.griddynamics.jagger.jaas.storage.AbstractCrudDao;
import com.griddynamics.jagger.jaas.storage.TestExecutionDao;
import com.griddynamics.jagger.jaas.storage.model.TestExecutionEntity;
import org.hibernate.Query;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Objects;
import static com.griddynamics.jagger.jaas.storage.model.TestExecutionEntity.TestExecutionStatus.PENDING;
import static org.hibernate.criterion.CriteriaSpecification.DISTINCT_ROOT_ENTITY;
/**
* Hibernate based transactional implementation of {@link com.griddynamics.jagger.jaas.storage.CrudDao} interface for {@link TestExecutionEntity}.
*/
@SuppressWarnings("unchecked")
@Repository
public class TestExecutionDaoImpl extends AbstractCrudDao<TestExecutionEntity, Long> implements TestExecutionDao {
@Override
@Transactional
public TestExecutionEntity read(Long testExecutionId) {
return (TestExecutionEntity) getCurrentSession().get(TestExecutionEntity.class, testExecutionId);
}
@Override
@Transactional
public List<TestExecutionEntity> readAll() {
return getCurrentSession().createCriteria(TestExecutionEntity.class).setResultTransformer(DISTINCT_ROOT_ENTITY).list();
}
@Override
@Transactional
public List<TestExecutionEntity> readByEnvAndLoadScenario(String envId, String loadScenarioId) {
Query query = getCurrentSession().createQuery("select t from TestExecutionEntity t where t.envId=:envId and t.loadScenarioId=:scenarioId");
query.setString("envId", envId);
query.setString("scenarioId", loadScenarioId);
return (List<TestExecutionEntity>) query.list();
}
@Override
@Transactional
public List<TestExecutionEntity> readByEnv(String envId) {
Query query = getCurrentSession().createQuery("select t from TestExecutionEntity t where t.envId=:envId");
query.setString("envId", envId);
return (List<TestExecutionEntity>) query.list();
}
@Override
@Transactional
public List<TestExecutionEntity> readAllPending() {
Query query = getCurrentSession().createQuery("select t from TestExecutionEntity t where t.status = :status");
query.setString("status", PENDING.name());
return query.list();
}
@Override
@Transactional
public void create(TestExecutionEntity testExecution) {
getCurrentSession().save(testExecution);
}
@Override
@Transactional
public void create(Iterable<TestExecutionEntity> entities) {
Objects.requireNonNull(entities);
entities.forEach(testExecution -> getCurrentSession().save(testExecution));
}
@Override
@Transactional
public void update(TestExecutionEntity testExecution) {
getCurrentSession().update(testExecution);
}
@Override
@Transactional
public void createOrUpdate(TestExecutionEntity testExecution) {
getCurrentSession().saveOrUpdate(testExecution);
}
@Override
@Transactional
public void delete(Long testExecutionId) {
TestExecutionEntity testExecution = read(testExecutionId);
delete(testExecution);
}
@Override
@Transactional
public void delete(TestExecutionEntity testExecution) {
getCurrentSession().delete(testExecution);
}
@Override
@Transactional
public boolean exists(Long testExecutionId) {
Query query = getCurrentSession().createQuery("select 1 from TestExecutionEntity t where t.id = :id");
query.setLong("id", testExecutionId);
return query.uniqueResult() != null;
}
}