package ru.ulstu.conference.service; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ru.ulstu.conference.model.Conference; import ru.ulstu.conference.model.ConferenceDto; import ru.ulstu.conference.repository.ConferenceRepository; import ru.ulstu.deadline.service.DeadlineService; import java.io.IOException; import java.util.List; import static org.springframework.util.ObjectUtils.isEmpty; import static ru.ulstu.core.util.StreamApiUtils.convert; @Service public class ConferenceService { private final static int MAX_DISPLAY_SIZE = 40; private final ConferenceRepository conferenceRepository; private final DeadlineService deadlineService; public ConferenceService(ConferenceRepository conferenceRepository, DeadlineService deadlineService) { this.conferenceRepository = conferenceRepository; this.deadlineService = deadlineService; } public List findAll() { return conferenceRepository.findAll(); } public List findAllDto() { List conferences = convert(findAll(), ConferenceDto::new); conferences.forEach(conferenceDto -> conferenceDto.setTitle(StringUtils.abbreviate(conferenceDto.getTitle(), MAX_DISPLAY_SIZE))); return conferences; } public ConferenceDto findOneDto(Integer id) { return new ConferenceDto(conferenceRepository.findOne(id)); } public void save(ConferenceDto conferenceDto) throws IOException { if (isEmpty(conferenceDto.getId())) { create(conferenceDto); } else { update(conferenceDto); } } @Transactional public Integer create(ConferenceDto conferenceDto) throws IOException { Conference newConference = copyFromDto(new Conference(), conferenceDto); newConference = conferenceRepository.save(newConference); return newConference.getId(); } @Transactional public Integer update(ConferenceDto conferenceDto) throws IOException { Conference conference = conferenceRepository.findOne(conferenceDto.getId()); conferenceRepository.save(copyFromDto(conference, conferenceDto)); return conference.getId(); } private Conference copyFromDto(Conference conference, ConferenceDto conferenceDto) throws IOException { conference.setTitle(conferenceDto.getTitle()); conference.setDescription(conferenceDto.getDescription()); conference.setUrl(conferenceDto.getUrl()); conference.setPing(0); conference.setBeginDate(conference.getBeginDate()); conference.setEndDate(conference.getEndDate()); conference.setDeadlines(deadlineService.saveOrCreate(conferenceDto.getDeadlines())); return conference; } }