package com.griddynamics.jagger.jaas.service.impl; import com.google.common.collect.Lists; import com.griddynamics.jagger.jaas.service.TestExecutionService; import com.griddynamics.jagger.jaas.storage.TestExecutionDao; import com.griddynamics.jagger.jaas.storage.model.TestExecutionAuditEntity; import com.griddynamics.jagger.jaas.storage.model.TestExecutionEntity; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.util.List; import static com.google.common.collect.Lists.newArrayList; import static com.griddynamics.jagger.jaas.storage.model.TestExecutionEntity.TestExecutionStatus.PENDING; @Service public class TestExecutionServiceImpl implements TestExecutionService { @Value("${test.execution.default.time.to.start.seconds}") private Long testExecutionDefaultTimeToStartInSeconds; private TestExecutionDao testExecutionDao; @Autowired public TestExecutionServiceImpl(TestExecutionDao testExecutionDao) { this.testExecutionDao = testExecutionDao; } @Override public TestExecutionEntity read(Long id) { return testExecutionDao.read(id); } @Override public List<TestExecutionEntity> readAll() { return newArrayList(testExecutionDao.readAll()); } @Override public List<TestExecutionEntity> readAllPending() { return newArrayList(testExecutionDao.readAllPending()); } @Override public List<TestExecutionEntity> readByEnv(String envId) { return newArrayList(testExecutionDao.readByEnv(envId)); } @Override public TestExecutionEntity create(TestExecutionEntity testExecution) { if (testExecution.getExecutionTimeToStartInSeconds() == null || testExecution.getExecutionTimeToStartInSeconds() == 0) { testExecution.setExecutionTimeToStartInSeconds(testExecutionDefaultTimeToStartInSeconds); } testExecution.setAuditEntities(Lists.newArrayList(new TestExecutionAuditEntity(testExecution, System.currentTimeMillis(), null, PENDING))); testExecution.setStatus(PENDING); testExecutionDao.create(testExecution); return testExecution; } @Override public void delete(Long testExecutionId) { testExecutionDao.delete(testExecutionId); } @Override public void update(TestExecutionEntity testExecution) { TestExecutionEntity dbTestExecutionEntity = testExecutionDao.read(testExecution.getId()); if (dbTestExecutionEntity.getStatus() != testExecution.getStatus()) { testExecution.addAuditEntity(new TestExecutionAuditEntity(testExecution, System.currentTimeMillis(), dbTestExecutionEntity.getStatus(), testExecution.getStatus())); } testExecution.getAuditEntities().forEach(auditEntity -> auditEntity.setTestExecutionEntity(testExecution)); testExecutionDao.update(testExecution); } }