package ru.ulstu.project.service; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.thymeleaf.util.StringUtils; import ru.ulstu.deadline.service.DeadlineService; import ru.ulstu.project.model.Project; import ru.ulstu.project.model.ProjectDto; import ru.ulstu.project.repository.ProjectRepository; import java.util.Arrays; import java.util.List; import static org.springframework.util.ObjectUtils.isEmpty; import static ru.ulstu.core.util.StreamApiUtils.convert; @Service public class ProjectService { private final static int MAX_DISPLAY_SIZE = 40; private final ProjectRepository projectRepository; private final DeadlineService deadlineService; public ProjectService(ProjectRepository projectRepository, DeadlineService deadlineService) { this.projectRepository = projectRepository; this.deadlineService = deadlineService; } public List findAll() { return projectRepository.findAll(); } public List findAllDto() { List projects = convert(findAll(), ProjectDto::new); projects.forEach(projectDto -> projectDto.setTitle(StringUtils.abbreviate(projectDto.getTitle(), MAX_DISPLAY_SIZE))); return projects; } public ProjectDto findOneDto(Integer id) { return new ProjectDto(projectRepository.findOne(id)); } public List getProjectStatuses() { return Arrays.asList(Project.ProjectStatus.values()); } @Transactional public Project create(ProjectDto projectDto) { Project newProject = copyFromDto(new Project(), projectDto); newProject = projectRepository.save(newProject); return newProject; } private Project copyFromDto(Project project, ProjectDto projectDto) { project.setTitle(projectDto.getTitle()); project.setDeadlines(deadlineService.saveOrCreate(projectDto.getDeadlines())); return project; } public Project save(ProjectDto projectDto) { if (isEmpty(projectDto.getId())) { return create(projectDto); } else { return update(projectDto); } } private Project update(ProjectDto projectDto) { throw new RuntimeException("not implemented yet"); } public Project findById(Integer id) { return projectRepository.findOne(id); } }