167 lines
6.7 KiB
Java
167 lines
6.7 KiB
Java
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.model.ConferenceFilterDto;
|
|
import ru.ulstu.conference.model.ConferenceUser;
|
|
import ru.ulstu.conference.repository.ConferenceRepository;
|
|
import ru.ulstu.deadline.service.DeadlineService;
|
|
import ru.ulstu.paper.model.Paper;
|
|
import ru.ulstu.paper.service.PaperService;
|
|
import ru.ulstu.user.model.User;
|
|
import ru.ulstu.user.service.UserService;
|
|
|
|
import java.io.IOException;
|
|
import java.util.ArrayList;
|
|
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 ConferenceService {
|
|
private final static int MAX_DISPLAY_SIZE = 40;
|
|
|
|
private final ConferenceRepository conferenceRepository;
|
|
private final ConferenceUserService conferenceUserService;
|
|
private final DeadlineService deadlineService;
|
|
private final PaperService paperService;
|
|
private final UserService userService;
|
|
|
|
public ConferenceService(ConferenceRepository conferenceRepository,
|
|
ConferenceUserService conferenceUserService,
|
|
DeadlineService deadlineService,
|
|
PaperService paperService,
|
|
UserService userService) {
|
|
this.conferenceRepository = conferenceRepository;
|
|
this.conferenceUserService = conferenceUserService;
|
|
this.deadlineService = deadlineService;
|
|
this.paperService = paperService;
|
|
this.userService = userService;
|
|
}
|
|
|
|
public ConferenceDto getExistConferenceById(Integer id) {
|
|
ConferenceDto conferenceDto = findOneDto(id);
|
|
conferenceDto.setNotSelectedPapers(getNotSelectPapers(conferenceDto.getPaperIds()));
|
|
conferenceDto.setDisabledTakePart(isCurrentUserParticipant(conferenceDto.getUsers()));
|
|
return conferenceDto;
|
|
}
|
|
|
|
public ConferenceDto getNewConference() {
|
|
ConferenceDto conferenceDto = new ConferenceDto();
|
|
conferenceDto.setNotSelectedPapers(getNotSelectPapers(new ArrayList<Integer>()));
|
|
return conferenceDto;
|
|
}
|
|
|
|
|
|
public List<Conference> findAll() {
|
|
return conferenceRepository.findAll();
|
|
}
|
|
|
|
public List<ConferenceDto> findAllDto() {
|
|
List<ConferenceDto> 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));
|
|
conferenceDto.getRemovedDeadlineIds().forEach(deadlineService::remove);
|
|
return conference.getId();
|
|
}
|
|
|
|
@Transactional
|
|
public void delete(Integer conferenceId) {
|
|
if (conferenceRepository.exists(conferenceId)) {
|
|
conferenceRepository.delete(conferenceId);
|
|
}
|
|
}
|
|
|
|
public void removeDeadline(ConferenceDto conferenceDto, Integer deadlineIndex) throws IOException {
|
|
if (conferenceDto.getDeadlines().get(deadlineIndex).getId() != null) {
|
|
conferenceDto.getRemovedDeadlineIds().add(conferenceDto.getDeadlines().get(deadlineIndex).getId());
|
|
}
|
|
conferenceDto.getDeadlines().remove((int) deadlineIndex);
|
|
}
|
|
|
|
public void removePaper(ConferenceDto conferenceDto, Integer paperIndex) throws IOException {
|
|
Paper removedPaper = conferenceDto.getPapers().remove((int) paperIndex);
|
|
conferenceDto.getNotSelectedPapers().add(removedPaper);
|
|
}
|
|
|
|
public void takePart(ConferenceDto conferenceDto) throws IOException {
|
|
conferenceDto.getUsers().add(new ConferenceUser(userService.getCurrentUser()));
|
|
conferenceDto.setDisabledTakePart(true);
|
|
}
|
|
|
|
public List<Paper> getNotSelectPapers(List<Integer> paperIds) {
|
|
return paperService.findAllNotSelect(paperIds);
|
|
}
|
|
|
|
public List<User> getAllUsers() {
|
|
return userService.findAll();
|
|
}
|
|
|
|
public List<ConferenceUser.Participation> getAllParticipations() {
|
|
return Arrays.asList(ConferenceUser.Participation.values());
|
|
}
|
|
|
|
public List<ConferenceUser.Deposit> getAllDeposit() {
|
|
return Arrays.asList(ConferenceUser.Deposit.values());
|
|
}
|
|
|
|
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(conferenceDto.getBeginDate());
|
|
conference.setEndDate(conferenceDto.getEndDate());
|
|
conference.setPapers(conferenceDto.getPapers());
|
|
conference.setDeadlines(deadlineService.saveOrCreate(conferenceDto.getDeadlines()));
|
|
conference.setUsers(conferenceUserService.saveOrCreate(conferenceDto.getUsers()));
|
|
if (conferenceDto.getPaperIds() != null && !conferenceDto.getPaperIds().isEmpty()) {
|
|
conferenceDto.getPaperIds().forEach(paperId ->
|
|
conference.getPapers().add(paperService.findEntityById(paperId)));
|
|
}
|
|
return conference;
|
|
}
|
|
|
|
|
|
public boolean isCurrentUserParticipant(List<ConferenceUser> conferenceUsers) {
|
|
return conferenceUsers.stream().anyMatch(participant -> participant.getUser().equals(userService.getCurrentUser()));
|
|
}
|
|
|
|
public List<ConferenceDto> filter(ConferenceFilterDto conferenceFilterDto) {
|
|
return convert(conferenceRepository.filter(
|
|
conferenceFilterDto.getFilterUserId() == null ? null : userService.findById(conferenceFilterDto.getFilterUserId()),
|
|
conferenceFilterDto.getYear()), ConferenceDto::new);
|
|
|
|
}
|
|
}
|