ng-tracker/src/main/java/ru/ulstu/project/service/ProjectService.java
2019-04-17 14:38:07 +03:00

78 lines
2.4 KiB
Java

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<Project> findAll() {
return projectRepository.findAll();
}
public List<ProjectDto> findAllDto() {
List<ProjectDto> 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<Project.ProjectStatus> 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);
}
}